【问题标题】:Elasticsearch cluster leaving shards unassignedElasticsearch 集群未分配分片
【发布时间】:2014-10-02 23:16:03
【问题描述】:

我们正在运行一个 elasticsearch 集群来记录日志,并使用 logstash 从多个位置索引日志。我们最近添加了两个额外的节点以增加容量,同时我们等待进一步的硬件来扩展集群。最终,我们的目标是在 SSD 上运行 2 个用于“实时”数据的节点,以提供对最新数据的快速访问,并将数据老化到 HDD 以获取较旧的索引。我们放入的新节点的内存比现有的盒子少很多(700GB vs 5TB),但考虑到这与我们实施 SSD 时的情况相似,我没有预见到这会成为一个大问题.

作为第一次尝试,我将节点放入集群中,相信新的基于磁盘空间的分配规则意味着它们不会立即被填满。不幸的是,情况并非如此,我醒来发现集群已经愉快地将分片重新分配到新节点上,超过 99%。经过一些设置后,我设法从这些节点中删除了所有数据,并将集群恢复到之前的状态(所有分片已分配,集群状态为绿色)。

作为下一个方法,我尝试实施类似于我在实施 SSD 时的计划的索引/节点标记。这给我们留下了以下配置:

  • 节点 1 - 5TB,标签:实时、存档
  • 节点 2 - 5TB,标签:实时、存档
  • 节点 3 - 5TB,标签:实时、存档
  • 节点 4 - 700GB,标签:实时
  • 节点 5 - 700GB,标签:实时

(所有运行 elasticsearch 1.3.1 和 oracle java 7 u55 的节点)

然后,我使用 curator 将 10 天以前的索引标记为“存档”,将最近的索引标记为“实时”。这在后台设置索引分片分配“要求”。我的理解是它需要节点有标签,但不仅仅是那个标签。

不幸的是,这似乎没有达到预期的效果。最令人担忧的是,没有标记为存档的索引正在分配它们的副本分片,留下 295 个未分配的分片。此外,实时标记的索引仅使用节点 4、5 和奇怪的 3。节点 3 没有分片,除了最新的索引和一些 kibana-int 分片。

如果我删除标签并使用 exclude._ip 将分片从新节点中拉出,我可以(慢慢地)将集群恢复为绿色,因为这是我在新节点完全填满时采用的方法,但我真的很想把这个设置整理好,这样我就有信心当新套件到货时 SSD 配置可以正常工作。

我尝试启用:cluster.routing.allocation.allow_rebalance 始终,理论上集群由于未分配的副本而没有重新平衡。 我也试过:cluster.routing.allocation.enable to all,但同样没有明显的影响。

我是否做了明显错误的事情?或者是否有某种我可以使用的诊断方法?我一直在使用 Elasticsearch Head 插件可视化分片的分配。

任何帮助将不胜感激,希望这只是一个我可以轻松解决的愚蠢错误!

提前致谢

【问题讨论】:

    标签: elasticsearch elasticsearch-curator


    【解决方案1】:

    这可能无法完全回答您的问题,但是当我今天早上查看这些文档时:

    http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules-allocation.html#disk 您应该能够在您的版本中为磁盘使用设置水印,以避免再次发生这种情况。

    对于集群的(手动)监控我很喜欢 https://github.com/lmenezes/elasticsearch-kopf

    目前正在看着我的集群在遇到类似问题后再次整理分片(太慢了),但我仍在运行一个古老的版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多