ES8生产实践——ES数据备份与恢复

ES支持快照功能,用于实现数据的备份与恢复。我们可以生成单个索引或整个集群的快照,并将其存储在共享文件系统上的存储库中,并且有一些插件支持 S3、HDFS、Azure、Google Cloud Storage 等上的远程存储库。

因为minio兼容S3,而es支持将快照存储在远程S3存储服务中,因此实验以minio为例演示es的快照备份与恢复。

部署minio

部署说明

为了方便起见,本示例仅使用一台minio节点docker方式部署。在实际生产环境中,强烈建议使用二进制方式部署4台及以上节点的minio集群,提高容错率和服务可用性。

docker部署

[root@es-master ~]# mkdir /data/minio
[root@es-master ~]# docker run -d -p 9000:9000  -p 9090:9090  --name minio  -v /data/minio:/data -e "MINIO_ROOT_USER=root" -e "MINIO_ROOT_PASSWORD=1234qwer" --restart always quay.io/minio/minio server /data --console-address ":9090"

访问测试

访问http://192.168.10.132:9090 用户名为root 密码为1234qwer。
image.png

创建bucket和Access Key

创建bucket

创建一个名为es-backup的bucket,并设置容量上限为1TB
image.png

创建Access Key

创建access key并牢记,后续使用。
image.png

创建访问控制权限

Minio 的存储桶默认是不跟任何 Access Key 关联的,也就是说所有Access Key均可访问该bucket,这在实际生产环境中存在权限过大的问题。不过由于 Minio 支持标准的 S3 协议,我们可以给 Access Key 授予某个 Bucket 存储桶的访问权限,实现 Key 和 Bucket 的绑定。
创建policy
image.png
设置权限

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::es-backup/*"
            ]
        }
    ]
}

创建user
这里 Access Key 是用户名,Access Secret 是对应的口令。设置时关联上刚才创建的 Policy 即可。
image.png
我们就创建了一个新的存储桶,并且给这个存储桶设置了一个用户,同时授权了用户对存储桶的访问,包括列表、上传、下载这几个基本权限。

配置es以支持minio备份

以下操作在每个ES节点都要执行

安装S3插件

[root@es-master ~]# /usr/share/elasticsearch/bin/elasticsearch-plugin install repository-s3 
-> Installing repository-s3
[repository-s3] is no longer a plugin but instead a module packaged with this distribution of Elasticsearch
-> Please restart Elasticsearch to activate any plugins installed

添加S3地址

[root@es-master ~]# vim /etc/elasticsearch/elasticsearch.yml
s3.client.default.endpoint: 192.168.10.132:9000 # minio服务地址+端口
s3.client.default.protocol: http # 非https时需要指定

添加Access key至密钥库

[root@es-master ~]# /usr/share/elasticsearch/bin/elasticsearch-keystore add s3.client.default.access_key
Enter value for s3.client.default.access_key: 
[root@es-master ~]# /usr/share/elasticsearch/bin/elasticsearch-keystore add s3.client.default.secret_key
Enter value for s3.client.default.secret_key: 

重启es服务

[root@es-master ~]# systemctl restart elasticsearch

备份恢复验证

创建快照仓库

登录kibana——>点击菜单按钮——>Stack Management——>拍摄快照并还原——>存储库——>注册存储库,然后设置名称并选择类型为AWS S3
image.png
填写存储桶名称为es-backup,其他保持默认即可
image.png
注册完成后点击验证存储库,显示已连接。
image.png

创建数据策略

接下来,我们以导入的kibana_sample_data_flights索引为例,演示数据的备份与恢复。
image.png
创建备份策略,名称自定义,快照表达式填写<kibana_sample_data_flights-{now/d}>image.png
选择索引为kibana_sample_data_flights
image.png
设置快照保留策略
image.png
备份策略创建后,界面如下所示
image.png

数据备份

创建完策略后,es会在每天8点自动将数据上传至minIO增量备份,我们也可以点击立即执行,手动触发一次备份任务操作。
image.png
点击立即执行后,查看快照信息,显示已备份完成。
image.png
查看minIO的bucket信息,发现已成功上传数据
image.png

数据恢复

接下来删除index,模拟误操作情况发生。
image.png
在快照菜单点击恢复按钮,执行恢复操作
image.png
使用默认选项还原即可
image.png
查看还原状态显示已完成
image.png
接下来打开索引管理,发现index已正常还原,且文档数、分片数、存储大小等信息与先前保持一致。
image.png

快照删除注意事项

如果需要删除快照,一定要使用kibana或者用 API 删除快照,而不能用其他机制(比如手动删除,或者使用S3定期删除策略)。因为快照是增量备份,后面的快照数据依赖先前的文件。delete API 知道哪些数据还在被近期快照使用,只删除不再被使用的那部分数据。

参考文档

minIO 生产模式部署:https://www.minio.org.cn/docs/minio/linux/operations/install-deploy-manage/deploy-minio-multi-node-multi-drive.html#deploy-minio-distributed
minIO docker方式部署:https://www.minio.org.cn/docs/minio/container/index.html
备份策略创建:https://www.elastic.co/guide/en/elasticsearch/reference/8.8/api-conventions.html#api-conventions
创建快照:https://www.elastic.co/guide/en/elasticsearch/reference/8.8/snapshots-take-snapshot.html
恢复快照:https://www.elastic.co/guide/en/elasticsearch/reference/8.8/snapshots-restore-snapshot.html
注册s3存储地址:https://www.elastic.co/guide/en/elasticsearch/reference/8.8/repository-s3.html

查看更多

微信公众号

微信公众号同步更新,欢迎关注微信公众号第一时间获取最近文章。在这里插入图片描述

博客网站

崔亮的博客-专注devops自动化运维,传播优秀it运维技术文章。更多原创运维开发相关文章,欢迎访问https://www.cuiliangblog.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值