镜像备份

本节作者:李宏旭

大多数公司在使用 Elasticsearch 之前,都已经维护有一套 Hadoop 系统。因此,在实时数据慢慢变得冷却,不再被经常使用的时候,一个需求自然而然的就出现了:怎么把 Elasticsearch 索引数据快速转移到 HDFS 上,以解决 Elasticsearch 上的磁盘空间;而在我们需要的时候,又可以较快的从 HDFS 上把索引恢复回来继续使用呢?

Elasticsearch 为此提供了 snapshot 接口。通过这个接口,我们可以快速导入导出索引镜像到本地磁盘,网络磁盘,当然也包括 HDFS。

HDFS 插件安装配置

下载repository-hdfs插件,通过标准的 elasticsearch plugin 安装命令安装:

  1. bin/plugin install elasticsearch/elasticsearch-repository-hdfs/2.2.0

然后在 elasticsearch.yml 中增加以下配置:

  1. # repository 配置
  2. hdfs:
  3. uri:"hdfs://<host>:<port>"(默认port8020)
  4. #Hadoop file-system URI
  5. path:"some/path"
  6. #path with the file-system where data is stored/loaded
  7. conf.hdfs_config:"/hadoop/hadoop-2.5.2/etc/hadoop/hdfs-site.xml"
  8. conf.hadoop_config:"/hadoop/hadoop-2.5.2/etc/hadoop/core-site.xml"
  9. load_defaults:"true"
  10. #whether to load the default Hadoop configuration (default) or not
  11. compress:"false"
  12. # optional - whether to compress the metadata or not (default)
  13. chunk_size:"10mb"
  14. # optional - chunk size (disabled by default)
  15. # 禁用 jsm
  16. security.manager.enabled: false

默认情况下,Elasticsearch 为了安全考虑会在运行 JVM 的时候执行 JSM。出于 Hadoop 和 HDFS 客户端权限问题,所以需要禁用 JSM。将 elasticsearch.yml 中的 security.manager.enabled 设置为 false

将插件安装好,配置修改完毕后,需要重启 Elasticsearch 服务。没有重启节点插件可能会执行失败。

注意:Elasticsearch 集群的每个节点都要执行以上步骤!

Hadoop 配置

本节内容基于Hadoop版本:2.5.2,假定其配置文件目录:hadoop-2.5.2/etc/Hadoop。注意,安装hadoop集群需要建立主机互信,互信方法请自行查询,很简单。

相关配置文件如下:

mapred-site.xml.template

默认没有 mapred-site.xml 文件,复制 mapred-site.xml.template 一份,并把名字改为 mapred-site.xml,需要修改 3 处的 IP 为本机地址:

  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. <property>
  7. <name>mapreduce.jobtracker.http.address</name>
  8. <value>XX.XX.XX.XX:50030</value>
  9. </property>
  10. <property>
  11. <name>mapreduce.jobhistory.address</name>
  12. <value> XX.XX.XX.XX:10020</value>
  13. </property>
  14. <property>
  15. <name>mapreduce.jobhistory.webapp.address</name>
  16. <value> XX.XX.XX.XX:19888</value>
  17. </property>
  18. </configuration>

yarn-site.xml

需要修改5处的IP为本机地址:

  1. <configuration>
  2. <!-- Site specific YARN configuration properties -->
  3. <property>
  4. <name>yarn.nodemanager.aux-services</name>
  5. <value>mapreduce_shuffle</value>
  6. </property>
  7. <property>
  8. <name>yarn.resourcemanager.address</name>
  9. <value> XX.XX.XX.XX:8032</value>
  10. </property>
  11. <property>
  12. <name>yarn.resourcemanager.scheduler.address</name>
  13. <value> XX.XX.XX.XX:8030</value>
  14. </property>
  15. <property>
  16. <name>yarn.resourcemanager.resource-tracker.address</name>
  17. <value> XX.XX.XX.XX:8031</value>
  18. </property>
  19. <property>
  20. <name>yarn.resourcemanager.admin.address</name>
  21. <value> XX.XX.XX.XX:8033</value>
  22. </property>
  23. <property>
  24. <name>yarn.resourcemanager.webapp.address</name>
  25. <value> XX.XX.XX.XX:8088</value>
  26. </property>
  27. </configuration>

hadoop-env.sh

修改 jdk 路径和 jvm 内存配置,内存使用根据情况配置。

  1. export JAVA_HOME=/usr/java/jdk1.7.0_79
  2. export HADOOP_PORTMAP_OPTS="-Xmx512m $HADOOP_PORTMAP_OPTS"
  3. export HADOOP_CLIENT_OPTS="-Xmx512m $HADOOP_CLIENT_OPTS"

core-site.xml

临时目录及 hdfs 机器 IP 端口指定:



hadoop.tmp.dir
/soft/hadoop-2.5.2/tmp
Abase for other temporary directories.


fs.defaultFS
hdfs:// XX.XX.XX.XX:9000


io.file.buffer.size
4096

slaves

配置集群 IP 地址,集群有几个 IP 都要配置进去:

  1. 192.168.0.2
  2. 192.168.0.3
  3. 192.168.0.4

hdfs-site.xml

namenode 和 datenode 数据存放路径及别名:

  1. <configuration>
  2. <property>
  3. <name>dfs.namenode.name.dir</name>
  4. <value>/data01/hadoop/name</value>
  5. </property>
  6. <property>
  7. <name>dfs.datanode.data.dir</name>
  8. <value>/data01/hadoop/data</value>
  9. </property>
  10. <property>
  11. <name>dfs.replication</name>
  12. <value>1</value>
  13. </property>
  14. </configuration>

启动 Hadoop

格式化完成后也可使用 sbin/start-all.sh 启动,但有可能出现异常,建议按照顺序分开启动。

  1. 首先需要格式化存储:
    bin/Hadoop namenode –format
  2. 启动start-dfs.sh
    sbin/start-dfs.sh
  3. 启动start-yarn.sh
    sbin/start-yarn.sh

备份导出

创建快照仓库

  1. curl -XPUT 'localhost:9200/_snapshot/backup' -d
  2. '{
  3. "type":"hdfs",
  4. "settings":{
  5. "path":"/test/repo",
  6. "uri":"hdfs://<uri>:<port>"
  7. }
  8. }'

在这步可能会报错。通常是因为 hadoop 配置问题,更改好配置需要重新格式化文件系统:

在 hadoop 目录下执行 bin/hadoop namenode -format

索引快照

执行索引快照命令,可写入crontab,定时执行

  1. curl -XPUT 'http://localhost:9200/_snapshot/backup/snapshot_1' -d
  2. '{"indices":"indices_01,indices_02"}'

备份恢复

curl -XPOST "localhost:9200/_snapshot/backup/snapshot_1/_restore"

备份删除

curl -XDELETE "localhost:9200/_snapshot/backup/snapshot_1"

查看仓库信息

curl -XGET 'http://localhost:9200/_snapshot/backup?pretty'