可选方式
为了将集群的多个索引迁移到另外一个集群,经调研可以使用多种方式:
- 使用
snapshot方式,将索引数据快照到文件系统上(hdfs、本地+NAS),在另外一个集群上可以直接进行恢复。需要配置path.repo动态配置,指定文件目录 - 使用
Reindex方式, 需要两个集群进行配置互信,并重启
原集群数据备份
- 在原集群中所有节点的
elasticsearch.yml文件中增加path.repo配置

- 在所有ES节点创建
path.repo对应的文件夹。 - 安装nfs服务
- 选择其中一个节点安装nfs服务(注意,安装nfs服务的节点需要有足够的磁盘剩余,至少需要备份索引的数据量的1.5倍)
yum install -y nfs-utils
- 修改/etc/exports文件,将其余所有节点的信息按照下面的格式添加进来。

- 修改path.repo文件夹权限
chmod -R 777 /data/lyk
- 重启nfs服务
service nfs restart
- 在其余的每个节点下面执行如下命令将目录挂载到nfs服务上
mount -t nfs 10.66.67.84:/data/lyk /data/lyk/
执行df -h 看到如下信息表示挂载成功 
- 在安装nfs服务的节点执行
exportfs,确认其它节点是否挂载成功

- 重启ES服务
创建名称为
es_backup的仓库,注意location要与path.repo保持一致curl -XPUT -H "Content-Type: application/json" kde-test1:9200/_snapshot/es_backup?pretty -d '{"type":"fs", "settings":{"location":"/data/lyk", "compress": true}}'

备份数据到
snapshot_2,其中标红的为要备份的索引名称,以逗号隔开。命令行返回的时候表明备份完成。curl -XPUT -H "Content-Type: application/json" kde-test1:9200/_snapshot/es_backup/snapshot_2?wait_for_completion=true -d '{"indices": "blogs","ignore_unavailable": true,"include_global_state": false}'
二、目标集群数据恢复
- 在目标集群执行第一步的1-4步的操作
在目标集群创建仓库,名字与原集群相同
curl -XPUT -H "Content-Type: application/json" kde-offline1:9200/_snapshot/es_backup?pretty -d '{"type":"fs", "settings":{"location":"/data/lyk", "compress": true}}'
将原集群
path.repo文件夹下所有的文件拷贝到目标集群path.repo文件夹下。从
snapshot_2备份文件恢复数据curl -XPOST -H "Content-Type: application/json" kde-test1:9200/_snapshot/es_backup/snapshot_2/_restore
查看数据恢复状态,如果看到state为success表明恢复成功
curl kde-offline1:9200/_snapshot/es_backup/snapshot_2/_status?pretty

