【问题标题】:No elasticsearch shard is assigned to newly added node没有为新添加的节点分配 elasticsearch 分片
【发布时间】:2016-11-12 11:23:54
【问题描述】:

在我的 ES 集群中,我有 10 个分片和 2 个副本和 5 个节点。我刚刚向集群添加了一个新节点,它与集群同步。状态为绿色,根据集群 API,我们现在在集群中有 6 个活动数据节点。但是当我检查 ''http://localhost:9200/_cat/shards' 时,没有为这个节点分配分片。因此,没有弹性查询指向这个新添加的节点。这个节点的日志文件没有什么特别的:

[2016-11-12 14:39:21,114][INFO ][node                     ] [xxx] initializing ...
[2016-11-12 14:39:22,801][INFO ][plugins                  ] [xxx] modules [reindex, lang-expression, lang-groovy], plugins [], sites []
[2016-11-12 14:39:22,843][INFO ][env                      ] [Chak] using [1] data paths, mounts [[/ (/dev/sda1)]], net usable_space [531gb], net total_space [879.9gb], spins? [no], types [ext4]
[2016-11-12 14:39:22,843][INFO ][env                      ] [xxx] heap size [989.8mb], compressed ordinary object pointers [true]
[2016-11-12 14:39:22,844][WARN ][env                      ] [xxx] max file descriptors [65535] for elasticsearch process likely too low, consider increasing to at least [65536]
[2016-11-12 14:39:31,375][INFO ][node                     ] [xxx] initialized
[2016-11-12 14:39:31,377][INFO ][node                     ] [xxx] starting ...
[2016-11-12 14:39:32,616][INFO ][transport                ] [xxx] publish_address {192.168.200.8:9300}, bound_addresses {192.168.200.8:9300}
[2016-11-12 14:39:32,637][INFO ][discovery                ] [xxx] divar_elastic/GwfnlWtzTDGv42bZA2PcMA
[2016-11-12 14:39:36,042][INFO ][cluster.service          ] [xxx] detected_master {xxx}{907DRgSbTv2T-dcDOwPfSw}{192.168.200.7}{192.168.200.7:9302}, added {{xxx}{TAgbh6SmShKCPEPBtUXyXw}{192.168.200.3}{192.168.200.3:9300},{xxx}{907DRgSbTv2T-dcDOwPfSw}{192.168.200.7}{192.168.200.7:9302},{xxx}{C_b3gDlpTfu1zt0RdDlckw}{192.168.200.13}{192.168.200.13:9300},{xxx}{lYOnZzFPTiuJr7JoMNfK5g}{192.168.200.4}{192.168.200.4:9300},{xxx}{BSzFHsAMRyq8cqMh22GSKg}{192.168.200.11}{192.168.200.11:9300},}, reason: zen-disco-receive(from master [{Nar}{907DRgSbTv2T-dcDOwPfSw}{192.168.200.7}{192.168.200.7:9302}])
[2016-11-12 14:39:36,143][INFO ][cluster.routing.allocation.decider] [Foo] updating [cluster.routing.allocation.disk.watermark.low] to [93%]
[2016-11-12 14:39:36,143][INFO ][cluster.routing.allocation.decider] [Foo] updating [cluster.routing.allocation.disk.watermark.high] to [97%]
[2016-11-12 14:39:37,661][INFO ][http                     ] [xxx] publish_address {192.168.200.8:9200}, bound_addresses {192.168.200.8:9200}
[2016-11-12 14:39:37,664][INFO ][node                     ] [xxx] started

对于如何解决这个问题有什么特别的意见吗?

【问题讨论】:

标签: elasticsearch


【解决方案1】:

可能有几个可能的原因。

  1. 当一个节点离开集群或加入主节点时,会暂时延迟分片重新分配,以避免在重新平衡分片上不必要地浪费资源。 检查您的延迟超时。

    curl -XPUT 'localhost:9200/<INDEX_NAME>/_settings' -d ' { "settings": { "index.unassigned.node_left.delayed_timeout": "30s" } }

  2. 您需要检查分片分配是否设置为 false。再次启用分片重新分配。

    curl -XPUT 'localhost:9200/_cluster/settings' -d '{ "transient": { "cluster.routing.allocation.enable" : "all" } }'

如果以上一切都很好,那么您需要检查主日志以了解为什么它没有向节点提供任何数据。在最坏的情况下,您可能需要重新启动集群,您可以一次滚动停止启动一个节点。

【讨论】:

    【解决方案2】:

    在您添加新节点时,Elasticsearch 不会触发数据重新平衡。事实上,您真的不希望它这样做,因为当它需要专注于索引文档和回答查询时,这可能会使您的网络饱和并给集群带来压力。

    您可以通过 _cluster/reroute API (https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-reroute.html) 手动将分片移动到新节点

    另一种选择(也是我倾向于使用的一种)是您可以将瞬态设置应用于基于磁盘的水印(例如https://www.elastic.co/guide/en/elasticsearch/reference/current/disk-allocator.html)。如果您查看/_cat/allocation?v 并注意到您的旧节点的磁盘利用率为(例如)60%,您可以将高水位线设置降低到 55% 左右,以便旧节点开始将数据发送到新节点没有消耗的磁盘空间。如果这样做,请确保在 ES 移动数据后重置瞬态设置。

    【讨论】:

      猜你喜欢
      • 2020-10-27
      • 2015-06-03
      • 2017-02-09
      • 2016-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      相关资源
      最近更新 更多