你的ES數據備份了嗎? Docker-常用基建的安裝與部署

前言:

無論使用哪種存儲軟件,定期的備份數據都是重中之重,在使用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源碼解析與優化實戰

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