1. 程式人生 > >Elasticsearch的資料匯入匯出

Elasticsearch的資料匯入匯出

場景:

將一臺elasticsearch伺服器(A)上的索引匯出,然後在再另一臺elasticsearch伺服器上(B)中匯入;也適用於單機的備份與還原操作。

準備工作:

1、服務兩臺:linux(本人使用centos6.5) --  A和B(資料A->B)

2、操作電腦window一臺    --  W

 3、在A、Bl兩臺伺服器上分別安裝好elasticsearch(本人使用的2.3.3)與head外掛;具體如何安裝這裡不過多介紹,百度教程很多。

流程開始:

1、在A伺服器上建立一個數據倉庫:在elasticsearch.yml中新增:path.repo: ["/elasticsearch/back_up"](倉庫路徑自定義)配置;

2、假設我將要建立的倉庫路徑為:/elasticsearch/back_up,然後建立此路徑資料夾,賦予檔案寫入許可權(一定要有);

3、執行下面命令建立一個倉庫:

curl -XPUT 'http://localhost:9200/_snapshot/test(倉庫名稱)' -d '{
    "type": "fs",      //是使用共享的檔案系統去儲存快照
    "settings": {
        "location": "/elasticsearch/back_up",
        "compress": true
    }
}'

建立倉庫成功後(執行建立命令後返回true),執行  curl -XGET 'http://localhost:9200/_snapshot/_all' 檢視所有倉庫資訊;若要檢視指定倉庫執行 curl -XGET 'http://localhost:9200/_snapshot/test'  (test為我測試倉庫名稱,可根據自己命名情況)。

4、建立一個快照執行如下命令:

curl -XPUT "localhost:9200/_snapshot/test/snapshot_1" -d '{
    "indices": "index_1,index_2",      //索引名稱,多個用逗號隔開
    "ignore_unavailable": "true",       //忽略不存在的索引(不設定會快照請求會失敗)
    "include_global_state": false,      //防止叢集的全域性狀態被作為快照的一部分儲存起來
    "partial": "false"                           //預設情況下,如果快照紅的1個或多個索引不是全部分片都可用會導致整個請求過程失敗,將其設定為  true 可以改變此行為

還可以使用 curl -XPUT "localhost:9200/_snapshot/test/snapshot_1?wait_for_completion=true"  命令建立es全部索引快照;

執行 curl -XGET "localhost:9200/_snapshot/test/_all" 列出倉庫所有快照資訊;將 _all 換成指定快照名稱列出指定快照資訊

5、到此為止A伺服器上的索引已經備份好(若索引很大需要較長時間耐心等待即可),可進入/elasticsearch/back_up(根據自己定義的倉庫路徑)檢視檔案

如下圖(我建立的是一個名為 sdk_android 的快照,此為我實際專案命名,若為上文快照名此檔名應為 snapshot_1):

6、在B伺服器上也建立一個倉庫步驟回看 1->2->3 ;建立完成後將A伺服器上的快照檔案拷貝到B伺服器的倉庫資料夾下(A->B);此過程若是索引很大需要較長時間(我當時索引檔案15G拷貝了整整1天!伺服器下載上傳速度也比較有限);

7、執行以下命令還原快照:

curl -XPOST "localhost:9200/_snapshot/test/snapshot_1/_restore" -d '{
    "indices": "index_1,index_2",     //根據自己快照情況指定要還原的索引
    "ignore_unavailable": "true",
    "include_global_state": false,
    "rename_pattern": "index_(.+)",
    "rename_replacement": "restored_index_$1"
}'

也可通過執行 curl -XPOST "localhost:9200/_snapshot/test/snapshot_1/_restore"  命令全部還原;

8、若索引檔案較大,還原需要一定時間,可執行 curl -XGET "localhost:9200/_snapshot/test/snapshot_1" 檢視還原進度

9、刪除快照執行如下命令: 

curl -XDELETE "localhost:9200/_snapshot/test/snapshot_1"

10、若是單機備份還原,可直接執行還原命令。

以上便是我檢視N各文件整理的一個可用的es資料備份與還原的操作,我當時也是被搞的一個頭兩個大,用慣了mysql,以為備份還原直接滑鼠匯出匯入即可。所幸最後還是有找到辦法解決,再次感謝百度給想學習的人一個強大的搜尋機制。最後也希望同為es資料備份還原苦惱的小夥伴們多一份參考!