ElasticSearch数据备份与恢复

ES备份快照的时候可以用NFS或者HDFSNFS有点麻烦,我们使用HDFS

1.安装hdfs插件(如果已安装,则忽略这一步):

bin/elasticsearch-plugin install repository-hdfs

注意下载后会提示是否安装,一定要输入 y,否则视为取消安装。 安装完之后要重启ES集群.

2.源集群创建仓库:

curl -XPUT '192.168.40.11:9200/_snapshot/my_hdfs_repository?pretty' -H 'Content-Type: application/json' -d'
{
  "type": "hdfs",
  "settings": {
    "uri": "hdfs://192.168.40.60:8020/",
    "path": "elasticsearch/repositories/my_hdfs_repository",
    "conf.dfs.client.read.shortcircuit": "false"
  }
}
'

注意源集群的IP和hdfs的IP不要写错了

这里conf.dfs.client.read.shortcircuit如果设置为true,那么hdfs里需要配置一些额外的东西,我试了没成功。设置为true能减少通信次数,加快速度,如果您和我一样不想折腾,还是建议设置为false。

3.查看源集群创建好的仓库:

curl -XGET '192.168.40.11:9200/_snapshot/my_hdfs_repository?pretty'

4.备份所有索引:(这一步非常慢)

curl -XPUT '192.168.40.11:9200/_snapshot/my_hdfs_repository/snapshot_20171215?wait_for_completion=false&pretty'

注意:

wait_for_completion=true会一直等待备份结束。
wait_for_completion=false会立即返回,备份在后台进行,可以使用下面的api查看备份的进度:
curl -XGET '192.168.40.11:9200/_snapshot/my_hdfs_repository/snapshot_20171215/_status?pretty'

默认情况下,会将ES集群中所有打开的或者启动索引都备份一遍。如果不想备份所有的索引,可以加参数,详情见官方文档 ES备份和恢复

我使用master这个用户操作的,快照备份在hdfs的这个目录下,可以查看一下:
hdfs dfs -ls /user/master/elasticsearch/repositories/my_hdfs_repository

5.在目标集群里恢复快照:

5.1目标集群注册仓库:

curl -XPUT '192.168.40.15:9200/_snapshot/my_hdfs_repository?pretty' -H 'Content-Type: application/json' -d'
{
  "type": "hdfs",
  "settings": {
    "uri": "hdfs://192.168.40.60:8020/",
    "path": "/user/master/elasticsearch/repositories/my_hdfs_repository",
    "conf.dfs.client.read.shortcircuit": "false"
  }
}
'

注意目标集群的IP,hdfs的IP,hdfs的路径都不要写错了

5.2目标集群恢复快照:

curl -XPOST '192.168.40.15:9200/_snapshot/my_hdfs_repository/snapshot_20171215/_restore?pretty' -H 'Content-Type: application/json' -d'
{
  "indices": "janusgraph_vertices",
  "index_settings": {
    "index.number_of_replicas": 1
  },
  "ignore_index_settings": [
    "index.refresh_interval"
  ]
}
'

注意:如果恢复的时候报这个错:cannot restore index [janusgraph_vertices] because it's open ...
说明目标集群里已经有这个索引了,要把这个索引删掉,然后再恢复,因为快照里已经有schema信息了:

curl -XDELETE '192.168.40.15:9200/janusgraph_vertices?pretty'

注意恢复快照的时候分片的数量是不能改变的(要想改变分片数量只能re-index)。但是副本的数量是可以重新指定的(index.number_of_replicas )。还有其他的一些参数也是可以重新指定的。

咱们的snapshot_20171215备份的是所有索引, 这里的indices可以写多个索引的名字,逗号隔开。indices指定的索引,其参数会被覆写。 indices没有指定的索引,其参数跟以前保持一致。因为备份的时候,索引的配置参数和schema也一并备份了。

5.3查看目标集群快照恢复的进度:

在ES head插件上看:

红色状态表示ES正在恢复主分片, 黄色状态表示主分片已经恢复完成,正在进行创建副本的操作,绿色状态表示所有的主分片和副本都恢复完成。

如果不放心还可以用du -sh ./data 看一下文件夹的容量有没有增加。

注意刚恢复完不要急着查询,这时候查询会报错误,要等一会儿再查询!恢复的过程中也不要查询数据!

5.4删除以前的快照(如果磁盘空间紧张的话,建议删除,这一步不是必需的)

curl -XDELETE '192.168.40.11:9200/_snapshot/my_hdfs_repository/snapshot_20171215?pretty'

上一篇:cassandra数据备份与迁移


下一篇:正确新建maven工程2