我想將我的ES實例從一臺服務器遷移到另一臺服務器(以及所有數據)。Elasticsearch從未完成索引
因此,在the snapshot/restore api之後,我創建了舊服務器上的數據快照,scp
將其添加到新服務器,在新服務器上啓動ES實例,恢復快照並重新啓動ES上的ES新的服務器。
問題是ES從未完成索引。 red
指數的數量在處理大約10個指數(我有大約300多個指數)後保持不變
注意,新ES實例在新服務器上的docker上運行,舊ES實例本地安裝在舊服務器。
我想將我的ES實例從一臺服務器遷移到另一臺服務器(以及所有數據)。Elasticsearch從未完成索引
因此,在the snapshot/restore api之後,我創建了舊服務器上的數據快照,scp
將其添加到新服務器,在新服務器上啓動ES實例,恢復快照並重新啓動ES上的ES新的服務器。
問題是ES從未完成索引。 red
指數的數量在處理大約10個指數(我有大約300多個指數)後保持不變
注意,新ES實例在新服務器上的docker上運行,舊ES實例本地安裝在舊服務器。
這很愚蠢,但在ES快照/恢復文檔中沒有記錄。
I called /_snapshot/my_backup/snapshot_1/_restore
to restore my snapshot在新服務器上後,所有的索引顯示爲yellow
狀態。所以我想我必須停止ES並重新啓動它來強制它重新索引。
那麼,事實並非如此。在實例上調用_restore
後,即使所有索引狀態都爲yellow
,它也會開始索引數據並且不會立即完成。因此,當我在調用_restore
後殺死了我的ES實例時,實際上只恢復了幾個索引(即當我調用_restore
和我殺死它時,ES有時間處理這些索引)。當ES開始備份時,它只能重新索引那些有時間處理的指數(而其餘的我假設已損壞)。
因此,解決辦法很簡單:刪除我所有的數據,啓動ES,調用快照_restore
端點,然後耐心等待ES完成應用恢復。
我能夠監控快照的進度使用此命令恢復:
curl -XGET 'localhost:9200/_cat/indices?v&pretty' | egrep "(k|m)b" | sort | wc -l
一旦這個數字命中0我好去(sort
,因爲我喜歡的東西井然有序)。
事後看來,這種解決方案是非常明顯....
運行下面的命令時,你明白了什麼:'捲曲-XGET本地主機:9200/_cat /指數/ v'和'捲曲-XGET本地主機:9200/_cat/recovery /?v'和'curl -XGET localhost:9200/_cat/allocation /?v'? – Val