早先时候我们讲了关于HDFS的备份方法,作为Hadoop在搜索层级的演进应用,Elasticsearch可以接入多种异构的数据平台(结构化/非结构化,流式/批量的),加之有丰富的管理工具,在很短时间内迅速获得了很多有EDW需求的公司的青睐。
在Elasticsearch的架构中,由Logstash负责采集客户端数据(类似于Hadoop生态系统中的Flume,当然Flume和Hadoop也可以直接作为Elasticsearch的数据源),再由Elasticsearch做即时分析与处理,最后交由基于现代化HTML5的web应用-Kibana将分析结果作可视化展现。
说到Elasticsearch的用户,刚被微软以75亿美元天价收购的Github就是一个典型案例,此外还有Facebook、WordPress、stackoverflow等超大型社交类应用及社区。Elasticsearch不仅给这些用户提供了冗余、可扩展的数据系统,并且通过实时索引,有效地将原先长达几十分钟的搜索体验缩短至秒级。通过轻型的Elasticsearch-Hadoop库可以与现有的Hadoop平台无缝对接,并且可以实现数据的双向传输。
Elasticsearch的安装也很方便,我们知道在Mac系统上brew是用来安装程序的指令,在安装完Java(运行“brew cask install java”指令)之后,通过brew install <路径>/<安装文件>即可完成对Elasticsearch的安装;装完之后通过brew info elasticsearch可以检查版本及配置信息。
既然要备份Elasticsearch,我们先来创建一些数据,比如在索引nameindex的组names下的数据名id1下创建以下数据:
curl -XPOST 'localhost:9200/nameindex/names/id1' -d '
{
"name":"Johnnie"
"email_address":"johnnie.li@eoitek.com"
}
当然Elasticsearch有自己的管理接口可以通过Web界面操作,只需填入数据路径和数据内容即可。
填完之后通过GET语句可以查询(命令行:curl -XGET)
这条记录是建立在数据集id1下的,我们也可以建立没有ID的记录。
这个时候系统会自动为其创建ID。
在每个Elasticsearch的配置文件(/config/elasticsearch.yml)中都有定义repository的路径。
Elasticsearch的备份方式与Hadoop类似,也是采用快照(Snapshot)形式,你可以单独为某个索引、多个索引或整个集群做快照。鉴于我们刚刚在索引nameindex下面创建了些记录,那我们就来备份这条索引,第一步先决定备份参数:
用GET方式检查下备份配置是否创建完成。
以上是ES备份的逻辑路径,根据elasticsearch.yml里的设置,我们已经在path.repo的路径下创建了同名的物理目录。
接下去就是执行备份,同样使用PUT方式
备份完成之后,在逻辑路径下会记录备份的状态。可以用curl localhost:9200/_snapshot/nameindexbackup/10jul2018查看。同时,我们在物理路径下也看到了元数据及快照文件已经生成。
在数据恢复之前,我们先把nameindex下的数据都删除。
检查发现目标逻辑路径下已经没有任何数据了。
恢复的命令是curl -XPOST localhost:9200/_snapshot/nameindexbackup/10jul2018/_restore。检查后发现我们的数据已经恢复了。