Elasticsearch Cluster 搭建(2)

2)ES从2.0版本开始,默认的自动发现方式改为了单播(unicast)方式。配置里提供几台节点的地址,ES将其视作gossip router角色,借以完成集群的发现。由于这只是ES内一个很小的功能,所以 gossip router角色并不需要单独配置,每个ES节点都可以担任。所以,采用单播方式的集群,各节点都配置相同的几个节点列表作为router即可。

3)此外,考虑到节点有时候因为高负载,慢GC等原因可能会有偶尔没及时响应ping包的可能,一般建议稍微加大Fault Detection的超时时间,即discovery.zen.fd.ping_timeout参数。

4)同样基于安全考虑做的变更还有监听的主机名。Elasticsearch有两种模式,开发和生产模式,默认只监听本地lo网卡上,指定host之后默认即开启生产模式,所以正式环境上需要修改配置为监听具体的网卡。参考链接

5)上面的配置中,两个timeout可能会让人有所迷惑。这里的fd是fault detection的缩写。也就是说:

discovery.zen.ping.timeout 参数仅在加入或者选举master主节点的时候才起作用;

discovery.zen.fd.ping_timeout 参数则在稳定运行的集群中,master检测所有节点,以及节点检测master是否畅通时长期有用。

6)既然是长期有用,自然还有运行间隔和重试的配置,也可以根据实际情况调整,即调整

discovery.zen.fd.ping_interval和discovery.zen.fd.ping_retries这两个参数。

7)这里重点说下discovery.zen.minimum_master_nodes这个参数

在ping主节点过程中,节点会加入到集群中或者会被选举为主节点;发送主节点的超时时间由discovery.zen.join_timeout参数来控制,默认为3s,对于配置node.master为false的节点启动后不会作为主节点的候选。discovery.zen.minimum_master_nodes配置当前集群中最少的主节点数,对于多于两个节点的集群环境,计算公式如下:

(master_eligible_nodes / 2) + 1

比如我这里有3个master node,那么为了防止脑裂的出现,最小的主节点数就是:3/2+1=2;

同理,5个master,最小主节点数就是:5/2+1=3;

参考链接:zen discovery 和 transport module

参考链接:

8)ES是一个P2P类型(使用 gossip 协议)的分布式系统,除了集群状态管理以外,其他所有的请求都可以发送到集群内任意一台节点上,这个节点可以自己找到需要转发给哪些节点,并且直接跟这些节点通信。

9) 另外master node一般只负责集群内轻量级操作,比如创建、删除索引,跟踪集群内node的变化信息,决定哪个数据分片的存储位置,一般master不用来存储数据。

其他参数可以查阅官方文档:

https://www.elastic.co/guide/en/elasticsearch/reference/5.x/important-settings.html

更改系统设置和基本优化:

配置完elasticsearch之后即可以启动,但是在系统之前建议先调整系统参数,这里对应的是官方文档的Bootstrap Checks:

1)JVM Heap Size:

这里更改的是jvm的参数,更改之前需要确保ES的配置里,bootstrap.memory_lock项是启用的,见上:

vim /etc/elasticsearch/jvm.options
-Xms8g
-Xmx8g    #这里一般设置为50%-60%的系统物理内存大小

2)File Descriptors和Max Thread Number:

#临时设置办法:
ulimit -n 65536
#想永久生效,编辑系统limit文件,添加两行
vim /etc/security/limits.conf
elasticsearch    -      nofile          65536
elasticsearch    -      nproc          2048
 
#Ubuntu需要确保pam启用了limit:
vim /etc/pam.d/su
session    required  pam_limits.so  #这里取消注释
 
#系统配置
vim /etc/default/elasticsearch # 添加两行
MAX_LOCKED_MEMORY=unlimited
MAX_OPEN_FILES=65536

3)禁用swap

# swapoff -a  # 临时禁用
# vim /etc/fstab
  swap 行取消注释  #永久禁用

4)内核参数调整

# vim /etc/sysctl.conf
vm.max_map_count=262144  #对应Virtual Memory

启动服务:

# service elasticsearch start
# service elasticsearch status
 * elasticsearch is running
# update-rc.d elasticsearch defaults 95 10  #设置开机自启动

启动之后查看node和cluster的状态,常用的几个:

检查集群状态:

curl -XGET 'http://server_ip:9200/_cluster/state?pretty'

或者

curl -XGET 'http://server_ip:9200/_cluster/health?pretty'

输出示例,我的集群有9个node,3个master,6个data node:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/fc53a544f9a01acc475cd3052ec9e9c2.html