ElasticSearch集群

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;

参考

  1. https://zhuanlan.zhihu.com/p/34830403
  2. 08 | ElasticSearch 集群水平扩展 |
  3. https://helloyoubeautifulthing.net/blog/2019/08/20/new-cluster-coordination-in-elasticsearch/
  4. 深入理解 Elasticsearch 7.x 新的集群协调层 | easyice
updatedupdated2024-05-152024-05-15