你的ES資料備份了嗎?

讓我發會呆發表於2021-08-13

前言:

無論使用哪種儲存軟體,定期的備份資料都是重中之重,在使用ElasticSearch的時候,隨著資料日益積累,存放es資料的磁碟空間也捉襟見肘,

此時對於業務功能使用不到的索引資料,又不能直接刪除,將它遷移到線下資料盤儲存就變得十分必要。

下面就記錄一下在docker中部署的單節點以月份索引的es資料的備份和遷移過程。

一:docker安裝ES

1:docker的安裝:Docker-常用基建的安裝與部署

2:下載es映象:

docker pull elasticsearch:5.6.8

3:elasticsearch.yml 配置:

http.host: 0.0.0.0

# Uncomment the following lines for a production cluster deployment
#transport.host: 0.0.0.0
#discovery.zen.minimum_master_nodes: 1
cluster.name: "elasticsearch"
http.cors.enabled: true
http.cors.allow-origin: "*"
path.repo: ["/usr/share/elasticsearch/backup"]

4:建立es容器

docker run -d --name es -p 9200:9200 -p 9300:9300
  --net docker_default --ip 172.18.0.40
  --memory-swappiness=0
  -v /root/data/docker/es/data:/usr/share/elasticsearch/data
  -v /root/data/docker/es/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
  -v /root/data/docker/es/logs:/user/share/elasticsearch/logs
  -v /root/data/docker/es/backup:/usr/share/elasticsearch/backup
  -e "discovery.type=single-node"
  --restart=always elasticsearch:5.6.8

上面三步簡單的建立完一個可用的es容器,接下來就用它來測試es的快照功能。

 

二:快照索引

snapshot API 是ES備份、遷移資料的重要手段。它支援增量備份,支援多種型別的倉庫儲存。

ES的備份過程是"智慧"的。你對一個索引的第一個快照會是這個索引的完整拷貝,但是所有後續的快照會保留的是已存快照和新資料之間的差異。

隨著你不時的對相同索引進行快照,備份也在增量的新增和刪除。這意味著後續備份會相當快速,因為它們只傳輸很小的資料量。

備份路徑通過配置: path.repo: ["/usr/share/elasticsearch/backup"] ,注意該路徑是es容器內部的,

所以我們在建立es容器時,可以通過 -v /宿主機目錄:/容器目錄,將宿主機目錄掛載到容器內部。

 

1:建立一個備份倉庫:my_backup

curl -XPUT 127.0.0.1:9200/_snapshot/my_backup -d '{  
    "type": "fs", 
    "settings": {
        "location": "/usr/share/elasticsearch/backup/my_backup" 
    }
}'

共享檔案系統支援的配置如下圖:

如果報錯:[my_backup] failed to create repository, 執行:chmod 777 /root/data/docker/es/backup

 

2:開始備份指定索引(close狀態的索引不可以執行快照),以 nova-202102 為例:

curl -XPUT 127.0.0.1:9200/_snapshot/my_backup/nova-202102?wait_for_completion=true -d '{  
        "indices": "nova-202102"
}'

如果索引檔案較大,可以去掉wait_for_completion=true,該命令會後臺執行備份。

如果備份是後臺執行的,下面命令可以查詢備份的狀態 
curl -XGET 127.0.0.1:9200/_snapshot/my_backup/nova-202102/_status

狀態值有:
INITIALIZING 分片在檢查叢集狀態看看自己是否可以被快照。這個一般是非常快的。
STARTED 資料正在被傳輸到倉庫。
FINALIZING 資料傳輸完成;分片現在在傳送快照後設資料。
DONE 快照完成!
FAILED 快照處理的時候碰到了錯誤,這個分片/索引/快照不可能完成了。檢查你的日誌獲取更多資訊。

# 取消正在備份的索引
curl -XDELETE 127.0.0.1:9200/_snapshot/my_backup/nova-202102
3:查詢已經備份完成的索引
curl -XGET 127.0.0.1:9200/_snapshot/my_backup/nova-202102

 

三:快照恢復

要恢復一個快照,該索引必須是關閉狀態或者已經被刪除。

curl -XPOST 127.0.0.1:9200/_snapshot/my_backup/nova-202102/_restore

監控快照恢復狀態

curl -XGET 127.0.0.1:9200/restored_nova-202102/_recovery

恢復過程是基於ES標準恢復機制的,因此標準的恢復監控服務可以用來監視恢復的狀態。

當執行叢集恢復操作時通常會進入Red狀態,這是因為恢復操作是從索引的主分片開始的,在此期間主分片狀態變為不可用,因此叢集狀態表現為Red。

一旦ES主分片恢復完成,整個叢集的狀態將被轉換成Yellow,並且開始建立所需數量的副分片。一旦建立了所有必需的副分片,叢集轉換到Green狀態。

 

四:參考文獻

1:Elasticsearch: 權威指南

2:Elasticsearch原始碼解析與優化實戰

相關文章