跳到主要内容

Elasticsearch 中的节点(比如共 20 个),其中的 10 个选了一个 master,另外 10 个选了另一个 master,怎么办?

参考答案:

在 Elasticsearch 中,当多个节点尝试成为 master 节点,并出现分裂选举的情况(比如你提到的 10 个节点选了一个 master,另外 10 个选了另一个 master),这通常是由于网络分区(network partitioning)导致的。网络分区是当集群中的一部分节点无法与另一部分节点通信时发生的情况。

以下是一些建议的解决步骤:

  1. 检查网络连接

    • 确保所有节点之间的网络连接是正常的。
    • 使用工具如 pingtraceroute 检查网络延迟和可达性。
    • 如果使用的是云环境,检查是否有任何安全组或网络策略阻止了节点之间的通信。
  2. 检查 Elasticsearch 配置

    • 确保所有节点的 cluster.name 配置是相同的。
    • 检查 node.masternode.data 设置,确保它们与你的集群需求相匹配。
    • 确保 discovery.zen.minimum_master_nodes 设置正确。这个设置决定了在选举 master 之前,必须有多少个 master-eligible 节点是活跃的。通常,它应该设置为 (master_eligible_nodes / 2) + 1
  3. 重启节点

    • 在某些情况下,简单地重启有问题的节点可能会解决问题。
    • 在重启之前,确保你已经备份了所有重要的索引和数据。
  4. 手动干预

    • 如果以上步骤都不能解决问题,你可能需要手动干预。首先,确定哪个 master 是“正确”的,然后关闭所有选择了错误 master 的节点。
    • 在这些节点上,你可以修改 discovery.zen.ping.unicast.hosts 设置,让它指向正确的 master,然后重启这些节点。
  5. 监控和日志

    • 使用 Elasticsearch 的监控工具(如 Elasticsearch Head、Kibana 或第三方工具)来观察集群的健康状况和性能。
    • 查看 Elasticsearch 的日志文件,寻找任何与选举或网络分区相关的错误或警告。
  6. 硬件和部署考虑

    • 确保所有节点都有足够的硬件资源(如 CPU、内存和磁盘空间)。
    • 考虑使用更可靠的网络硬件和配置,以减少网络分区的可能性。
  7. 考虑升级

    • 如果你使用的是较旧的 Elasticsearch 版本,考虑升级到最新版本。新版本通常包含性能改进和错误修复,可能会帮助你解决此类问题。

最后,如果问题持续存在或非常复杂,建议咨询 Elasticsearch 社区或专家以获得更具体的帮助。