章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • ansible系列文章

  • Kubernetes笔记

  • elk

    • elk安装
    • docker-compose安装elk
    • filebeat-log相关配置指南
    • logstash提取日志字段到kibana仪表盘展示
    • 深入理解 ELK 中 Logstash 的底层原理
    • filebeat及logstash配置
    • es索引定期删除脚本
    • logstash线上配置文件
    • elk报错问题总结
    • es备份和还原
      • 部署说明
      • docker部署
      • 访问测试
      • 创建bucket
      • 创建Access Key
      • 创建访问控制权限
      • 安装S3插件
      • 添加S3地址
      • 添加Access key至密钥库
      • 重启es服务
      • 创建快照仓库
      • 创建数据策略
      • 数据备份
      • 数据恢复
      • 快照删除注意事项
    • ES集群与角色规划
    • ES8.8集群与Kibana部署
    • ElasticSearch可视化工具介绍
    • 使用docker构建ElasticSearch集群
  • jenkins

  • GitLabCI_CD

  • 专题
  • elk
章工运维
2024-03-12
目录

es备份和还原

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

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

# 部署minio

# 部署说明

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

# docker部署

[root@es-fleet2 ~]# mkdir /data/minio
[root@es-fleet2 ~]# 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"
1
2

# 访问测试

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

# 创建bucket和Access Key

0c426e542ef10327.jpg

# 创建bucket

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

2a0b52564eb6f9ad.jpg

# 创建Access Key

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

5a8910b8db4aa290.jpg

# 创建访问控制权限

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

70d85dd1de3456e6.jpg

设置权限

{
    "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/*"
            ]
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

创建user
这里 Access Key 是用户名,Access Secret 是对应的口令。设置时关联上刚才创建的 Policy 即可

c2c0e833ab5e478b.jpg

我们就创建了一个新的存储桶,并且给这个存储桶设置了一个用户,同时授权了用户对存储桶的访问,包括列表、上传、下载这几个基本权限。

# 配置es以支持minio备份

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

# 安装S3插件

在es8之前需要手动安装,8之后无需安装。

[root@es-fleet2 ~]# /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
1
2
3
4

# 添加S3地址

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

# 添加Access key至密钥库

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

# 重启es服务

[root@es-fleet2 ~]# systemctl restart elasticsearch
1

# 备份恢复验证

# 创建快照仓库

登录kibana——>点击菜单按钮——>Stack Management——>拍摄快照并还原——>存储库——>注册存储库,然后设置名称并选择类型为AWS S3

b49e4d2bba667d2e.jpg

填写存储桶名称为es-backup,其他保持默认即可

882b64794374e689.jpg

注册完成后点击验证存储库,显示已连接。

9643f0a15844429e.jpg

# 创建数据策略

接下来,我们以导入的kibana_sample_data_flights索引为例,演示数据的备份与恢复。

99a2ebf08a77cfcf.jpg

创建备份策略,名称自定义,快照表达式填写<kibana_sample_data_flights-{now/d}>

1d7c53f65158add4.jpg

选择索引为kibana_sample_data_flights

34d25275ce3b717b.jpg

设置快照保留策略

07183b2cb604a6c2.jpg

备份策略创建后,界面如下所示

04a1746d5f170d9f.jpg

# 数据备份

创建完策略后,es会在每天8点自动将数据上传至minIO增量备份,我们也可以点击立即执行,手动触发一次备份任务操作。

a9895eb354657fab.jpg

点击立即执行后,查看快照信息,显示已备份完成。

9b2f06d81f53c25c.jpg

查看minIO的bucket信息,发现已成功上传数据

ed0a5f888cbe73d8.jpg

# 数据恢复

接下来删除index,模拟误操作情况发生。

c8fedd844ffa7ebe.jpg

在快照菜单点击恢复按钮,执行恢复操作

fcc4f39c074e7e82.jpg

使用默认选项还原即可

3e55982dd7035da9.jpg

查看还原状态显示已完成

c0790ffb7a2fd7e6.jpg

接下来打开索引管理,发现index已正常还原,且文档数、分片数、存储大小等信息与先前保持一致。

0fa20ad526b88250.jpg

# 快照删除注意事项

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


原文链接 (opens new window)

微信 支付宝
上次更新: 2024/03/12, 17:22:04

← elk报错问题总结 ES集群与角色规划→

最近更新
01
不花一分钱从0到1建站教程
04-22
02
批量拿取多台服务器的日志文件
04-21
03
高德MCP智能体搞定旅游计划
04-19
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式