可选方式

为了将集群的多个索引迁移到另外一个集群,经调研可以使用多种方式:

  • 使用snapshot方式,将索引数据快照到文件系统上(hdfs本地+NAS),在另外一个集群上可以直接进行恢复。需要配置path.repo动态配置,指定文件目录
  • 使用Reindex方式, 需要两个集群进行配置互信,并重启

本次主要对 snapshot+nas方式进行测试

原集群数据备份

  1. 在原集群中所有节点的elasticsearch.yml文件中增加path.repo配置

ES集群迁移 - snapshot NAS - 图1

  1. 在所有ES节点创建path.repo对应的文件夹。
  2. 安装nfs服务
    1. 选择其中一个节点安装nfs服务(注意,安装nfs服务的节点需要有足够的磁盘剩余,至少需要备份索引的数据量的1.5倍)

yum install -y nfs-utils

  1. 修改/etc/exports文件,将其余所有节点的信息按照下面的格式添加进来。

ES集群迁移 - snapshot NAS - 图2

  1. 修改path.repo文件夹权限

chmod -R 777 /data/lyk

  1. 重启nfs服务

service nfs restart

  1. 在其余的每个节点下面执行如下命令将目录挂载到nfs服务上

mount -t nfs 10.66.67.84:/data/lyk /data/lyk/
执行df -h 看到如下信息表示挂载成功
ES集群迁移 - snapshot NAS - 图3

  1. 在安装nfs服务的节点执行exportfs,确认其它节点是否挂载成功

ES集群迁移 - snapshot NAS - 图4

  1. 重启ES服务
  2. 创建名称为es_backup的仓库,注意location要与path.repo保持一致

    1. curl -XPUT -H "Content-Type: application/json" kde-test1:9200/_snapshot/es_backup?pretty -d '{"type":"fs", "settings":{"location":"/data/lyk", "compress": true}}'

    ES集群迁移 - snapshot NAS - 图5

  3. 备份数据到snapshot_2,其中标红的为要备份的索引名称,以逗号隔开。命令行返回的时候表明备份完成。

    1. curl -XPUT -H "Content-Type: application/json" kde-test1:9200/_snapshot/es_backup/snapshot_2?wait_for_completion=true -d '{
    2. "indices": "blogs",
    3. "ignore_unavailable": true,
    4. "include_global_state": false
    5. }'

二、目标集群数据恢复

  1. 在目标集群执行第一步的1-4步的操作
  2. 在目标集群创建仓库,名字与原集群相同

    1. curl -XPUT -H "Content-Type: application/json" kde-offline1:9200/_snapshot/es_backup?pretty -d '{"type":"fs", "settings":{"location":"/data/lyk", "compress": true}}'
  3. 将原集群path.repo文件夹下所有的文件拷贝到目标集群path.repo文件夹下。

  4. snapshot_2备份文件恢复数据

    1. curl -XPOST -H "Content-Type: application/json" kde-test1:9200/_snapshot/es_backup/snapshot_2/_restore
  5. 查看数据恢复状态,如果看到state为success表明恢复成功

    1. curl kde-offline1:9200/_snapshot/es_backup/snapshot_2/_status?pretty

ES集群迁移 - snapshot NAS - 图6