利用HDFS备份实现Elasticsearch容灾

作者:TalkingData数据工程师 杨双亮

本文由TalkingData原创,转载请获取授权。

01

问题

Elasticsearch 副本提供了高可靠性;它们让你可以容忍零星的节点丢失而不会中断服务。但是,副本并不提供对灾难性故障的保护。对这种情况,你需要的是对集群真正的备份——在某些东西确实出问题的时候有一个完整的拷贝。

02

解决方案

通过快照的方式,将Elasticsearch集群中的数据,备份到HDFS上,这样数据即存在于Elasticsearch(以下简称ES)集群当中,又存在于HDFS上。当ES集群出现不可恢复性的故障时,可以将数据从HDFS上快速恢复。

ES集群快照存在版本兼容性问题,请注意:

A snapshot of an index created in 5.x can be restored to 6.x.

A snapshot of an index created in 2.x can be restored to 5.x.

A snapshot of an index created in 1.x can be restored to 2.x.

03

操作步骤

插件GitHub地址:https://github.com/elastic/elasticsearch-hadoop/tree/master/repository-hdfs

下载地址:https://download.elastic.co/elasticsearch/elasticsearch-repository-hdfs/elasticsearch-repository-hdfs-2.2.0-hadoop2.zip

在线安装

进入ES的目录,执行命令:bin/elasticsearch-plugin install repository-hdfs

离线安装

现将下载好的zip包,放在指定目录,如/home/hadoop/elk/es-reporitory.zip,然后执行命令:bin/plugin install file:///home/hadoop/elk/es-reporitory.zip

显示:

(注:左右滑动即可查看完整代码,下同)

-> Installing fromfile:/home/hadoop/elk/elasticsearch-repository-hdfs-2.2.-hadoop2.zip...

Tryingfile:/home/hadoop/elk/elasticsearch-repository-hdfs-2.2.-hadoop2.zip ...

Downloading .................DONE

Verifyingfile:/home/hadoop/elk/elasticsearch-repository-hdfs-2.2.-hadoop2.zip checksumsifavailable ...

NOTE: Unabletoverify checksumfordownloaded plugin (unabletofind.sha1or.md5filetoverify)

ERROR: Plugin [repository-hdfs]isincompatible with Elasticsearch [2.3.3]. Was designedforversion[2.2.]

注意:应当选择与你使用ES版本的插件,由于我们使用的ES版本是2.3.3,而使用的插件版本是2.2.0 ,故可以先解压,修改plugin-descriptor.properties

解压,修改plugin-descriptor.properties:

重新打包为es-reporitory.zip,再执行(最好使用root权限);使用Hadoop权限,会出现以下信息:

3.2 ES集群添加配置

ES集群各个node节点的config/elasticsearch.yml文件添加一下配置,然后滚动式重启:

注意:这里是简单的配置,还有其它的参数,这里就采用默认的了。

3.3. 常用的快照命令

建立仓库命令:

至于快照命令,常用的快照命令,简单记录如下:

创建存储快照的仓库:

快照特定的索引:

恢复特定索引:

查看特定快照信息:

删除快照:

监控快照:

响应包括快照的总体状况,但也包括下钻到每个索引和每个分片的统计值。这里展示了有关快照进展的非常详细的视图。分片可以在不同的完成状态:

INITIALIZING:分片在检查集群状态看看自己是否可以被快照。这个一般是非常快的。

STARTED:数据正在被传输到仓库。

FINALIZING:数据传输完成;分片现在在发送快照元数据。

DONE:快照完成!

FAILED:快照处理的时候碰到了错误,这个分片/索引/快照不可能完成了。检查你的日志获取更多信息。

监控恢复快照:

要获取一个仓库中所有快照的完整列表,使用 _all 占位符替换掉具体的快照名称:

取消一个快照:

备份集群:

https://www.elastic.co/guide/cn/elasticsearch/guide/current/backing-up-your-cluster.html

快照恢复:

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_restoring_from_a_snapshot.html

3.4 脚本

3.5 crontab

注意:这里采用的是每天一份快照,快照的频率可以自己控制。

04

恢复时间

我们采用的测试环境:

ES集群:四个节点,每个节点:10G内存,ES版本:2.3.3,每个索引5个主分片,一个replica.

4.1 备份数据

第一次快照是全量的(gatewaylog_20171226),第二次快照则是增量的快照(gatewaylog_20171228):

gatewaylog_20171226的详细数据:

gatewaylog_20171228的详细数据:

4.2 恢复数据

第一次是全量的数据恢复,第二次则是在第一次恢复的基础上进行的:

以下是各个分片的数据恢复的详细数据:

gatewaylog_20171226 恢复详细数据:

Gatewaylog_20171228 恢复详细数据:

通过将ElasticSearch的数据备份到HDFS,我们再也不用担心数据会丢失了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180301B0J70V00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券