Elasticsearch集群安装配置

官方搭建步骤写得比较简单,因此遵循官方的指引安装

设置ES占用内存

在默认情况下,ES只允许本地访问api接口,如果我们希望在另外一台机器上访问ES的接口的话,需要配置主机地址:
/data/elasticsearch-6.2.4> vim config/elasticsearch.yml

#network.host: 192.168.0.1
network.host: 10.140.7.12

保存退出,重新启动es,一般都会报错,无法启动

1
2
3
4
[2017-03-16T10:51:23,168][INFO ][o.e.t.TransportService ] [DwX_4EG] publish_address {10.140.7.12:9300}, bound_addresses {10.140.7.12:9300}
[2017-03-16T10:51:23,176][INFO ][o.e.b.BootstrapChecks ] [DwX_4EG] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
ERROR: bootstrap checks failed
max virtual memory areas vm.max_map_count [65536] is too low, increase to at least [262144]

对于这个错误,需要这样处理,执行下面的命令,或者把这个配置/etc/sysctl.conf

1
sysctl -w vm.max_map_count=262144

再次启动,报下面的错误:

1
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

原因:
这是在因为操作系统不支持SecComp,而ES6.2.4默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。

解决:

elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:

1
2
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

重启ok
一下是网友遇到的问题,也一并记录一下:
[2016-12-20T22:37:28,543][INFO ][o.e.b.BootstrapCheck ] [elk-node1] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks
[2016-12-20T22:37:28,552][ERROR][o.e.b.Bootstrap ] [elk-node1] node validation exception
bootstrap checks failed
max number of threads [1024] for user [elasticsearch] is too low, increase to at least [2048]
[2016-12-20T22:37:28,560][INFO ][o.e.n.Node ] [elk-node1] stopping …
[2016-12-20T22:37:28,628][INFO ][o.e.n.Node ] [elk-node1] stopped
[2016-12-20T22:37:28,629][INFO ][o.e.n.Node ] [elk-node1] closing …
[2016-12-20T22:37:28,677][INFO ][o.e.n.Node ] [elk-node1] closed

报了一大串错误,其实只是一个警告。

解决:使用新的linux版本,就不会出现此类问题了。

问题二:

1
2
3
ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]

解决:切换到root用户,编辑/etc/security/limits.conf 添加类似如下内容

1
2
3
4
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

问题三:

1
max number of threads [1024] for user [lish] likely too low, increase to at least [2048]

解决:切换到root用户,修改配置文件/etc/security/limits.d/90-nproc.conf,如果没有该文件,则增加

修改如下内容:

1
2
3
* soft nproc 1024
#修改为
* soft nproc 2048

问题四:

1
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

解决:切换到root用户修改配置/etc/sysctl.conf

添加下面配置:

1
vm.max_map_count=655360

并执行命令:

1
sysctl -p

问题五:

以.deb安装包方式安装时,会提示找不到配置文件。添加软连接:

1
ln -s /etc/elasticsearch /usr/share/elasticsearch/config

重启服务。

脑裂(split brain)

单机测试开发的时候, 其实一个节点就够了. 上线, 使用两个节点, 目的是利用es本身的特性做到高可用.

但是两个节点是远远不够的. 启动后, 集群会选举一个master, 一切ok. 但是如果存在网络问题或者某个节点无响应(负载过高), 就会认为对方dead了, 然后两个节点自动选举为master, 在后续建索引的时候造成数据不一致.

两个节点防脑裂的配置, minimum_master_nodes决定了选主需要的最少节点数, N/2+1, 两个节点即2

1
discovery.zen.minimum_master_nodes: 2 

但是, 此时一个节点挂了, 则整个集群挂了(无法选举主节点了)

所以, 要再加一个节点, 这个节点只要保证稳定即可, 对cpu和磁盘要求不高. 这个es节点的配置同其他节点的区别node.data: false, 不存储索引数据.

1
2
# split brain prevent
node.data: false