1. 程式人生 > >Elasticsearch--索引備份與遷移

Elasticsearch--索引備份與遷移

Elasticsearch叢集備份,以及在不同叢集之間遷移資料
類似mongodb的mongodump功能,Elasticsearch也提供了備份叢集中索引資料的策略——snapshot API.它會備份整個叢集的當前狀態和資料,並儲存到叢集中各個節點共享的倉庫中。這個備份的程序是增量備份的,在第一次備份的基礎上進行的第二次備份只備份新變化的資料。官方文件

系統:ubuntu

備份ES資料的三個步驟:

  1. 叢集–多節點時需要掛載一個共享目錄建立一個共享目錄,這個共享目錄要求叢集中的所有節點都能感知到。如何建立共享倉目錄後面補充。
  2. 在每個節點的$ELASTICSEARCH_HOME/config/elasticsearch.yml中新增path.repo: /mnt/es_backup 配置,並重啟節點,其中/mnt/es_backup 目錄為每個節點的倉庫目錄,最好chmod 777 /mnt/es_backup,以保證elasticsearch有許可權寫入資料
  3. 為每個節點建立倉庫,倉庫位置為 /mnt/es_backup
  4. 新增索引快照(snapshot)
  5. 檢視備份狀態。

1.建立共享目錄:
何為共享倉庫,其實就是叢集中各個節點都能感知到並將資料寫入到該倉庫的檔案。一般一個節點部署在一個伺服器上,在哪裡,怎樣建立一個檔案讓各個節點都能往裡面寫資料呢?

使用sshfs在ES叢集中每個節點的相同位置掛載一個共享目錄。

// 在每個節點上安裝sshfs
 sudo apt-get install sshfs

// 選定一個節點的一個目錄作為共享目錄
mkdir /data/backup
chmod -R 777 /data
// 在每個節點的相同位置建立目錄,並掛載共享目錄
mkdir /mnt/backup chmod -R 777 /mnt sshfs $user@192.168.x.x:/data/backup /mnt/backup -o allow_other // 測試執行ES的使用者是否有對共享目錄的寫許可權 sudo -u elasticsearch touch /mnt/backup/test

其中引數-o allow_other 解決了不同節點往共享倉庫中寫資料的許可權問題。

2.修改elasticsearch.yml檔案,新增path.repo配置
在elasticsearch.yml中增加path.repo: /mnt/backup,配置共享倉庫的位置,重啟節點

3. 建立了共享目錄後就可以在這個共享目錄下為叢集建立共享倉庫

// 建立倉庫
PUT _snapshot/my_backup 
{
    "type": "fs", 
    "settings": {
        "location": "/mnt/backup",
        "compress": true
    }
}

4.備份索引資料。

// 針對具體的index建立快照備份,其中snapshot_name 是快照的名字。
PUT _snapshot/my_backup/snapshot_name
{
    "indices": "index_1, index_2"
}

// 5.檢視備份狀態
GET _snapshot/my_backup/snapshot_name/_status

6.在不同叢集之間遷移資料

 // 備份建立好之後,在共享目錄/root/backup裡是這樣的:
-rw-r--r-- 1 root root   31 1215 22:14 index
drwxr-xr-x 3 root root 4096 1215 22:14 indices
-rw-r--r-- 1 root root   83 1215 22:14 metadata-snapshot_name
-rw-r--r-- 1 root root  181 1215 22:14 snapshot-snapshot_name

7.在遷移目標的叢集上重複上面建立倉庫的操作,即步驟2,3

// 8.(將源叢集的備份內容(/root/backup裡的所有檔案),複製到遷移目標的叢集倉庫目錄裡)
// 類似批量匯入,所以只需要在主節點中恢復倉庫中的資料即可?

// 9.使用RESTful API進行備份的恢復,如果索引已經存在目標的叢集,需要先關閉索引,恢復資料後在開啟
POST /index_name/_close
POST _snapshot/my_backup/snapshot_name/_restore
POST /index_name/_open
// 10.檢視恢復的狀態
GET _snapshot/my_backup/snapshot_name/_status