江明涛的博客
《Elasticsearch篇 四》elasticsearch 是如何实现 master 选举的
《Elasticsearch篇 四》elasticsearch 是如何实现 master 选举的

《Elasticsearch篇 四》elasticsearch 是如何实现 master 选举的

Elasticsearch 使用一种称为 “Zen Discovery” 的分布式一致性算法来管理集群状态和实现 master 节点选举。在 Elasticsearch 集群中,master 节点负责处理集群级别的操作,如创建和删除索引、分片分配等。为了确保集群的可用性和稳定性,Elasticsearch 实现了一个 master 节点选举机制。

当一个集群启动或 master 节点失效时,Elasticsearch 会启动 master 节点选举过程。选举过程遵循以下步骤:

  1. 节点发现:集群中的节点通过广播(Multicast)或单播(Unicast)方式互相发现。单播是在 elasticsearch.yml 配置文件中指定其他节点的 IP 和端口。从 Elasticsearch 7.0 开始,广播已被废弃,只支持单播。
  2. 主节点选举:当发现一台或多台节点丢失 master 节点时,集群中的节点会开始主节点选举。每个节点首先会检查自己是否具备成为主节点的资格(主节点资格由配置文件中的 “node.master” 参数决定,该参数默认为 true)。然后,节点将与其他具备主节点资格的节点通信,共同进行选举。
  3. 选举过程:Elasticsearch 使用了一种基于版本号的选举算法。每个节点都有一个集群状态版本号。在选举过程中,具备主节点资格的节点会分享它们的集群状态版本号。具有最高版本号的节点将被选为新的主节点。如果有多个节点具有相同的最高版本号,节点 ID 将作为决定因素,ID 最小的节点将被选为主节点。
  4. 选举结果传播:一旦新的主节点被选举出来,它将通知集群中的其他节点。然后,集群中的所有节点将接受新主节点的指导,并开始执行由主节点分配的集群级任务。

为了确保集群稳定性,Elasticsearch 还提供了一些额外的选举参数,如 “discovery.zen.minimum_master_nodes”,它用于设置参与选举的最小主节点数。设置这个参数可以防止 “脑裂” 现象,即在网络分区等情况下,集群可能被拆分成多个独立的部分,导致同时存在多个主节点。

需要注意的是,从 Elasticsearch 7.0 开始,Zen Discovery 被一个新的发现插件 “Zen2″(又称为 “Cluster Coordination”)所取代。新的插件在算法实现上有所优化,提供了更强大的容错能力和更高的集群稳定性。然而,基本的 master 节点选举过程和原理仍然相似。在 Elasticsearch 7.0 及更高版本中,使用 “Zen2” 插件时,以下是一些关键的改进和特性:

  1. 选举过程:与 Zen Discovery 相比,Zen2 使用了一种基于投票的一致性算法。当发生 master 节点选举时,节点会投票选择新的 master 节点。这种基于投票的选举算法有助于在面临网络分区等问题时保持集群的稳定性。
  2. 自动调整:在 Elasticsearch 7.x 中,Zen2 自动计算 “minimum_master_nodes” 参数的值,从而降低了误配置的可能性。这样可以确保在网络分区等问题发生时,集群不会因为拆分而出现多个主节点。
  3. 更好的集群状态管理:Zen2 优化了集群状态的发布过程,提高了数据一致性和容错能力。此外,它还简化了节点加入和离开集群的流程,提高了集群的可扩展性。

要使用 Zen2,你需要确保 Elasticsearch 版本为 7.0 或更高。虽然基本的 master 节点选举过程在两个插件之间有一定的相似性,但 Zen2 在一致性、稳定性和可扩展性方面提供了显著的改进。因此,如果可能的话,建议使用最新版本的 Elasticsearch 以获得最佳性能和稳定性。

上次更新时间 21 3 月, 2023 at 08:01 下午