Elasticsearch集群部署


ES的集群部署其实和单机部署几乎一致,主要的不同点就在于配置文件

服务规划:

ES集群部署 

可参考将三台设备分别部署好ES

修改ES配置文件

将三台设备的配置文件进行修改

su - es

cd /usr/local/elasticsearch-7.6.1/config/

vi elasticsearch.yml

#ES集群名称
cluster.name: my-es

#ES节点名称,同一个集群内的节点名称不能相同(三个节点分别设置成node-1、node-2、node-3)
node.name: node-1

#该节点是否有资格被选举为master
node.master: true

#是否存储索引数据
node.data: true

#设置索引数据的存储路径
path.data: /usr/local/elasticsearch-7.6.1/data

#设置日志的存储路径
path.logs: /usr/local/elasticsearch-7.6.1/logs

#设置当前的ip地址,通过指定相同网段的其他节点会加入该集群中
network.host: 0.0.0.0

#设置对外服务的端口
http.port: 9200

#ES集群内部通信端口
transport.tcp.port: 9700

#该项的主要作用就是为了防止脑裂问题
#表示集群最少master数,如果集群master数少于该值,将无法启动
#官方推荐的参数配置:集群中节点数/2+1,加入有3个节点,我们该项就配置成2
discovery.zen.minimum_master_nodes: 2

#设置集群的初始节点列表,集群互通端口为我们所配置的端口
discovery.zen.ping.unicast.hosts: ["192.168.36.164:9700","192.168.36.150:9700","192.168.36.151:9700"]

cluster.initial_master_nodes: ["node-1","node-2","node-3"]

三个节点启动ES

cd /usr/local/elasticsearch-7.6.1/bin/

nohup ./elasticsearch &

命令查看ES集群节点状态

curl -XGET "localhost:9200/_cat/nodes?v"

ES脑裂问题说明

假如我们当前场景的ES集群有三个节点(node-1、node-2、node-3),node-1为master。

假如node-1与node-2和node-3这时候因为网路问题断开,就有可能出现以下情况:

  • node-1自己组成一个集群成为master
  • node-2和node-3自己又组成了一个集群重新选举新的master

这时候就会出现有两个master的存在。所以我们需要配置上discovery.zen.minimum_master_nodes项,必须保证我们ES的节点数大于或等于quorum的值,才会选举master。

我们再来看看设置discovery.zen.minimum_master_nodes项后刚刚所说的场景,node-1虽然与node-2和node-3断开连接,但是由于node-1这边不符合quorum的选举条件,就不会进行master的选举,而node-2和node-3符合quorum的条件,所以会选举master,这时候,我们的ES就还是会只有一个master节点