Elasticsearch-6.0.0在Centos 7.3上部署

本文介绍了 elasticsearch 是什么以及如何在 Centos 上部署。

Elasticsearch简介

来自百度的介绍

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题以及可能出现的更多其它问题。


自己的理解

就是一个基于Lucene自带分布式的非常像Nosql的搜索引擎/结构化数据库(并不支持数据库的join操作),基于HTTP协议通过 RESTful API, 传输Json数据提供稳定,可靠的搜索服务

Elasticsearch 相关资料

部署

安装

Java安装

通过yum进行安装,先搜索合适的版本

yum search java|grep jdk

选择版本安装

yum install java-1.8.0-openjdk

然后配置环境变量

Elasticsearch安装

下载elasticsearch-6.0.0

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.tar.gz

解压elasticsearch

tar -zxvf elasticsearch-6.0.0.tar.gz

做完这一步请先浏览下一节的elasticsearch配置,改变插件等安装的位置。

Kibana安装

kibana的安装方法与elasticsearch,注意版本号应与elasticsearch相同,kibana是一个可视化数据管理工具,你可以在服务器上安装开启服务进行管理,也可以在本地开启服务连接云主机,进行管理。不过重要的是kibana的版本号应与elasticsearch的版本号相同。

wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz

tar -zxvf kibana-6.0.0-linux-x86_64.tar.gz

ik分词器安装

先cd到elasticsearch目录下,然后通过elasticsearch-plugin安装

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.0.0/elasticsearch-analysis-ik-6.0.0.zip

配置

Elasticsearch配置

elasticsearch致力于隐藏分布式复杂的特性,以下操作都是在底层自动完成的:

  • 将文档分区到不同的容器或者分片中,他们可以存在于一个或多个节点中
  • 将分片均匀的分配到各个节点,对索引和搜索做负载均衡
  • 冗余每个分片,防止硬件故障造成的数据丢失
  • 将集群中任意一个节点上的请求路由到相应数据的所在节点
  • 无论是增加节点,还是移除节点,分片都可以做到无缝的扩展和迁移

喵,elasticsearch分布式的细节可以去研究官方文档,如何处理文档存储,如何进行扩展集群和故障转移,如何进行分布式搜索,分片是什么以及如何工作的。当然这些都不懂也是可以使用elasticsearch的

要说elasticsearch的配置,得先搞清楚几个事情。

  • 集群(cluster)由一个或多个节点(node)组成,他们具有相同的cluster.name,它们协同工作,分享数据和负载。当加入新节点或者删除一个节点时,集群就会感知到并平衡数据。
  • 节点(node) 一个Elasticsearch实例,一个机器可以有多个node,大多数情况node运行在一个独立的环境或虚拟机上
  • 索引(index)这里的索引指的不是动词,es有两个index一个是动词建立索引,还有一个是名词,类似于关系型数据库的table。ES和RDB的对应关系如下:RDB => DB => Tables => Rows => Columns : ES => Indices => Types => Documents => Fields
  • 分片(shard)ES是分布式搜索引擎,每个索引有一个或多个分片,索引的数据被分配到各个分片上,相当于一桶水用了N个杯子装,也利于横向扩展
  • 集群中一个节点会被选举为主节点(master),它将临时管理集群级别的一些变更,例如新建或删除索引,增加或移除节点等。主节点不参与文档级别的变更或搜索,这意味着在流量增长的时候,该主节点不会成为集群的瓶颈。
  • 作为用户,我们能够与集群中的任何节点通信,包括主节点。每一个节点都知道文档存在于哪个节点上,它们可以转发请求到相应的节点上。我们访问的节点负责收集各节点返回的数据,最后一起返回给客户端。这一切都由Elasticsearch处理。

再来说说elasticsearch的配置文件elasticsearch.yml
elasticsearch默认启动的集群名字叫elasticsearch。为了安全,最好改个名字。

cluster.name: elasticsearch_production

然后是节点名字,默认会随机指定一个名字,elasticsearch作者增添了一些有趣的名字,可是这并不那么有趣,因为你会搞不清哪台物理机叫什么名字。最主要的是每次重启时,都会得到一个新的名字,这使得日志变得混乱,所以配置节点的名称是非常必要的。

node.name: elasticsearch_001_data

下面这个配置成节点的ip就好

network.host: ip

