ES备份快照的时候可以用NFS
或者HDFS
。NFS
有点麻烦,我们使用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'