當您需要執行羣集的滾動重新啓動時,將使羣集保持聯機和運行狀態,但一次使一個節點脫機。
常見原因是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
後再繼續。此時,您可以安全地恢復索引(如果您之前已停止過),但在恢復索引之前等待羣集完全平衡將有助於加快進程。