大家好,我是锋哥。今天分享关于【Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?】面试题。希望对大家有帮助;
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
在 Elasticsearch 中,master 节点是负责管理集群的状态和元数据的节点,确保集群的健康、分片的分配、节点的加入/移除等关键任务。为了确保集群的稳定性和高可用性,通常建议一个集群中只有 奇数个 master 节点,并且避免出现多个 master 选举的情况。
根据你的描述,当前有 20 个节点,其中 10 个节点选举为一个 master,另 10 个选举为另一个 master。这种情况是不理想的,可能导致以下问题:
- 分裂脑(Split Brain):由于多个 master 节点在集群中,集群的状态可能不一致,导致无法正确做出决策或数据丢失。
- 资源浪费:多个 master 节点在不必要的情况下进行选举,浪费资源。
解决方案:
-
调整
discovery.zen-dns Zen-DNS
配置: 在 Elasticsearch 7.x 或更高版本中,master 节点的选举是基于 Zen-DNS 来实现的。通常情况下,集群会自动进行 master 选举。为了避免分裂脑,应该确保discovery.zen-dns
的配置正确。确保集群的discovery.seed_hosts
配置正确,包含所有可成为 master 节点的 IP 地址。 -
设置
zen-dns.minimum_master_nodes
: 在集群中,有多个 master 节点时,使用discovery.zen-dns.minimum_master_nodes
配置来避免分裂脑。这个配置会设置一个阈值,只有当集群中至少有一定数量的 master 节点时,才会允许新的 master 被选举出来。这样可以避免两个不同的 master 节点之间出现竞争和不一致的情况。例如,如果你的集群中有 20 个节点,建议设置
minimum_master_nodes
为11
,即至少需要 11 个节点参与选举才能选举一个新的 master 节点。这样可以确保集群在多数节点支持的情况下进行 master 选举,避免多个 master 节点的冲突。discovery.zen-dns.minimum_master_nodes: 11
-
强制指定 master 节点: 如果希望控制哪些节点可以成为 master,可以通过设置
node.master
配置项来强制指定哪些节点作为 master 节点。例如,选出一部分节点作为 master 节点,其他节点为数据节点。node.master: true # 该节点可以成为 master node.master: false # 该节点不能成为 master
通过这种方式,你可以明确指定集群中哪些节点是 master 节点,确保 master 节点的数量为奇数。
-
重启集群中的节点: 如果你发现集群中已经有多个 master 节点,可能需要重启部分节点并确保这些节点按预期角色启动。通过重启,Elasticsearch 会重新进行 master 节点的选举,并按照配置来确定主节点。
总结
- 确保
minimum_master_nodes
设置正确,避免出现分裂脑现象。 - 明确指定哪些节点作为 master,并避免选择过多的 master 节点。
- 如果集群已经不稳定,可能需要重启部分节点进行恢复。
这样做可以保证 Elasticsearch 集群的稳定性和数据一致性,避免因多 master 节点导致的分裂脑和资源冲突。