7、Elasticsearch数据Snapshot备份与恢复
我们知道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