专栏首页Elasticsearch实验室Elasticsearch跨集群数据迁移之在线迁移
原创

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"

3、调用 用户集群 的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...}"
  }
}'

4、对 新建集群 调用 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"
}'

5、对 融合后的大集群 调用 如下接口,将 之前的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...}"
  }
}'

6、数据搬迁完成后,剔除 用户集群 的节点,下线用户集群。

7、对 新建集群 使用如下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"
}'

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Elasticsearch跨集群数据迁移之在线迁移

          在云上PaaS服务愈发成熟的大背景下,越来越多自建Elasticsearch的业务希望迁移到云上,享用云服务统一、高标准的服务体验的同时,降低运维成...

    老生姜
  • Elasticsearch底层系列之Shard Allocation机制

        Elasticsearch由一些Elasticsearch进程(Node)组成集群,用来存放索引(Index)。为了存放数据量很大的索引,Elastic...

    老生姜
  • Elasticsearch底层系列之查询解析

           Elasticsearch(ES)可用于全文检索、日志分析、指标分析、APM等众多场景,而且搭建部署容易,后期弹性扩容、故障处理简单。ES在一定程...

    老生姜
  • Elasticsearch跨集群数据迁移之在线迁移

          在云上PaaS服务愈发成熟的大背景下,越来越多自建Elasticsearch的业务希望迁移到云上,享用云服务统一、高标准的服务体验的同时,降低运维成...

    老生姜
  • 谷歌发布全新搜索引擎Talk to books

    谷歌作为全球最大搜索引擎公司,发布过很多有趣项目。近日,谷歌又上线了一个名为“Semantic Experiences”(语义体验)的网站,包含了Talk to...

    刀刀老高
  • java字节码

      我们都知道Java字节码是JVM所使用的指令集。java字节码可以分为如下几类:

    良辰美景TT
  • DWR中传递外部数据给回调方法

    DWR中传递外部数据给回调方法(Passing extra data to callbacks)

    源哥
  • Java实现验证码功能实例

    Java如何实现验证码验证功能呢?日常生活中,验证码随处可见,他可以在一定程度上保护账号安全,那么他是怎么实现的呢?

    Java团长
  • 应用SAAS结构技术的开源药店管理系统-如何自己部署这种SOA/SAAS结构的应用

    一、药店系统内容说明 在前些时间,我们发布了一个基于AgileEAS.NET平台的SAAS结构的案例-AgileEAS.NET平台开发实例-药店系统-快速的SA...

    魏琼东
  • Linux下tomcat使用

    http://tomcat.apache.org/download-70.cgi这里下载

    用户5166556

扫码关注云+社区

领取腾讯云代金券