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: