我們知道Elasticsearch的索引拆分成多個shard進行存儲在磁盤里,shard雖然分了primary shard和replica shard,可以保證集群的數據不丟失,數據訪問不間斷,但如果機房停電導致集群節點全部宕機這種重大事故時,我們就需要提前定期地對數據進行備份,以防萬一。
1.ES集群Snapshot備份需先配置共享存儲
#在此我使用nfs為例(系統版本為Centos7)
nfs服務端
yum install -y nfs-utils
#配置掛載的文件,該文件也就是后面ES所需要配置的
vim /etc/exports
/opt/elasticsearch-7.6.1/esbackup *(rw,sync,no_root_squash)
mkdir -p /opt/elasticsearch-7.6.1/esbackup
#先為rpcbind和nfs做開機啟動:(必須先啟動rpcbind服務)
systemctl enable rpcbind.service
systemctl enable nfs-server.service
#然后分別啟動rpcbind和nfs服務
systemctl start rpcbind.service
systemctl start nfs-server.service
#確認NFS服務器啟動成功
rpcinfo -p
# 使配置生效
exportfs -r
# 查看配置情況
exportfs
#這里做完后要記得給es用戶賦予寫權限
nfs客戶端
yum install -y nfs-utils
systemctl enable rpcbind.service
systemctl start rpcbind.service
showmount -e 服務端IP
mkdir -p /opt/elasticsearch-7.6.1/esbackup
#掛載目錄
mount -t nfs 服務端IP :/opt/elasticsearch-7.6.1/esbackup /opt/elasticsearch-7.6.1/esbackup
2.修改ES配置文件
#根據自己ES的實際路徑
cd /usr/local/elasticsearch-7.6.1/config/
vim elasticsearch.yml
#加上該配置項,就是我們的共享存儲路徑 path.repo: /opt/elasticsearch-7.6.1/esbackup
#若是ES集群的話,則所有節點都需要做此配置
3.重啟ES
su - es
#通過kill命令先殺掉es進程
cd /usr/local/elasticsearch-7.6.1/bin/
nohup ./elasticsearch &
4.建立倉庫
#倉庫地址就是我們的共享存儲 /opt/elasticsearch-7.6.1/esbackup
curl --user elastic:elastic -H "Content-Type: application/json" -XPUT http://ES IP地址:9200/_snapshot/esbackup -d '{"type": "fs","settings": {"location": "/opt/elasticsearch-7.6.1/esbackup"}}'
#完成后,共享存儲下會生成一個文件
5.Snapshot創建快照
#通過kibana進行操作
//異步備份所有打開的索引 PUT _snapshot/esbackup/snapshot_1 //同步備份部分索引 PUT _snapshot/esbackup/snapshot_2?wait_for_completion=true { "indices": "index_1,index_2" } //查看所有快照信息 GET _snapshot/esbackup/_all //查看單個快照信息,可以看到所備份的索引 GET _snapshot/esbackup/snapshot_1 //刪除快照 DELETE _snapshot/esbackup/snapshot_1
6.快照狀態解釋
GET _snapshot/esbackup/snapshot_1/_status
stage字段名詞解釋:
INITIALIZING:分片正在檢查集群狀態以查看是否可以對其進行快照。這通常非常快。
TARTED:數據正在傳輸到存儲庫。
FINALIZING:數據傳輸完成;分片現在正在發送快照元數據。
DONE:快照完成!
FAILED:快照過程中遇到錯誤,無法完成此shard/index/snapshot。檢查您的日志以獲取更多信息。
7.Snapshot快照恢復
//默認恢復該快照中的所有索引,默認異步,可使用wait_for_completion=true,改為同步 POST _snapshot/esbackup/snapshot_1/_restore //從快照中恢復某個索引 POST /_snapshot/esbackup/snapshot_1/_restore { "indices": "index_1" } //查看還原進度 GET index_1/_recovery