工作步驟:
1:建立備份快照數據掛載點,即共享文件目錄(Shared Filesystem);
2:建立快照倉儲repository;
3:建立snapshot快照備份;
4:恢復snapshot快照數據;
1:建立數據掛載點
1)ES所有節點安裝sshfs,可通過yum源安裝,依賴epel;
2)安裝sshfs后,規划共享目錄掛載點,並確定目標掛載點,注意這里要為每個節點的共享目錄分配讀寫權限,如不確定,直接chmod 777 -共享目錄路徑;
3)通過如下指令掛載共享目錄至目標主機路徑:
#sshfs root@10.200.XX.XXX:/data1/esdata /data1/backups -o allow_other
指令里的【用戶名@IP地址:路徑】為實際掛載節點路徑及用戶,后一個路徑為本地節點掛載路徑;
4)將ES每個節點上的相同路徑均掛載至遠端的同一地址,完畢后確認已將所有節點的備份目錄掛載為同一目標主機的路徑下;
2:建立快照倉儲repository
1)通過es的api建立倉儲,注意body內容的單引號別丟了否則會報400 bad request
#curl -XPUT http://10.200.XXX.XXX:9200/_snapshot/backup_38 -d
'{
"type": "fs",
"settings":
{
"compress": true,
"location": "/data1/backups" # 這里的路徑就是第1步里建立的共享目錄掛載路徑
}
}'
執行后返回200則為成功建立;
2)通過API可獲取剛才建立的repository:
#curl http://10.200.XXX.XXX:9200/_snapshot/backup_38
正確返回repository信息則通過。
2016-12-5 補充:在創建倉儲過程中可能會提示如下錯誤說repository不在repos:
需要在elasticsearch集群中每個節點的配置文件(/etc/elasticsearch/elasticsearch.yml)中加入如下配置項:
path.repo: ["/data1/backups"]
其中指定的repo路徑為節點本地掛載點的路徑(指向遠端共享目錄)
3:建立snapshot快照備份
1)通過ES的API建立snapshot:
#curl -XPUT http://10.200.XXX.XXX:9200/_snapshot/backup_38/snapshot_20160628 -d
'{
"indices": "ld.*.stats,ld.log-*",
"ignore_unavailable": true,
"include_global_state": false
}'
這里的參數分別指定需要快照的index(支持*通配符),遇到不可用的index的策略(ignore),以及選擇不備份公共信息。
2)驗證快照
#curl http://10.200.XXX.XXX:9200/_snapshot/backup_38/snapshot_20160628 | python -mjson.tool
正常情況下將返回剛才建立的快照信息。
4:恢復snapshot快照數據
1)拷貝備份文件
文件服務器(及所有ES節點掛載的文件系統指向的地址)掛載目錄下的內容都屬於需要備份的內容,如下圖所示:
2)建立共享文件系統
- 在拷貝了備份快照信息的主機上以相同的方式建立共享系統,步驟與之前相同;
3)建立快照倉儲repository
- 以同樣的方式建立倉儲repository;
4)數據恢復
以下列的API來恢復數據:
curl -XPOST http://192.168.0.1:9200/snapshot/backup_38/snapshot_20160628/_restore
也可以通過加入如下參數來定制恢復:
{ "indices": "index1", "rename_pattern": "index_(.+)", "rename_replacement": "restored_index_$1" }
5)查看數據恢復進度
curl -XGET http://192.168.0.1:9200/snapshot/backup_38/snapshot_20160628/status
注:
數據恢復后,需要注意數據恢復的目標ES集群的插件情況(如IK分詞插件)需要與原集群保持一致,恢復后通過關閉索引(head插件直接可以關閉)並啟用,即可重新建立恢復后的索引。