0 背景微信公众号:运维开发故事,作者:double冬
任何一个存储数据的软件,都需要定期的备份数据。es replica提供了运行时的高可用保障机制,可以容忍少数节点的故障和部分数据的丢失,但是整体上却不会丢失任何数据,而且不会影响集群运行。但是replica没法进行灾难性的数据保护,比如说机房彻底停电,所有机器全部宕机,等等情况。对于这种灾难性的故障,我们就需要对集群中的数据进行备份了,集群中数据的完整备份。
Elasticsearch提供了replica解决方案,它可以帮我们解决了如果有一个或多个node失败了,那么我们的数据还是可以保证完整的情况,并且搜索还可以继续进行。但是,有一种情况是我们的所有的node,或者有一部分node失败,可能会造成我们的数据的丢失。也就是说replca不能提供一种灾难性的保护机制。我们需要一种完整的备份机制。
在Elastic里,我们提供了一个叫做snapshot及restore API的接口。使您可以使用数据和状态快照备份您的Elasticsearch索引和集群。快照很重要,因为快照会在出现问题时提供您数据的副本。如果需要回滚到旧版本的数据,则可以从存储库中还原快照。如上图所示,我们可以把当前index的状态及数据存入到一个repository里去。Elasticsearch 的 snapshot 是由其自身控制的,整个系统保持了一个如下的从下到上的控制结构,他们具备包含关系:
snapshot --> repository --> single snapshot --> indices
为了能够做备份,我们首先必须创建一个repository,也就是一个仓库。你可以为一个cluster创建多个仓库。目前支持的仓库类型有:这个仓库应该是一组 snapshot 备份的集合,也可以认为是一个目标的选择。在一个 Elasticsearch 系统中你可以根据自己的意愿设定不同的 Repository。
Elasticsearch支持仓库类型
这里需要注意的是:S3, HDFS, Azure and GCS 需要相应的插件进行安装才可以。
Single snapshot这个指的是在 Repository 中我们进行的每个备份内容,他更像一个集合,包含了这次 snapshot 中所有的 Indices。
Indices在一个 snapshot 当中,可以包含多个 Indices 文件内容。他可以在执行 snapshot 的时候用 pattern 识别,也可以一个一个的指定。
S3 插件如果要想让 Elasticsearch 备份到 S3 当中需要单独安装一个插件 S3 Repository Plugin。
1 ES集群中插件安装和配置修改 1.1 自建ES集群下载repository-s3插件首先先要在es插件目录安装repository-s3的插件,必须在每个节点上都安装。
./bin/elasticsearch-plugin install repository-s31.2 修改elasticsearch的jvm.options
集群所有服务器节点都要 *** 作,在配置文件最后添加如下内容
-Des.allow_insecure_settings=true
重启各节点上的elasticsearch服务,然后在浏览器中输入http://esip地址/_cat/plugins,马上能看到所有节点安装的插件,则表示安装成功
elastic官网文档,主要是介绍的对AWS上的S3如果配置进行说明,实际上如果公司没有使用AWS的话,还是不太适用的,这里主要是以国产云平台华为云上的对象存储OBS为例,大家可以根据自己公司的业务情况进行选择腾讯云COS、阿里云OOS;只需要我们的Repository类型使用的是s3就行
可以在kibana中使用dev_tools来调用API进行 *** 作,如下所示,创建了一个仓库名为es_s3_repository,其中bucket是刚才创建的桶,access_key,secret_key,endpoint根据实际情况填写,compress为true表示为会对数据进行压缩
PUT _snapshot/es_s3_repository { "type": "s3", "settings": { "access_key": "xxxxxxxxxxxxxxx", "secret_key": "xxxxxxxxxxxxxxxxx", "bucket": "es-centre", "endpoint":"xxxxxxxxxxxx", "compress":"true" } }
执行之后返回为true,则为创建成功,如果返回其他错误,可能需要检查一下插件是否安装和jvm.options是否设置,集群重启成功
# 查看所有的仓库 GET /_snapshot/_all
返回结果
{ "es_s3_repository" : { "type" : "s3", "settings" : { "bucket" : "es-centre", "compress" : "true", "endpoint" : "obs.cn-north-2.myhuaweicloud.com" } } }
如果所示则为创建成功
3.2 创建快照测试(快照名index_bak)数据量太大会出问题,只能一个索引一个索引的做快照,如下为创建一个快照名为index_bak的快照,主要对index1,index2,两个索引进行创建快照
PUT /_snapshot/es_s3_repository/index_bak?wait_for_completion=true { "indices": "index1,index2", "ignore_unavailable": true, "include_global_state": false, "metadata": { "taken_by": "kimchy", "taken_because": "backup before upgrading" } }
常用的API命令
# 查看所有的仓库 GET /_snapshot/_all # 查看某一个具体的仓库的快照情况 GET /_snapshot/es_s3_repository/_all?pretty # 列出所有当前正在运行的快照以及显示他们的详细状态信息 GET /_snapshot/_status?pretty # 列出所有当前正在运行的快照以及显示他们的详细状态信息 GET /_snapshot/es_s3_repository/_status?pretty # 查看指定快照的详细状态信息即使不是正在运行 GET /_snapshot/es_s3_repository/snapshot_2/_status?pretty #删除某一个快照 DELETE /_snapshot/es_s3_repository/snapshot_23.3 在kibana上添加快照策略
这种创建方式,是对es上所有的所有的索引都会创建快照,这里需要注意,如果是有特殊需求可以调用API来进行创建
创建策略基本信息,这里的策略名称可以自己修改,快照名称名称,是表示一天创建一个快照,命名为snapshot加日期,频率设置为天,计划就是定时任务,这里的设置,实际上会+8h,表示为每天的凌晨00点10分进行前一天的索引快照备份
image.png
参考文档:
https://blog.csdn.net/UbuntuTouch/article/details/103045482?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159819053019725211918411%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=159819053019725211918411&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_blog_default-1-103045482.pc_v2_rank_blog_default&utm_term=snapshot&spm=1018.2118.3001.4187 https://www.elastic.co/guide/en/elasticsearch/reference/7.9/snapshots-take-snapshot.html
公众号:运维开发故事
github:https://github.com/orgs/sunsharing-note/dashboard
爱生活,爱运维
如果你觉得文章还不错,就请点击右上角选择发送给朋友或者转发到朋友圈。您的支持和鼓励是我最大的动力。喜欢就请关注我吧~
扫码二维码
关注我,不定期维护优质内容
温馨提示
如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。
........................
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)