Elasticsearch--索引備份與遷移
阿新 • • 發佈:2019-02-13
Elasticsearch叢集備份,以及在不同叢集之間遷移資料
類似mongodb的mongodump功能,Elasticsearch也提供了備份叢集中索引資料的策略——snapshot API.它會備份整個叢集的當前狀態和資料,並儲存到叢集中各個節點共享的倉庫中。這個備份的程序是增量備份的,在第一次備份的基礎上進行的第二次備份只備份新變化的資料。官方文件
系統:ubuntu
備份ES資料的三個步驟:
- 叢集–多節點時需要掛載一個共享目錄建立一個共享目錄,這個共享目錄要求叢集中的所有節點都能感知到。如何建立共享倉目錄後面補充。
- 在每個節點的$ELASTICSEARCH_HOME/config/elasticsearch.yml中新增path.repo: /mnt/es_backup 配置,並重啟節點,其中/mnt/es_backup 目錄為每個節點的倉庫目錄,最好chmod 777 /mnt/es_backup,以保證elasticsearch有許可權寫入資料
- 為每個節點建立倉庫,倉庫位置為 /mnt/es_backup
- 新增索引快照(snapshot)
- 檢視備份狀態。
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 12月 15 22:14 index
drwxr-xr-x 3 root root 4096 12月 15 22:14 indices
-rw-r--r-- 1 root root 83 12月 15 22:14 metadata-snapshot_name
-rw-r--r-- 1 root root 181 12月 15 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