elasticsearch之gateway模組
gateway模組用於儲存es叢集的元資料資訊。這部分資訊主要包括所有的索引連同索引設定和顯式的mapping資訊。叢集元資料的每一次改變(比如增加刪除索引等),這些資訊都要通過gateway模組進行持久化。當叢集第一次啟動的時候,這些資訊就會從gateway模組中讀出並應用。
設定在node級別上的gateway會自動控制索引所用的gateway。比如設定了local gataway,則每一個在這個node上建立的index都會應用他們在索引級別的local gateway。如果索引不需要持久化狀態,需要顯式的設定為none(這也是唯一可以設定的值)。預設的gateway設定是local gateway。
1:recovery after nodes/time
在一些場景下,叢集的元資料資訊只有在叢集中一些節點啟動之後或者一段時間間隔之後才能夠恢復。這在叢集重啟的時候非常有用,而且可以充分利用節點的本地儲存來從gateway模組中恢復資料(這將會大大縮短叢集的恢復時間)。下邊給出一些配額項的說明:
gateway.recovery_after_nodes:叢集啟動恢復程序需要多少個節點啟動(包括master 和 data)
gateway.recovery_after_data_nodes:叢集啟動恢復程序需要多少個數據節點啟動
gateway.recovery_after_master_nodes:叢集啟動恢復程序需要多少個master節點啟動
gateway.recovery_after_time:在recovery_after_*_nodes個節點啟動後,需要等到多長時間,再啟動叢集恢復程序。
gateway.expected_nodes:期望多少個節點(包括master和data)進入集群后,啟動恢復。一旦滿足,gateway.recovery_after_time引數將忽略。
gateway.expected_data_nodes:期望多少個數據節點進入集群后,啟動恢復。
gateway.expected_master_nodes:期望多少個master節點進入集群后,啟動恢復。
給出一個配置例子:
gateway: recover_after_time上述配置表明:叢集啟動後5分鐘啟動恢復,但是一旦節點數目達到2,立刻啟動回覆。:5m expected_nodes:2
注意:一旦元資料已經從gateway模組中恢復,這些配置將不再有效,直至下次叢集全部重啟。
在恢復元資料過程中,所有操作都將堵塞,為了避免和叢集真實的元資料產生衝突。
2:local gateway
local gateway從每個節點的本地儲存中恢復叢集狀態和索引,不需要節點之間的共享儲存。跟共享型別的gateway不同,local gateway的持久化是同步的,一旦一個操作執行了,資料就馬上會持久化,供叢集恢復使用。
配置gateway.recovery_after_nodes使其在絕大多數節點啟動後再進行恢復是非常重要的。這將會確保恢復到最近的叢集狀態。,例如
gateway: recover_after_nodes:3 expected_nodes:5
2.1 dangling indices
當叢集中加入新節點的時候,新節點/data目錄下的資料如果在叢集中不存在,預設會直接匯入叢集,這個功能有兩個主要用途
第一:如果一個新的maste節點啟動,並位感知到其他舊節點儲存的索引資訊,這時候新增舊節點會匯入索引資料,避免資料被刪除。
第二:一箇舊的索引可以直接copy它的data目錄到一臺新機器,然後將新機器加入叢集,這時候資料就會匯入叢集,帶replica滿足要求後(舊索引會自動copy到其他節點上),就可以把機器移除了。
這個功能可以通過gateway.local_auto_import_dangled設定:
yes:將索引匯入叢集(default)
close:將索引匯入叢集,但是close狀態
no:gateway.local_dangling_timeout時間後刪除索引,預設2小時。