当您需要执行群集的滚动重新启动时,将使群集保持联机和运行状态,但一次使一个节点脱机。
常见原因是Elasticsearch版本升级或服务器本身的某种维护(例如OS更新或硬件)。无论如何,都有一种特殊的方法来执行滚动重启。
从本质上讲,Elasticsearch希望您的数据能够完全复制并均衡。如果关闭单个节点进行维护,群集将立即识别丢失节点并开始重新平衡。如果您知道节点维护是短期的,这可能会令人恼火,因为非常大的分片的重新平衡可能需要一些时间。
我们想要做的是告诉Elasticsearch推迟重新平衡,因为我们对外部因素导致的集群状态有了更多的了解。程序如下:
-
如果可能,请停止索引新数据并执行同步刷新。这并非总是可行,但有助于加快恢复时间。同步刷新请求是“尽力而为”操作。如果有任何挂起的索引操作,它将失败,但如果需要,可以安全地多次重新发出请求。
POST / _flush / 同步
-
禁用分片分配。这可以防止Elasticsearch重新平衡丢失的分片,除非您另有说明。如果您知道维护窗口很短,这是一个好主意。您可以按如下方式禁用分配:
curl xput -d'{"transient":{"cluster.routing.allocation.enable":"none"}}'
-
停止需要重启的节点:curl xput http://ip:port/_cluster/node/_local/_shutdown
-
重新启动节点,并确认它加入群集。
-
对其余节点重复步骤3、4。
-
重新启用分片分配如下:
curl xput http://ip:9092/_cluster/shard/setting -d'{"transient":{"cluster.routing.allocation.enable":"all"}}'
碎片重新平衡可能需要一些时间。等到群集恢复到状态
green
后再继续。 -
此时,您可以安全地恢复索引(如果您之前已停止过),但在恢复索引之前等待群集完全平衡将有助于加快进程。
原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/191901.html