ElasticSearch集群
简介
- 一个ES集群由多个节点(Node)组成;
节点角色
每个节点可以设置
master
,data
两种属性状态;master:true时,表示该节点可以参与选举;
data: true时,表示该节点可以存储shard数据;
多个master节点会相互进行选择,产生唯一的一个leader;
如果一个节点的master,data都为false,该节点将成为一个类似proxy的节点,只参与请求的转发、结果聚合等。
每个node都可以执行任何请求并将请求进去转发到对应的node;
master 主节点负责shard的分配,移动和均衡;
节点角色
节点发现
ES通过ZenDiscovery实现的一套用于节点发现和选主等功能的模块;
每个节点通过和
discovery.zen.ping.unicast.hosts
中广播节点建立连接,形成一个联通图,从而保证所有节点能相互感知和访问;推荐将所有master节点设置为
discovery.zen.ping.unicast.hosts
;
master选举
es master选举是自己实现的一种基于quorum的多数派选举算法(es 7.xxx之后版本参考raft重新实现了选举算法);
master节点在自身不是leader且通过ZenDiscovery发现其他node(总数要多余quorum)都没有连接到leader节点时将发起选举;
投票时,会根据clusterStateVersion,id两个字段按一定的顺序进行投票,从而保证能稳定的选出leader;
获得多数投票的master将当选为leader;