[转载] Elasticsearch 跨集群数据迁移之在线迁移

一、 背景

在云上 PaaS 服务愈发成熟的大背景下,越来越多自建 Elasticsearch 的业务希望迁移到云上,享用云服务统一、高标准的服务体验的同时,降低运维成本。本方案旨在通过集群融合的方式帮助用户进行在线迁移,尽量降低迁移过程对业务的影响,同时尽可能提高迁移的自动化程度。

二、整体思路

假定用户原有集群为 A,迁移后新集群为 B。首先通过扩容的方式把集群 B 融合进集群 A;然后通过 ES的自动搬迁能力,把所有集群 A 的数据迁移到集群 B;最后用户下线集群 A 即可。

三、限制要求

使用该方案的限制条件如下:

  • 新旧集群网络必须互通,保证集群可以相互融合。
  • 新旧集群建议在同一地域,测试表明同地域的多可用区影响不大。

四、 集群融合步骤

首先假设迁移过程中涉及的集群信息如下:

  • 用户集群 :用户原有自建的集群,假定 cluster_name 为 es_A。

  • 新建集群 : 云上新建的集群,假定 cluster_name 为 es_B。

    具体迁移操作步骤如下:

  1. 融合前,对 新建集群 需要确认没有打开权限,如果有打开,需要关闭。

  2. 调用 cluster update 接口对 新建集群 进行集群升级,升级到 60403.20190426.eb1002e8,并更改集群名字。

curl localhost:5100/cluster/update -d '{
    "cluster_name": "es_B",
    "operator": "daniel",
    "version": "60403.20190426.eb1002e8",
    "es_config": {
        "cluster.name": "es_A"
    },
    "restart_type": "full_cluster_restart"
  1. 调用 用户集群 的 cluster/setting 接口 更新 cluster.routing.allocation.include ,里面只填入 用户集群 的节点名,确保数据不会先搬迁到 新建集群
curl -H "Content-Type: application/json" -XPUT 192.168.0.3:12345/_cluster/settings -d '{
  "transient" : {
     "cluster.routing.allocation.include._name" : "{用户节点名1, 用户节点名2...}"
  }
}'
  1. 新建集群 调用 cluster update 接口进行升级, 修改 discovery.zen.ping.unicast.hosts ,追加 用户集群的hosts,进行集群融合。
curl localhost:5100/cluster/update -d '{
    "cluster_name": "es_B",
    "operator": "daniel",
    "es_config": {
        "discovery.zen.ping.unicast.hosts": "[\"192.168.0.10:22345\", \"192.168.0.3:22345\",\"192.168.0.5:9300\", \"192.168.0.3:9300\", \"192.168.0.17:9300\"]"
    },
    "restart_type": "full_cluster_restart"
}'
  1. 对 融合后的大集群 调用 如下接口,将 之前的 include 清除,并 exclude 掉 用户集群 的节点, 将数据搬迁到 新建集群
curl -H "Content-Type: application/json" -XPUT 192.168.0.3:12345/_cluster/settings -d '{
  "transient" : {
     "cluster.routing.allocation.include._name" : null,
    "cluster.routing.allocation.exclude._name" : "{用户节点名1, 用户节点名2...}"
  }
}'
  1. 数据搬迁完成后,剔除 用户集群 的节点,下线用户集群。

  2. 新建集群 使用如下 oss 命令,修改新建集群的配置文件的 discovery.zen.ping.unicast.hosts 列表为新建集群,restart_type 为 no_restart,不需要重启。

curl localhost:5100/cluster/update -d '{
    "cluster_name": "es_B",
    "operator": "daniel",
    "es_config": {
        "discovery.zen.ping.unicast.hosts": "[\"192.168.0.10:22345\", \"192.168.0.3:22345\",\"192.168.0.5:9300\", \"192.168.0.3:9300\", \"192.168.0.17:9300\"]"
    },
    "restart_type": "no_restart"
}'

作者:老生姜
来源:腾讯云
原文链接:cloud.tencent.com/developer/articl...

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!