ElasticSearch快照备份及恢复

时间:2023-03-10 06:36:39
ElasticSearch快照备份及恢复

工作步骤:

1:建立备份快照数据挂载点,即共享文件目录(Shared Filesystem);

2:建立快照仓储repository;

3:建立snapshot快照备份;

4:恢复snapshot快照数据;


1:建立数据挂载点

1)ES所有节点安装sshfs,可通过yum源安装,依赖epel;

2)安装sshfs后,规划共享目录挂载点,并确定目标挂载点,注意这里要为每个节点的共享目录分配读写权限,如不确定,直接chmod 777 -共享目录路径;

3)通过如下指令挂载共享目录至目标主机路径:

#sshfs root@10.200.XX.XXX:/data1/esdata /data1/backups -o allow_other

指令里的【用户名@IP地址:路径】为实际挂载节点路径及用户,后一个路径为本地节点挂载路径;

4)将ES每个节点上的相同路径均挂载至远端的同一地址,完毕后确认已将所有节点的备份目录挂载为同一目标主机的路径下;


2:建立快照仓储repository

1)通过es的api建立仓储,注意body内容的单引号别丢了否则会报400 bad request

#curl -XPUT http://10.200.XXX.XXX:9200/_snapshot/backup_38 -d

'{

    "type": "fs",

    "settings":

    {

      "compress": true,

      "location": "/data1/backups"    # 这里的路径就是第1步里建立的共享目录挂载路径

    }

  }'

执行后返回200则为成功建立;

2)通过API可获取刚才建立的repository:

  #curl http://10.200.XXX.XXX:9200/_snapshot/backup_38

正确返回repository信息则通过。

2016-12-5 补充:在创建仓储过程中可能会提示如下错误说repository不在repos:

ElasticSearch快照备份及恢复

需要在elasticsearch集群中每个节点的配置文件(/etc/elasticsearch/elasticsearch.yml)中加入如下配置项:

path.repo: ["/data1/backups"]

其中指定的repo路径为节点本地挂载点的路径(指向远端共享目录)

ElasticSearch快照备份及恢复


3:建立snapshot快照备份

1)通过ES的API建立snapshot:

#curl -XPUT http://10.200.XXX.XXX:9200/_snapshot/backup_38/snapshot_20160628 -d

'{
  "indices": "ld.*.stats,ld.log-*",

  "ignore_unavailable": true,

  "include_global_state": false

}'

这里的参数分别指定需要快照的index(支持*通配符),遇到不可用的index的策略(ignore),以及选择不备份公共信息。

2)验证快照

#curl http://10.200.XXX.XXX:9200/_snapshot/backup_38/snapshot_20160628 | python -mjson.tool

正常情况下将返回刚才建立的快照信息。


4:恢复snapshot快照数据

1)拷贝备份文件

文件服务器(及所有ES节点挂载的文件系统指向的地址)挂载目录下的内容都属于需要备份的内容,如下图所示:

ElasticSearch快照备份及恢复

2)建立共享文件系统

  • 在拷贝了备份快照信息的主机上以相同的方式建立共享系统,步骤与之前相同;

3)建立快照仓储repository

  • 以同样的方式建立仓储repository;

4)数据恢复

以下列的API来恢复数据:

curl -XPOST http://192.168.0.1:9200/snapshot/backup_38/snapshot_20160628/_restore

也可以通过加入如下参数来定制恢复:

{
"indices": "index1",
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}

5)查看数据恢复进度

curl -XGET http://192.168.0.1:9200/snapshot/backup_38/snapshot_20160628/status

注:

数据恢复后,需要注意数据恢复的目标ES集群的插件情况(如IK分词插件)需要与原集群保持一致,恢复后通过关闭索引(head插件直接可以关闭)并启用,即可重新建立恢复后的索引。