備份與還原
測試版本:5.6.3
建立資料夾
bitnami:需要加-H 'Content-Type: application/json'
-H 'Content-Type: application/json'
資料夾設定
# 打開資料夾所有權限 避免使用者權限問題
sudo chmod -R 777 [path]
# 檢視資料夾詳細設定
ls -al [path]
elasticsearch.yml設定
更新elasticsearch.yml內容 (cluster每一台都要?)
# 新增備份絕對路徑
path.repo: ["/mnt/es_backup"]
設定完成後重啟es server
# bitnami環境
sudo service bitnami restart
# 檢查重啟是否成功
systemctl status bitnami.service
Repository設定
建立repository
curl -XPUT 'http://[ip]:9200/_snapshot/[repository_name]' -d '{
"type":"fs",
"settings":{
"location":"[backup_absolute_path]",
"compress":true,
"max_snapshot_bytes_per_sec" : "50mb",
"max_restore_bytes_per_sec" : "50mb"
}
}'
# 可能會回傳一些error資訊,但依然可先查詢repository是否有設定成功
# 可更改備份與恢復的速度,預設是20mb
# 建立時使用PUT,而更新設定時則使用POST
檢查repository設定是否成功
curl -XPOST http://[ip]:9200/_snapshot/[repository_name]/_verify?pretty
如果在建立或檢查repository時出現資料夾權限錯誤(repository verification exception)
可自行建立sshfs共享資料夾來解決(參考Linux/sshfs)
查詢所有repository設定
curl -XGET 'http://[ip]:9200/_snapshot?pretty'
# 已設定完成的結果
{
"[backup_name]" : {
"type" : "fs",
"settings" : {
"compress" : "true",
"location" : "[backup_name]"
}
}
}
刪除註冊完成的repository
curl -XDELETE 'http://[ip]:9200/_snapshot/[repository_name]?pretty'
# 若repository已有snapshot,則無法直接刪除
Snapshot設定
建立snapshot並自行命名,包含所有index
curl -XPUT 'http://[ip]:9200/_snapshot/[repository_name]/[snpashot_name]?wait_for_completion=true'
# 可從successful、failed欄位得知備份是否完全成功
# 快照只會處理狀態是open的index
建立特定index的snapshot
curl -XPUT 'http://[ip]:9200/_snapshot/[repository_name]/[snapshot_name]' -d '{"indices":"[index_name]"}'
# snapshot備份完成結果格式都相同
查詢snapshot建立進度
curl -XGET 'http://[ip]:9200/_snapshot/[repository_name]/[snapshot_name]/_status?pretty'
查詢所有snapshot版本
curl -XGET "[ip]:9200/_snapshot/[backup_name]/_all?pretty"
# 若已有儲存snapshot,可看到其相關資訊
{
"snapshots": [
{
"snapshot": "snapshot版本名稱",
"indices": [儲存的index],
...
}
]
}
# 可從successful、failed欄位得知備份是否完全成功
刪除snapshot
curl -XDELETE 'http://140.96.68.132:9200/_snapshot/[repository_name]/[snapshot_name]'
恢復snapshot
列出所有index
curl -XGET '[ip]:9200/_cat/indices?v'
先刪除特定index
curl -XDELETE 'http://[ip]:9200/[index_name]'
# 刪除完成後再列出一次所有index,確認刪除成功
關閉index
# 恢復前需先關閉index
# 關閉所有index
curl -XPOST 'http://[ip]:9200/_all/_close'
# 關閉指定index
curl -XPOST 'http://[ip]:9200/[index_name]/_close'
指定snapshot進行恢復
curl -XPOST 'http://[ip]:9200/_snapshot/[repository_name]/[snapshot_name]/_restore?wait_for_completion=true"
# 成功可看到failed:0
# 恢復完成後再檢查一次index
# 在該次恢復完成前,無法再度執行其他snapshot版本的恢復
指定snapshot中的index進行恢復
curl -XPOST 'http://[ip]:9200/_snapshot/[repository_name]/[snapshot_name]/_restore' -d '{
"indices": "[index_name]",
"rename_replacement": "[new_index]"
}‘
查看恢復進度
curl -XGET http://[ip]:9200/_recovery?pretty
參考連結:
https://docs.bitnami.com/virtual-machine/apps/elasticsearch/
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html
http://droidspa.blogspot.com/2016/11/elasticsearch-backup-and-restore.html
http://www.itread01.com/content/1495128248.html
http://keenwon.com/1393.html
http://openskill.cn/article/468
http://smallasa.com/2017/03/09/elasticsearch-backup-and-restore/