前言:由於做項目的時候沒有進行長期考慮,把es,mysql,api等都部署在同一臺服務器上,隨着業務的增加,需要將部分服務和存儲遷移到其他服務器。es上目前已有100萬以上的數據,上網查資料,snapshot適合數據量大的遷移,所以沒來得及考慮就果斷選擇嘗試一下。
一.生成快照
1.修改配置文件
找到es配置文件elasticsearch.yml ,在配置文件中添加 path.repo註冊位置,由於es都是使用的非root用戶啓動,當前用戶需要有權限能讀寫,所以建議目錄設置爲用戶/home/{user}/backup,比如我自己的es的用戶是elk,但由於公司配的服務器磁盤掛在在根目錄下,home目錄只有2G的內存,所以我自己的配置是將快照配置在根目錄下一個文件夾,並設置爲elk用戶的管理權限,我設置的配置信息如下:
創建過程:
cd /data/ #進入data目錄
mkdir elk #創建文件夾
chown -R elk:elk /data/elk #賦予elk用戶和用戶組
chmod 777 /data/elk #賦予該用戶可讀寫執行的權限
path.repo: ["/data/elk/backup"]
配置截圖如下:
2.重啓Elasticsearch,然後執行http 註冊存儲庫
重啓:先使用:ps aux | grep elastic命令找到es的進程號,然後kill -9 進程號殺掉,再啓動es
執行http 註冊存儲庫:
curl -H "Content-Type: application/json" -XPUT 'http://localhost:9200/_snapshot/backup' -d '{
"type": "fs",
"settings": {
"location": "/data/elk/backup",
"compress": true
}
}'
參數說明:backup是共享文件系統倉庫,生成的快照將會存儲在 /data/elk/backup 這個目錄。
執行截圖:
查看執行結果:?pretty是美化返回結果,使返回結果換行美觀,可以清楚的看見json結構。
curl http://localhost:9200/_snapshot?pretty
結果截圖:
以上結果代表註冊成功。
3.執行快照請求
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/_snapshot/backup/snapshot_20200319?pretty
snapshot_20200319爲快照名稱,執行成功如下圖:
查看快照執行結果:
curl -H "Content-Type: application/json" -XGET http://localhost:9200/_snapshot/backup/snapshot_20200319?pretty
運行截圖:
等待快照註冊成功,等待"state": "SUCCESS"的標識就行快照完全生成成功。如果希望在腳本中一直等待到完成,可通過添加 wait_for_completion=true 標記實現,但如果數據特別多的話等待時間會很長。可寫成:
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/_snapshot/backup/snapshot_20200319?wait_for_completion=true
最終成功的截圖:
二、快照還原
1.在新的服務器上修改配置文件,快照路徑儘量需要和原服務器上的一致,按照上面註冊存儲庫,再執行備份
path.repo: ["/data/elk/backup"]
2.將backup複製到新服務器
scp -r /data/elk/backup/ [email protected]:/data/elk
3.執行還原:
curl -H "Content-Type: application/json" -XPOST http://localhost:9200/_snapshot/backup/snapshot_20200319/_restore?pretty
4.還原以後可以刪除存儲庫,並將配置path.repo: ["/data/elk/bakcup"]註釋掉還原(可選操作)
curl -H "Content-Type: application/json" -XDELETE http://localhost:9200/_snapshot/backup?pretty
刪除成功截圖:
此時可以註釋掉存儲庫的配置,重啓es,當一個庫被刪除,Elasticsearch僅刪除存儲庫的位置的引用,快照本身並沒有被刪除。