路径配置,这也是十分必要的,因为默认情况下,elasticsearch会把插件、日志以及数据放在安装目录下,重新安装就会很麻烦。可以通过逗号分隔指定多个目录,如果每个目录分别挂载不同的硬盘,这可是一个简单且高效实现一个软磁盘阵列的办法,和任何磁盘阵列一样一个硬盘坏了,数据也一样会丢失,而且elasticsearch不会将一个分片放在不同的硬盘上,因为一个驱动器的丢失会破坏所有的分片,所以elasticsearch还是将分片放在一个驱动器上。性能的话呢,如果想添加多个驱动器来提高一个单独索引的性能,帮助并不大,因为大多数节点只有一个分片和这样一个积极的驱动器。多个数据路径只是帮助有多个索引/分片再单个节点上喵,如果需要更高级的、稳健的、灵活的配置,还是需要用software RAID软件,而不是多个数据路径的功能

1
2
3
4
5
path.data: /path/to/data1,/path/to/data2
# Path to log files:
path.logs: /path/to/logs
# Path to where plugins are installed:
path.plugins: /path/to/plugins

最小主节点数
minimum_master_nodes 设定对你的集群的稳定 极其 重要。 当你的集群中有两个 masters(注:主节点)的时候,这个配置有助于防止 脑裂 ,一种两个主节点同时存在于一个集群的现象。

如果你的集群发生了脑裂,那么你的集群就会处在丢失数据的危险中,因为主节点被认为是这个集群的最高统治者,它决定了什么时候新的索引可以创建,分片是如何移动的等等。如果你有 两个 masters 节点, 你的数据的完整性将得不到保证,因为你有两个节点认为他们有集群的控制权。

这个配置就是告诉 Elasticsearch 当没有足够 master 候选节点的时候,就不要进行 master 节点选举,等 master 候选节点足够了才进行选举。

此设置应该始终被配置为 master 候选节点的法定个数(大多数个)。法定个数就是 ( master 候选节点个数 / 2) + 1 。 这里有几个例子:

如果你有 10 个节点(能保存数据,同时能成为 master),法定数就是 6 。
如果你有 3 个候选 master 节点,和 100 个 data 节点,法定数就是 2 ,你只要数数那些可以做 master 的节点数就可以了。
如果你有两个节点,你遇到难题了。法定数当然是 2 ,但是这意味着如果有一个节点挂掉,你整个集群就不可用了。 设置成 1 可以保证集群的功能,但是就无法保证集群脑裂了,像这样的情况,你最好至少保证有 3 个节点。
你可以在你的 elasticsearch.yml 文件中这样配置:

discovery.zen.minimum_master_nodes: 2

具体的还请阅读官方文档有些部分还都不懂(逃,还有配置文件的详解,不过补充一个都没有提及的配置,如何开启外网ip访问?

http.host: 0.0.0.0

这样就能够通过ip加端口号进行访问了。

Kibana配置

kibana的配置文件在config目录下,这样就kibana就可以通过外网访问进行管理。

1
server.host: 0.0.0.0

也可以通过下面这种方式在自己的pc上开启kibana来对ES进行管理

1
elasticsearch.url: "http://ip:9200"

启动

不能用root用户启动elasticsearch,ES由于安全考虑不能使用root权限启动,如果用root启动会报cannot run as root

1
2
3
4
5
groupadd elasticsearch
useradd elastic -g elasticsearch
chown -R -v elastic:elasticsearch elasticsearch-6.0.0
su elastic
./bin/elasticsearch -d

如果你改变了配置文件中的各种路径,也要给那些路径配置权限,配置方法同上。

最后还要将 kernel 的 vm.max_map_count 设置为 262144。

1
sysctl -w vm.max_map_count=262144

这样就能够正确启动了,打开另外一个终端测试,如果得到类似的json格式的数据那么就说明搭建成功了

curl ‘http://localhost:9200/?pretty'

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name" : "2p_QR4W",
"cluster_name" : "elasticsearch_production",
"cluster_uuid" : "-Fgpx2fNRx64oiPXblNzOQ",
"version" : {
"number" : "6.0.0",
"build_hash" : "8f0685b",
"build_date" : "2017-11-10T18:41:22.859Z",
"build_snapshot" : false,
"lucene_version" : "7.0.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}

ES启动完毕后就可以启动kibana了,cd到kibana目录下

./bin/kibana

然后打开浏览器访问

http://ip:5601/app/kibana

或者在本地启动kibana服务

http://localhost/app/kibana

懒得截图

集群搭建

每台机子按照上述的配置文件进行配置,集群名相同,节点名字有序替换。

然后依次启动机子就好了。

本篇也会随着学习不断更新。