2017-07-19 91 views
0

我想將我的ES實例從一臺服務器遷移到另一臺服務器(以及所有數據)。Elasticsearch從未完成索引

因此,在the snapshot/restore api之後,我創建了舊服務器上的數據快照,scp將其添加到新服務器,在新服務器上啓動ES實例,恢復快照並重新啓動ES上的ES新的服務器。

問題是ES從未完成索引。 red指數的數量在處理大約10個指數(我有大約300多個指數)後保持不變

注意,新ES實例在新服務器上的docker上運行,舊ES實例本地安裝在舊服務器。

+0

運行下面的命令時,你明白了什麼:'捲曲-XGET本地主機:9200/_cat /指數/ v'和'捲曲-XGET本地主機:9200/_cat/recovery /?v'和'curl -XGET localhost:9200/_cat/allocation /?v'? – Val

回答

0

這很愚蠢,但在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,因爲我喜歡的東西井然有序)。

事後看來,這種解決方案是非常明顯....