elasticsearch - 节点不会加入集群 : NotMasterException (Weird master election bug)

标签 elasticsearch elasticsearch-5

我正在设置一个 elasticsearch (5.0.1) 集群。

它有 3 个 master-eligible 节点:

el-m01
el-m02
el-m03

集群组装失败,每个主节点在日志中得到以下NotMasterException异常:

[2016-11-21T15:24:13,274][INFO ][o.e.d.z.ZenDiscovery     ] [el-m01] failed to send join request to master [{el-m02}{bBhsu3fJSj-MyiWJGhQmog}{_IzdeUd4Sv6g-rhemGjEVQ}{192.168.110.118}{192.168.110.118:9300}{rack=r1}], reason [RemoteTransportException[[el-m02][192.168.110.118:9300][internal:discovery/zen/join]]; nested: NotMasterException[Node [{el-m02}{bBhsu3fJSj-MyiWJGhQmog}{_IzdeUd4Sv6g-rhemGjEVQ}{192.168.110.118}{192.168.110.118:9300}{rack=r1}] not master for join request]; ], tried [3] times

启用调试日志让我了解以下内容:

主选举正在进行中,并且是成功的。然而,虽然每个节点都选择了一个 master,但没有节点认为他是 master。 即:

  • el-m01 认为 el-m02 是 master
  • el-m02认为el-m03是master
  • el-m03认为el-m01是master

这里发生了什么?

最佳答案

情况是这样的:通过克隆一个 VM 来获得所有的主节点,每个节点都有相同的节点 ID

这可以通过以下命令验证,列出所有节点 ID:

GET /_cat/nodes?v&h=id,ip,name&full_id=true

请注意,由于您的集群尚未形成,因此需要单独查询每个节点,即:

curl 192.168.110.111:9200/_cat/nodes?v&h=id,ip,name&full_id=true
curl 192.168.110.112:9200/_cat/nodes?v&h=id,ip,name&full_id=true
(...)

这很糟糕。节点 ID 必须是唯一的。

要解决这种情况,您需要删除每个节点上的索引(在 /var/lib/elasticsearch 中)。这将删除 elasticsearch 中的所有数据,并且还会重置节点 ID。

为了避免出现这个问题,你可以:

  • A.在克隆虚拟机后安装elasticsearch
  • B.使用像 ansible 或 puppet 这样的自动化工具来管理 elasticsearch。

关于elasticsearch - 节点不会加入集群 : NotMasterException (Weird master election bug),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810765/

相关文章:

search - Elasticsearch:在列表中搜索字段 null OR

elasticsearch - 将 Elasticsearch 结果范围限定为特定 ID

elasticsearch - Logstash-forwarder 作为 Windows 服务

elasticsearch - 通过日汇总,两个属性的总和进行 Elasticsearch

database - 关于 Elasticsearch 的查询

elasticsearch - ES聚合内部查询

java - 运行两个连续的 java 测试时出现 Elasticsearch NumberFormatException

sorting - 如何在将多个字段的值相互比较的同时按多个字段对elasticsearch进行排序?

elasticsearch - 使用应该的 Elasticsearch 查询不起作用

java - 为elasticsearch索引实现LSA