【问题标题】:Add node to running cluster elasticsearch causes master not discovered exception将节点添加到运行集群 elasticsearch 导致 master not found 异常
【发布时间】:2020-06-29 09:18:22
【问题描述】:

问题

我有一个正在运行的集群,我想在其中添加一个数据节点。正在运行的集群是

x.x.x.246

数据节点是

x.x.x.99

每个服务器可以通过 ping 看到对方。 机器操作系统:CentOS7 弹性搜索:7.61

配置:

这里是 x.x.x.246 的 elasticsearch.yml:

cluster.name: elasticsearch
node.master: true
node.name: Node_master
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: x.x.x.246
http.port: 9200
discovery.seed_hosts: ["x.x.x.99:9300"]
cluster.initial_master_nodes: ["x.x.x.246:9300"]

这里是 x.x.x.99 的 elasticsearch.yml

cluster.name: elasticsearch
node.name: Node_master
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: x.x.x.99
http.port: 9200
discovery.seed_hosts: ["x.x.x.245:9300"]
cluster.initial_master_nodes: ["x.x.x.246:9300"]

在机器上测试运行 elasticsearch

当我在每台机器上运行systemctl start elasticsearch 时,它运行良好。

在 x.x.x.246 上测试运行

curl -X GET "X.X.X.246:9200/_cluster/health?pretty"

显示:节点编号不变

curl -X GET "X.X.X.99:9200/_cluster/health?pretty

显示:

{
  "error" : {
    "root_cause" : [
      {
        "type" : "master_not_discovered_exception",
        "reason" : null
      }
    ],
    "type" : "master_not_discovered_exception",
    "reason" : null
  },
  "status" : 503
}

已编辑

这里是 x.x.x.246 的 elasticsearch.yml:

cluster.name: elasticsearch
node.name: master
node.master: true
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["x.x.x.99","x.x.x.246]
cluster.initial_master_nodes: ["x.x.x.246"]
logger.org.elasticsearch.discovery: TRACE

这里是 x.x.x.99 的 elasticsearch.yml

cluster.name: elasticsearch
node.name: node
node.data: true
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["x.x.x.246","x.x.x.99"]
cluster.initial_master_nodes: ["x.x.x.246"]
logger.org.elasticsearch.discovery: TRACE

登录 x.x.x.99:

[root@dev ~]# tail -30 /var/log/elasticsearch/elasticsearch.log
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:692) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.6.1.jar:7.6.1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
        at java.lang.Thread.run(Thread.java:830) ~[?:?]
