1. 程式人生 > >【ELK】Elasticsearch的備份和恢復

【ELK】Elasticsearch的備份和恢復

非原創,只是留作自己查詢使用,轉自http://keenwon.com/1393.html
Elasticsearch的備份和恢復

備份
Elasticsearch的一大特點就是使用簡單,api也比較強大,備份也不例外。簡單來說,備份分兩步:1、建立一個倉庫。2、備份指定索引。下面一步一步來:

1、建立一個倉庫(creating the repository)
假如共享檔案儲存介質掛載在/mount/backups/my_backup目錄下,需要在elasticsearch.yml新增如下配置:

path.repo: [“/mount/backups/my_backup”]

否則在註冊時,報如下錯誤:

{“error”:”RepositoryException[[backup] failed to create repository]; nested: CreationException[Guice creation errors:\n\n1) Error injecting constructor, org.elasticsearch.repositories.RepositoryException: [backup] location [/mount/bak] doesn’t match any of the locations specified by path.repo because this setting is empty\n at org.elasticsearch.repositories.fs.FsRepository.(Unknown Source)\n while locating org.elasticsearch.repositories.fs.FsRepository\n while locating org.elasticsearch.repositories.Repository\n\n1 error]; nested: RepositoryException[[backup] location [/mount/bak] doesn’t match any of the locations specified by path.repo because this setting is empty]; “,”status”:500}

備份資料之前,要建立一個倉庫來儲存資料,倉庫的型別支援Shared filesystem, Amazon S3, HDFS和Azure Cloud。下面以檔案系統為例:

PUT http://127.0.0.1:9200/_snapshot/my_backup
{
“type”: “fs”,
“settings”: {
“location”: “/mount/backups/my_backup”
}
}

上面的程式碼,我們建立了一個名叫my_backup 的備份,存放在本地的/mount/backups/my_backup 目錄下。除了location 引數外,還可以通過max_snapshot_bytes_per_sec 和max_restore_bytes_per_sec 來限制備份和恢復時的速度,如下:

POST http://127.0.0.1:9200/_snapshot/my_backup/
{
“type”: “fs”,
“settings”: {
“location”: “/mount/backups/my_backup”,
“max_snapshot_bytes_per_sec” : “50mb”,
“max_restore_bytes_per_sec” : “50mb”
}
}

注意:第一段程式碼用的是PUT 請求,用來建立repository,第二段程式碼用的是POST 請求,來修改已經存在的repository。

2、備份索引
倉庫建立好之後就可以開始備份了。一個倉庫可以包含多個快照(snapshots),快照可以存所有的索引,部分索引或者一個單獨的索引。可以給索引指定一個唯一的名字:

PUT http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1

上面的程式碼會將所有正在執行的索引,備份到my_backup倉庫下一個叫snapshot_1的快照中。上面的api會立刻返回,然後備份工作在後臺執行。如果你想api同步執行,可以加wait_for_completion 標誌:

PUT http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true

上面的方法會在備份完成後才返回,如果資料量大的話,會花很長時間。

如果只想備份部分索引的話,可以加上indices 引數:

PUT http://127.0.0.1:9200/_snapshot/my_backup/snapshot_2
{
“indices”: “index_1,index_2”
}

3、刪除備份
不要手動刪除檔案(Elasticsearch一貫主張使用api操作,尤其是大叢集中),刪除snapshot_2:

DELETE http://127.0.0.1:9200/_snapshot/my_backup/snapshot_2

如果備份正在後臺進行,也可以直接刪除來取消此次備份。

4、檢視備份資訊
直接使用GET 請求即可:

GET http://127.0.0.1:9200/_snapshot/my_backup/snapshot_2

返回類似下面的值:

{
“snapshots”: [
{
“snapshot”: “snapshot_2”,
“indices”: [
“.marvel_2014_28_10”,
“index1”,
“index2”
],
“state”: “SUCCESS”,
“start_time”: “2014-09-02T13:01:43.115Z”,
“start_time_in_millis”: 1409662903115,
“end_time”: “2014-09-02T13:01:43.439Z”,
“end_time_in_millis”: 1409662903439,
“duration_in_millis”: 324,
“failures”: [],
“shards”: {
“total”: 10,
“failed”: 0,
“successful”: 10
}
}
]
}

如果要檢視所有索引的資訊,使用如下api:

GET http://127.0.0.1:9200/_snapshot/my_backup/_all

另外還有個一api可以看到更加詳細的資訊:

GET http://127.0.0.1:9200/_snapshot/my_backup/snapshot_3/_status

恢復
備份好後,恢復就更容易了,恢復snapshot_1裡的全部索引:

POST http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1/_restore

這個api還有額外的引數:

POST http://127.0.0.1:9200/_snapshot/my_backup/snapshot_1/_restore
{
“indices”: “index_1”,
“rename_pattern”: “index_(.+)”,
“rename_replacement”: “restored_index_$1”
}

引數indices 設定只恢復index_1索引,引數rename_pattern 和rename_replacement 用來正則匹配要恢復的索引,並且重新命名。和備份一樣,api會立刻返回值,然後在後臺執行恢復,使用wait_for_completion 標記強制同步執行。

另外可以使用下面兩個api檢視狀態:

GET http://127.0.0.1:9200/_recovery/restored_index_3
GET http://127.0.0.1:9200/_recovery/

如果要取消恢復過程(不管是已經恢復完,還是正在恢復),直接刪除索引即可:

DELETE http://127.0.0.1:9200/restored_index_3