1. 程式人生 > >elasticsearch(es) 集群恢復觸發配置(Local Gateway參數)

elasticsearch(es) 集群恢復觸發配置(Local Gateway參數)

ram 這份 驅動程序 數據節點 數據恢復 reference time 影響 相互

elasticsearch(es) 集群恢復觸發配置(Local Gateway)

當你集群重啟時,幾個配置項影響你的分片恢復的表現。 首先,我們需要明白如果什麽也沒配置將會發生什麽。

想象一下假設你有 10 個節點,每個節點只保存一個分片,這個分片是一個主分片或者是一個副本分片,或者說有一個有 5 個主分片/1 個副本分片的索引。有時你需要為整個集群做離線維護(比如,為了安裝一個新的驅動程序), 當你重啟你的集群,恰巧出現了 5 個節點已經啟動,還有 5 個還沒啟動的場景。

假設其它 5 個節點出問題,或者他們根本沒有收到立即重啟的命令。不管什麽原因,你有 5 個節點在線上,這五個節點會相互通信,選出一個 master,從而形成一個集群。 他們註意到數據不再均勻分布,因為有 5 個節點在集群中丟失了,所以他們之間會立即啟動分片復制。

最後,你的其它 5 個節點打開加入了集群。這些節點會發現 它們 的數據正在被復制到其他節點,所以他們刪除本地數據(因為這份數據要麽是多余的,要麽是過時的)。 然後整個集群重新進行平衡,因為集群的大小已經從 5 變成了 10。

在整個過程中,你的節點會消耗磁盤和網絡帶寬,來回移動數據,因為沒有更好的辦法。對於有 TB 數據的大集群, 這種無用的數據傳輸需要 很長時間 。如果等待所有的節點重啟好了,整個集群再上線,所有的本地的數據都不需要移動。

本地網關

本地網關模塊在整個集群重新啟動時存儲集群狀態和分片數據。

以下參數是配置 嘗試恢復集群狀態和集群數據 的觸發點,必須在每個主節點上都做做如下配置。

  • gateway.expected_nodes
    預期在集群中的(數據或主)節點數。只要預期的節點數已加入集群,就會啟動本地分片的恢復。默認為0

  • gateway.expected_master_nodes
    預期在集群中的主節點數。一旦預期的主節點數加入集群,就會開始恢復本地分片。默認為0

  • gateway.expected_data_nodes
    預期在集群中的數據節點數。一旦預期數量的節點已加入集群,就會啟動本地分片的恢復。默認為0

  • gateway.recover_after_time
    如果未達到預期的節點數,則恢復過程將等待配置的時間量,然後再嘗試恢復。如果只要配置了expected_nodes,則默認這個參數值為5m

一旦recover_after_time持續時間超時,只要滿足以下條件,恢復就會開始:

  • gateway.recover_after_nodes
    只要此許多數據或主節點已加入集群,即可恢復。

  • gateway.recover_after_master_nodes
    只要這麽多主節點已加入集群,就可以恢復。

  • gateway.recover_after_data_nodes
    只要這麽多數據節點已加入集群,就可以恢復。

上述描述來自官方文檔Local Gateway的描述,看完之後有點繞,還是不能完全理解。

stack overflow 上的解釋

stack overflow 上的描述相對好理解很多:Difference between expected_nodes and recover_after_nodes parameters。這裏做一下搬運工,給出結論。
滿足 gateway.recover_* 條件之後會觸發記時器,有兩種情況

  1. recovery_after_time 為用完,滿足 gateway.excepted_* 條件則立即執行數據同步
  2. recovery_after_time 時間用完,那麽也會開始執行數據同步

舉個栗子

gateway:
    recover_after_nodes: 3
    expected_nodes: 5

雖然上面沒有配置 recovery_after_time 屬性,但是因為配置了 expected_nodes 所以會有默認值 5m,就是5分鐘。
假設集群中有5個node,其中3個node已經恢復正常使用,也就是達到了 recover_after_nodes: 3 的條件。那麽如果5分鐘之內一共有5個node恢復正常使用,那麽會立即進行集群的數據恢復,要不然就是過了5分鐘node數量打不到5個,也會觸發數據恢復。
歡迎轉載,但請註明本文鏈接,謝謝你。
2018.7.7 17:31

elasticsearch(es) 集群恢復觸發配置(Local Gateway參數)