[2020-03-19T12:12:04,462][INFO ][o.e.c.c.JoinHelper       ] [node-1] failed to join {master}{0UHYehfNQ2-WCadTC_VVkA}{1FNy5AJrTpKOCAejBLKR2w}{10.64.2.246}{10.64.2.246:9300}{dilm}{ml.machine_memory=1907810304, ml.max_open_jobs=20, xpack.installed=true} with JoinRequest{sourceNode={node-1}{jb_3lJq1R5-BZtxlPs_NyQ}{a4TYDhG7SWqL3CSG4tusEg}{10.64.2.99}{10.64.2.99:9300}{d}{xpack.installed=true}, optionalJoin=Optional[Join{term=178, lastAcceptedTerm=8, lastAcceptedVersion=100, sourceNode={node-1}{jb_3lJq1R5-BZtxlPs_NyQ}{a4TYDhG7SWqL3CSG4tusEg}{10.64.2.99}{10.64.2.99:9300}{d}{xpack.installed=true}, targetNode={master}{0UHYehfNQ2-WCadTC_VVkA}{1FNy5AJrTpKOCAejBLKR2w}{10.64.2.246}{10.64.2.246:9300}{dilm}{ml.machine_memory=1907810304, ml.max_open_jobs=20, xpack.installed=true}}]}
org.elasticsearch.transport.RemoteTransportException: [master][10.64.2.246:9300][internal:cluster/coordination/join]
Caused by: java.lang.IllegalStateException: failure when sending a validation request to node
        at org.elasticsearch.cluster.coordination.Coordinator$2.onFailure(Coordinator.java:514) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.action.ActionListenerResponseHandler.handleException(ActionListenerResponseHandler.java:59) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleException(TransportService.java:1118) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.transport.TransportService$ContextRestoreResponseHandler.handleException(TransportService.java:1118) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.transport.InboundHandler.lambda$handleException$2(InboundHandler.java:244) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:633) ~[elasticsearch-7.6.1.jar:7.6.1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
        at java.lang.Thread.run(Thread.java:830) [?:?]
Caused by: org.elasticsearch.transport.RemoteTransportException: [node-1][10.64.2.99:9300][internal:cluster/coordination/join/validate]
Caused by: org.elasticsearch.cluster.coordination.CoordinationStateRejectedException: join validation on cluster state with a different cluster uuid P4QlwvuRRGSmlT77RroSjA than local cluster uuid oUoIe2-bSbS2UPg722ud9Q, rejecting
        at org.elasticsearch.cluster.coordination.JoinHelper.lambda$new$4(JoinHelper.java:148) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.xpack.security.transport.SecurityServerTransportInterceptor$ProfileSecuredRequestHandler$1.doRun(SecurityServerTransportInterceptor.java:257) ~[?:?]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.xpack.security.transport.SecurityServerTransportInterceptor$ProfileSecuredRequestHandler.messageReceived(SecurityServerTransportInterceptor.java:315) ~[?:?]
        at org.elasticsearch.transport.RequestHandlerRegistry.processMessageReceived(RequestHandlerRegistry.java:63) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.transport.InboundHandler$RequestHandler.doRun(InboundHandler.java:264) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:692) ~[elasticsearch-7.6.1.jar:7.6.1]
        at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:37) ~[elasticsearch-7.6.1.jar:7.6.1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
        at java.lang.Thread.run(Thread.java:830) ~[?:?]

【问题讨论】:

    标签: elasticsearch cluster-computing node-modules


    【解决方案1】:

    对于节点x.x.x.99,种子主机的条目错误。应该是这样的:

    discovery.seed_hosts: ["x.x.x.246:9300"]
    

    discovery.seed_hosts 列表用于检测主节点,因为该列表包含节点的地址,这些节点是主节点,并且还保存了当前主节点的信息,因为它指向x.x.x.245x.x.x.99的配置中的x.x.x.246,节点x.x.x.99无法检测到master。

    在评论中发表讨论正确的配置应该是:

    主节点:

    cluster.name: elasticsearch
    node.name: master
    node.master: true
    node.data: true
    path.data: /var/lib/elasticsearch
    path.logs: /var/log/elasticsearch
    network.host: 0.0.0.0
    http.port: 9200
    discovery.seed_hosts: ["x.x.x.246]
    cluster.initial_master_nodes: ["master"]
    

    请注意,如果您希望上述节点仅作为主节点而不保存数据,请设置

    node.data: false
    

    数据节点:

    cluster.name: elasticsearch
    node.name: data-node-1
    node.data: true
    node.master: false
    path.data: /var/lib/elasticsearch
    path.logs: /var/log/elasticsearch
    network.host: 0.0.0.0
    http.port: 9200
    discovery.seed_hosts: ["x.x.x.246"]
    

    此外,由于节点 x.x.x.99 无法加入集群,因此它的集群状态已过时。所以删除x.x.x.99上的data文件夹并重启这个节点。

    【讨论】:

    • 您好,谢谢您的回复,但这是我的错字,在 yml 文件中写为 246
    • @yuliansen 节点 x.x.x.99 是一个新节点,您希望它是仅数据节点吗?
    • 需要更多说明:1) x.x.x.246 是已经运行的集群的一部分? 2) x.x.x.99 不会是主节点?
    • 很高兴它成功了。也请接受答案:)
    【解决方案2】:

    它无法选择主节点的原因是提到了discovery.seed_hosts: ["x.x.x.245:9300"],它不是当前主节点配置的一部分,也不是主节点配置的一部分。正如this 官方 ES 文档中所述,它用于选举主节点。

    您应该详细阅读与主选择相关的 2 个重要配置:

    discovery.seed_hosts

    initial_master_nodes

    您可以在Discovery 模块上打开调试日志以更好地理解它,方法是在elasticsearch.yml 的行下方添加

    logger.org.elasticsearch.discovery: DEBUG
    

    您可以在elasticsearch.yml 中进行一些修改。

    1. node.name 在两个节点 elasticsearch.yml 中具有相同的名称。
    2. 最好只提ip不带端口9200
    3. 最好给network.host: 0.0.0.0 值,而不是elasticsearch.yml 中的节点ip。
    4. node.data: true 是默认的,所以不用提了。

    更好更简洁的版本如下所示:

    主节点 elasticsearch.yml

    cluster.name: elasticsearch
    node.name: master
    path.data: /var/lib/elasticsearch
    path.logs: /var/log/elasticsearch
    network.host: 0.0.0.0
    discovery.seed_hosts: ["x.x.x.99", "x.x.x.246"] -->note this
    cluster.initial_master_nodes: ["x.x.x.246"] :- note this
    

    另一个数据节点elasticsearch.yml

    cluster.name: elasticsearch
    node.name: data
    path.data: /var/lib/elasticsearch
    path.logs: /var/log/elasticsearch
    network.host: 0.0.0.0
    http.port: 9200
    discovery.seed_hosts: ["x.x.x.99", "x.x.x.246"] --> you need to change this and include both nodes
    cluster.initial_master_nodes: ["x.x.x.246"]
    

    验证主节点

    您可以点击<your-any-node-ip>:9200/_cat/master,这将返回选定的主节点,在您的案例中,该节点的名称为master。有关this 的更多信息。

    【讨论】:

    • 您好,谢谢您的回复,我已经更新了我的 yml 文件,但没有任何变化,x.x.x.99 仍然有 master_not_discover_exception。错误日志将在主线程上更新。请帮我检查一下并给我更多的见解。非常感谢。
    • @yuliansen,您是否尝试同时启动masterdata 节点?您可以在数据节点elasticsearch.yml 中标记node.master: false 并仅重新启动数据节点
    • @yuliansen,你有没有机会看看我的建议
    • 嗨,我尝试启动 x.x.x.246 node.master:false,当我运行它时,它也返回 master_not_discovered_exception。我已经运行了它们,它们都显示了相同的异常。
    • @yuliansen,你提到`x.x.x.246`是你的主节点,你需要恢复它并在你的数据节点配置中添加node.master: false并重新启动第一个主节点,然后重新启动数据节点
    【解决方案3】:

    我也遇到了同样的问题,当我尝试从 AWS Windows 服务器外部访问弹性搜索时,我无法访问它,之后我添加了

    network.host : aws_private_ip
    

    然后我们需要重新启动弹性服务,但它在重新启动时抛出错误,最后在下面添加时,它对我有用,

    cluster.initial_master_nodes: node-1
    

    【讨论】:

    • Stack Overflow 上的帖子不应在问题或答案中包含“签名”。每个帖子下方都有一张用户卡,用于签名。如果访问者想了解更多关于您的信息,他们可以将鼠标悬停在您的用户卡上并查看您的个人资料文本的第一部分,或者单击进入您的个人资料页面并查看更多信息,包括您所写的任何内容在您的个人资料“关于我”部分。如果您确实在帖子中包含了一个额外的签名,许多人倾向于对这些签名做出反应,就好像它们是垃圾邮件一样(即消极)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2021-07-30
    相关资源
    最近更新 更多