滚动节点重新启动Elasticsearch集群中的所有节点

时间:2018-02-13 19:54:06

标签: elasticsearch patch

我们需要重新启动elasticsearch集群中的所有节点,因为它们需要进行修补。我们需要零停机时间,因此不能将所有数据节点停在一起(我们在20个数据节点上有1个主要节点和1个副本,150个索引,使用ES 2.4.4有3个主节点。)

标准方法建议单独重新启动每个节点,等待它恢复并平衡,然后重复所有节点的进程: https://www.elastic.co/guide/en/elasticsearch/guide/2.x/_rolling_restarts.html

这将花费太长时间,因为我们每个节点有大约80个分片,并且需要一段时间才能重新分配它们。是否有任何工具可以识别我们如何同时重启多个数据节点(即识别主要和次要分片不在该子集中的节点组)?

或者还有其他方法可以达到同样的效果吗?

1 个答案:

答案 0 :(得分:1)

tldr;由于每个分片只有一个副本,因此很可能不能使多个节点关闭而不会变为红色(至少有一个索引)。

这是组合学中的练习。当您关闭一个节点时,您需要其余节点来服务该节点托管的80个分片。

假设您想要关闭19个实时节点中的另一个,并且仍然没有为任何索引转到红色状态。仅当该节点不承载这80个分片中的任何一个时,才可能这样做。让我们计算一下这个概率。

Probability that a live node doesn't have one of those 80 shards = (18/19)
Probability that a live node has none of the 80 shards = (18/19)^80 = 0.013 = 1.3%

因此,如果你关闭另一个节点,你进入红色的概率(至少一个指数)是98.7%。

如果您将所有19个实时节点聚合在一起,那么您只有1.3%* 19 = 25%的机会找到另一个节点才能取下并仍然没有变为红色。 (虽然由于独立性假设,我对这最后的陈述并不完全确定,但我相信它传达了这个想法。)