前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch数据在线迁移方案

Elasticsearch数据在线迁移方案

原创
作者头像
岳涛
修改2023-08-31 19:07:15
7480
修改2023-08-31 19:07:15
举报
文章被收录于专栏:大数据生态大数据生态

说明

本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)

背景

在线迁移技术是基于腾讯云ES于2020年5月份发布的双网卡技术实现的一种迁移方案。因此,这里需要注意,要迁移的目的ES集群需要是在2020年5月后创建的才适用。

适用场景:适用于客户自建ES集群和云上的ES集群网络互通,且对业务可用性和稳定性要求较高的场景。

迁移原理:将腾讯云ES集群于客户自建ES集群进行融合,构建成一个更大的ES集群,然后通过设置集群的settings配置,将客户ES集群上的索引数据平滑迁移到腾讯云ES的各个节点上,最后再将客户的ES集群节点下线。从而实现一种平滑迁移不停服的效果。

迁移步骤

0)信息收集

该步骤用于确认自建集群是否支持在线融合迁移至腾讯云ES

[模板] 客户名称-自建ES信息

首先对客户需要迁移的集群做信息采集工作,其中最关键的为集群名称、版本、license、节点信息,我们会提供一个在线表格,并指导在线客户填写。

1) 购买集群(重要,重点确认!)

客户在腾讯云ES控制台购买ES集群,指定集群的配置名称为自建ES集群的名称(客户操作)

腾讯云ES控制台设置集群名称

需要特别注意的地方:

● 确认集群配置名(cluster.name)完全⼀致,见 0)购买集群(重要,指定集群的配置名称需要提前开白名单);

● 删除云上集群所有的以点开头的系统索引,避免融合之后出现冲突;

● 腾讯云ES版本需要⼤于等于客户自建ES集群的版本。例如客户ES版本是6.5.1,则云上的ES版本最好是6.8.2;

● 创建ES集群的VPC选择自建ES集群所在的VPC,如果自建机器非腾讯云CVM,则需要通过专线等产品打通网络环境;

● 腾讯云ES license版本需要和自建完全一致,例如自建基础版,云上也需要选购基础版;

● 确保自建ES集群没有开启security,如果开启则云上密码需保持一致;

● 不支持白金版集群的在线迁移;

● 确保客户自建ES集群没有安装腾讯云ES集群不支持的插件;

● 客户端需要关闭嗅探:Elasticsearch Service 通过客户端访问集群-快速入门-文档中心-腾讯云

不可对同一套云上集群做多次融合操作,如有多次融合的需求,除第一次融合外,后续融合操作需重新购买集群进行融合!!!

2) 锁定数据(客户操作)

设置客户自建ES集群的参数 cluster.routing.allocation.include

代码语言:javascript
复制
curl -H "Content-Type: application/json" -XPUT source_es_ip:9200/_cluster/settings -d '{
  "transient" : {
     "cluster.routing.allocation.include._name" : "用户节点名1, 用户节点名2..."
  }
}'

这一步建议由客户自己操作完成,里面只填写客户ES集群的数据节点信息,确保数据在融合后不立马进行数据均衡,防止有不可控的风险发生。

3) 集群融合(腾讯云后台操作)

设置腾讯云ES集群的参数:discovery.zen.ping.unicast.hosts

代码语言:javascript
复制
curl localhost:5100/cluster/update -d '{
    "cluster_name": "es_name",
    "operator": "daemonyue",
    "es_config": {
        "discovery.zen.ping.unicast.hosts": "[\"node1_ip:9300\", \"node2_ip:9300\",\"node3_ip:9300\", \"node4_ip:9300\"]"
    },
    "restart_type": "full_cluster_restart"
}'

追加客户ES集群的数据节点到腾讯云ES集群的配置文件中。这里调用的是基架的集群更新接口,每个地域的地址都不一样,这里的restart_type设置为full_cluster_restart,重启后方可实现集群融合,7.x版本的集群修改discovery.seed_hosts 参数,而不是discovery.zen.ping.unicast.hosts了。

4) 数据迁移(客户操作)

设置集群参数,将客户自建ES集群节点exclude掉

代码语言:javascript
复制
curl -H "Content-Type: application/json" -XPUT source_es_ip:9200/_cluster/settings -d '{
  "transient" : {
     "cluster.routing.allocation.include._name" : null,
    "cluster.routing.allocation.exclude._name" : "用户节点名1, 用户节点名2..."
  }
}'

通过上面的参数设置,就可以实现将客户集群上的数据在线迁移到腾讯云ES集群上来,注意这里的_name需是节点的名称。

5) 下线客户集群节点 (客户操作)

检查数据迁移完成后,修改自建集群所有节点的cluster.name,并停止进程,将客户自建ES集群下线。

比如:"cluster.name": "log_online" -> "cluster.name": "log_online_local"

注意:

自建节点下线需要滚动进行,且每个节点的下线间隔需要大于10s,否则会有失主的风险。

6) 元数据回滚(腾讯云后台操作)

修改集群参数discovery.zen.ping.unicast.hosts,将该参数的值设置回腾讯云ES集群的节点列表

代码语言:javascript
复制
curl localhost:5100/cluster/update -d '{
    "cluster_name": "es_name",
    "operator": "d",
    "es_config": {
        "discovery.zen.ping.unicast.hosts": "null"
    },
    "restart_type": "no_restart"
}'

这一步是将集群参数 discovery.zen.ping.unicast.hosts 重新设置回腾讯云ES集群的所有节点列表。注意这里的restart_type设置为no_restart,即只是修改配置文件,并不重启节点。在下次节点重启后会自动生效。

注意

在线融合方案的稳定性依赖专线的可靠性,融合期间需确保网络环境稳定。否则当网络出现故障,则可能会导致集群发生失主,集群将不可用,需要人为介入恢复。

总结

在线迁移 适用于客户对源ES集群的可用性和稳定性都特别高的场景。只要源ES集群和腾讯云ES集群能够网络互通,都可以选择在线迁移的方案,这种方案对源ES集群的可用性和稳定性没有任何影响,彻底做到平滑迁移业务不停服。这也是首选的迁移方案。

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 背景
  • 迁移步骤
    • 0)信息收集
      • 1) 购买集群(重要,重点确认!)
        • 2) 锁定数据(客户操作)
          • 3) 集群融合(腾讯云后台操作)
            • 4) 数据迁移(客户操作)
              • 5) 下线客户集群节点 (客户操作)
                • 6) 元数据回滚(腾讯云后台操作)
                • 注意
                • 总结
                相关产品与服务
                Elasticsearch Service
                腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档