前文我們已經提到過 Elasticsearch 可以應對節點故障。讓我們來嘗試一下。如果我們吧第一個節點殺掉,我們的集群就會如下圖所示:
殺掉一個節點后的集群
被殺掉的節點是主節點。而為了集群的正常工作必須需要一個主節點,所以首先進行的進程就是從各節點中選擇了一個新的主節點:Node 2。
主分片 1 和 2 在我們殺掉 Node 1 后就丟失了,我們的索引在丟失主節點的時候是不能正常工作的。如果我們在這個時候檢查集群健康狀態,將會顯示 red:存在不可用的主節點!
幸運的是,丟失的兩個主分片的完整拷貝在存在于其他的節點上,所以新的主節點所完成的第一件事情就是將這些在 Node 2 和 Node 3 上的從分片提升為主分片,然后集群的健康狀態就變回至 yellow。這個提升的進程是瞬間完成了,就好像按了一下開關。
那么為什么集群健康狀態依然是是 yellow 而不是 green 呢?是因為現在我們有3個主分片,但是我們之前設定了1個主分片有2個從分片,但是現在卻只有1份從分片,所以狀態無法變為 green,不過我們可以不用太擔心這里:當我們再次殺掉 Node 2 的時候,我們的程序依舊可以在沒有丟失任何數據的情況下運行,因為 Node 3 中依舊擁有每個分片的備份。
如果我們重啟 Node 1,集群就能夠重新分配丟失的從分片,這樣結果就會與三節點兩從集群一致。如果 Node 1 依舊還有舊節點的內容,系統會嘗試重新利用他們,并只會復制在故障期間的變更數據。
到目前為止,我們已經清晰地了解了 Elas