Elasticsearch推遲分片分配
參看網址:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_delaying_shard_allocation.html
適用情況:對於一些網路不穩定的情況比較適用(可能臨時有節點脫離叢集,然後又回來。時間很短)。這種情況,推遲分片分配可以很大程度上降低網路和磁碟的負載。如果節點在超時之前回到叢集,至少可以減少1次的叢集再平衡,如果回到叢集的節點上的分片沒有資料更新(其他機器的主分片上),這個過程將會更快,對磁碟和網路的壓力更小。
##使用方法:
通過引數 delayed_timeout ,等待時間可以全域性設定也可以在索引級別進行修改:預設延時1分鐘
PUT /_all/_settings
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "5m"
}
}
##解釋
通過使用 _all 索引名,我們可以為叢集裡面的所有的索引使用這個引數,預設時間被修改成了 5 分鐘。
這個配置是動態的,可以在執行時進行修改。如果你希望分片立即分配而不想等待,你可以設定引數: delayed_timeout: 0.
注意:延遲分配不會阻止副本被提拔為主分片。叢集還是會進行必要的提拔來讓叢集回到 yellow 狀態。缺失副本的重建是唯一被延遲的過程。
自動取消分片遷移:
如果節點在超時之後再回來,且叢集還沒有完成分片的移動,會發生什麼事情呢?在這種情形下, Elasticsearch 會檢查該機器磁碟上的分片資料和當前叢集中的活躍主分片的資料是不是一樣 — 如果兩者匹配, 說明沒有進來新的文件,包括刪除和修改 — 那麼 master 將會取消正在進行的再平衡並恢復該機器磁碟上的資料。之所以這樣做是因為本地磁碟的恢復永遠要比網路間傳輸要快,並且我們保證了他們的分片資料是一樣的,這個過程可以說是雙贏。如果分片已經產生了分歧(比如:節點離線之後又索引了新的文件),那麼恢復程序會繼續按照正常流程進行。重新加入的節點會刪除本地的、過時的資料,然後重新獲取一份新的。