Elasticsearch的數據備份與恢復

1 序言

Elasticsearch默認配置是數據持久化的,就是ES會定時地把緩存數據刷新到硬盤,從而達到數據持久化地效果。在生產環境中,ES的數據持久化是必須的,防止出現斷電時數據的丟失。當然,除了數據持久化外,我們也是得做到數據備份的,防止出現數據損壞時無法恢復數據的情況。

下面開始介紹ES的數據備份和恢復。

 

2 ES環境

在開始ES的數據備份和恢復之前,我們得確保服務器的ES環境時搭建好的,這裏就不多做介紹了,若有不懂的可以查看這篇ES入門文章瞭解下:https://blog.csdn.net/qq_15092079/article/details/81411334

在搭建ES環境中需要注意的幾點:

  • JDK的安裝配置,ES的啓動時依賴於JDK的
  • 需要另外創建個用戶來啓動ES,root用戶是不能啓動ES的
  • 啓動時的vm.max_map_count的報錯問題
  • ES默認是隻能讓本機訪問,若需要遠程訪問還需修改文件elasticsearch.yml的network.host
  • kibana數據可視化界面的安裝

 

3 備份數據

3.1 配置文件elasticsearch.yml

在配置文件 config/elasticsearch.yml 中添加一行數據,設置ES備份的快照數據存儲路徑。若是沒有此目錄則需要自行創建。配置好後,需要重啓ES。

path.repo: /usr/elasticsearch/snapshot

3.2 創建倉庫

其實就是在ES庫中創建一個備份存儲的目的倉庫,這裏以倉庫名稱爲 backup 爲例,有如下兩種方式。

(1)在linux服務器上執行以下命令。

curl  -H "Content-Type: application/json" -XPUT http://ES的ip:端口/_snapshot/backup -d '{"type": "fs","settings": {"location": "/home/docker/back"}}'

(2)在kibana的Dev Tools開發工具中調用接口。

PUT _snapshot/backup
{
  "type": "fs",
  "settings": {
    "location": "data_bk",

    "compress": true,

    "max_snapshot_bytes_per_sec" : "50mb",

    "max_restore_bytes_per_sec" : "50mb"

  }
}

調用參數說明:

compress,是否壓縮,默認爲是。

max_snapshot_bytes_per_sec,每個節點快照速率。默認40mb/s。

max_restore_bytes_per_sec,節點恢復速率。默認40mb/s。

返回結果如下,則說明創建成功。

{
    "acknowledged": true
}

3.3 刪除備份數據

在備份數據之前,最好是先根據備份數據的名稱刪除原來已經備份好的數據。相同名稱的備份數據是不能重複備份的。

這裏以備份數據的名稱爲 bk_20190926 爲例,後面的執行都以此爲例,有如下兩種方式。

(1)在linux服務器上執行以下命令。

curl -XDELETE http://ES的ip:端口/_snapshot/backup/bk_20190926

(2)在kibana的Dev Tools開發工具中調用接口。

DELETE _snapshot/backup/bk_20190926

返回結果如下,則說明刪除成功。

{
    "acknowledged": true
}

3.4 開始備份數據

備份數據同樣是與刪除數據一樣,直接調用ES的接口實現的,有如下兩種方式。

(1)在linux服務器上執行以下命令。

curl -XPUT http://ES的ip:端口/_snapshot/backup/bk_20190926?wait_for_completion=true

(2)在kibana的Dev Tools開發工具中調用接口。

PUT _snapshot/backup/bk_20190926?wait_for_completion=true

返回結果如下,則說明已經備份成功。

{
    "snapshot": {
        "snapshot": "bk_20190926",
        "uuid": "K4fze5eGSvOwot_xWtz0Hw",
        "version_id": 6050399,
        "version": "6.5.3",
        "indices": [
            "first_index"
        ],
        "include_global_state": true,
        "state": "SUCCESS",
        "start_time": "2019-09-27T05:36:39.398Z",
        "start_time_in_millis": 1569562599398,
        "end_time": "2019-09-27T05:36:39.723Z",
        "end_time_in_millis": 1569562599723,
        "duration_in_millis": 325,
        "failures": [],
        "shards": {
            "total": 5,
            "failed": 0,
            "successful": 5
        }
    }
}

同時,可以在ES所在的服務器的目錄 /usr/elasticsearch/snapshot/data_bk 下查看到增加了很多文件,這些就是備份數據所需的文件。

3.5 查看備份數據

備份完數據後,直接在服務器上可以看到這些備份的文件,但是這些文件並不是一眼就能看出你備份了哪些數據的,此時你可以通過調用ES的接口來查看你備份了哪些數據。同樣有兩種方式調用。

(1)在linux服務器上執行以下命令。

curl -XGET http://ES的ip:端口/_snapshot/backup/_all

(2)在kibana的Dev Tools開發工具中調用接口。

GET _snapshot/backup/_all

返回結果如下,你備份了多少快照都可以在這裏看到,snapshots列表的最後一個元素就是你最近備份的快照。

{
    "snapshots": [
        {
            "snapshot": "bk_20190926",
            "uuid": "K4fze5eGSvOwot_xWtz0Hw",
            "version_id": 6050399,
            "version": "6.5.3",
            "indices": [
                "first_index"
            ],
            "include_global_state": true,
            "state": "SUCCESS",
            "start_time": "2019-09-27T05:36:39.398Z",
            "start_time_in_millis": 1569562599398,
            "end_time": "2019-09-27T05:36:39.723Z",
            "end_time_in_millis": 1569562599723,
            "duration_in_millis": 325,
            "failures": [],
            "shards": {
                "total": 5,
                "failed": 0,
                "successful": 5
            }
        }
    ]
}

 

4 恢復數據

數據備份好了,如果真的出現了不可逆的數據損壞情況,此時就可以進行數據恢復了。

4.1 備份data文件夾

data文件夾其實就是當前ES的數據存儲地,防止恢復數據出現異常,先把ES目錄下面的data目錄備份一下。

tar -cvf data-20190626.tar.gz data

4.2 清空數據

恢復數據之前,先把當前ES的數據清空掉。有如下兩種方式。

(1)在linux服務器上執行以下命令。

curl -XDELETE http://ES的ip:端口/_all

(2)在kibana的Dev Tools開發工具中調用接口。

DELETE _all

返回結果如下,則說明清空數據成功。

{
    "acknowledged": true
}

4.3 恢復數據

恢復數據同樣有如下兩種方式操作。

(1)在linux服務器上執行以下命令。

curl -XPOST http://ES的ip:端口/_snapshot/backup/bk_20190926/_restore

(2)在kibana的Dev Tools開發工具中調用接口。

POST _snapshot/backup/bk_20190926/_restore

返回結果如下,則說明恢復數據成功。

{
    "accepted": true
}

至此,ES的數據備份和恢復就介紹完啦!

 

5 總結

這裏只是講解了手動的操作ES的數據備份和恢復,在程序裏面我們一樣可以通過調用ES的接口來進行數據備份和恢復,例如通過java程序來定時每天進行ES地數據備份,然後刪除昨天或前天的備份數據,只保留一份或兩份備份數據,以此來節約磁盤空間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章