前言:
無論使用哪種儲存軟體,定期的備份資料都是重中之重,在使用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
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狀態。
四:參考文獻
2:Elasticsearch原始碼解析與優化實戰