该文章适用于将ES-A集群的数据完整迁移到ES-B集群。
场景:
1、ES-A集群已经运行已久,存在N多索引
需求:
将A集群上的索引及数据全量同步到B集群上
一、创建仓库及快照
1、修改配置文件(ES-A,所有节点都需修改,同时需要重启ES服务)
#添加
path.repo: [“/data/es/backup”]
#这里需要注意,如果三个节点在不同的服务器上,则需要挂载共享存储,否则在下一步注册存储库时会报错
2、注册快照存储库(ES-A,任意节点执行)
curl -XPUT “http://192.168.xxx.xxx:9200/_snapshot/my_backup” -H “Content-Type: application/json” -d ’
{
“type”: “fs”,
“settings”: {
“location”: “/data/es/backup/snapshot01”
}
}’
3、创建快照(ES-A,任意节点执行)
#全部索引
curl -XPUT "http://192.168.xxx.xxx:9200/_snapshot/my_backup/backup_all?wait_for_completion=true
#指定索引
curl -XPUT "http://192.168.xxx.xxx:9200/_snapshot/my_backup/test_index?wait_for_completion=true -H “Content-Type: application/json” -d ’
{
“indices”: “test_index”
}’
4、查看快照进度(ES-A,任意节点执行)
curl -XGET “http://192.168.16.35:9208/_snapshot/my_backup/backup_all/_status”|grep state
查看state的值
#started:正在同步
#success:成功
#failed:失败
同时也可以在服务器上查看刚刚创建的共享存储目录
二、迁移数据
将刚刚用于快照备份的共享存储挂载到B集群的各个节点下
三、创建仓库及恢复数据
1、修改配置文件(ES-B,所有节点都需修改,同时需要重启ES服务)
#添加
path.repo: [“/data/es/backup”]
#这里需要注意,目录路径可以和ES-A的不同
2、注册快照存储库(ES-B,任意节点执行)
curl -XPUT “http://192.168.xxx.xxx:9200/_snapshot/my_backup” -H “Content-Type: application/json” -d ’
{
“type”: “fs”,
“settings”: {
“location”: “/data/es/backup/snapshot01”
}
}’
#注意!!!最后的命名必须与ES-A相同snapshot01
3、恢复快照(ES-B,任意节点执行)对应三.3
#全部恢复
curl -XPOST "http://192.168.xxx.xxx:9200/_snapshot/my_backup/backup_all/_restore
#恢复指定索引
curl -XPOST “http://192.168.xxx.xxx:9200/_snapshot/my_backup/test_index/_restore”
{
“indices”: “test_index”
}
4、查看快照恢复进度(ES-B,任意节点执行)
curl -XGET “http://192.168.xxx.xxx:9200/_cat/recovery?v”
#所有索引都恢复到100%即完成
彩蛋
通过快照恢复数据时,如果索引本身存在则会报如下错误
意思就是说要先删除或关闭原索引。
需要注意的是,如果关闭了索引,会恢复成功,但是执行逻辑也是先删除原索引再恢复