本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)。
在线迁移技术是基于腾讯云ES于2020年5月份发布的双网卡技术实现的一种迁移方案。因此,这里需要注意,要迁移的目的ES集群需要是在2020年5月后创建的才适用。
适用场景:适用于客户自建ES集群和云上的ES集群网络互通,且对业务可用性和稳定性要求较高的场景。
迁移原理:将腾讯云ES集群于客户自建ES集群进行融合,构建成一个更大的ES集群,然后通过设置集群的settings配置,将客户ES集群上的索引数据平滑迁移到腾讯云ES的各个节点上,最后再将客户的ES集群节点下线。从而实现一种平滑迁移不停服的效果。
该步骤用于确认自建集群是否支持在线融合迁移至腾讯云ES
首先对客户需要迁移的集群做信息采集工作,其中最关键的为集群名称、版本、license、节点信息,我们会提供一个在线表格,并指导在线客户填写。
客户在腾讯云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 通过客户端访问集群-快速入门-文档中心-腾讯云;
● 不可对同一套云上集群做多次融合操作,如有多次融合的需求,除第一次融合外,后续融合操作需重新购买集群进行融合!!!
设置客户自建ES集群的参数 cluster.routing.allocation.include
curl -H "Content-Type: application/json" -XPUT source_es_ip:9200/_cluster/settings -d '{
"transient" : {
"cluster.routing.allocation.include._name" : "用户节点名1, 用户节点名2..."
}
}'
这一步建议由客户自己操作完成,里面只填写客户ES集群的数据节点信息,确保数据在融合后不立马进行数据均衡,防止有不可控的风险发生。
设置腾讯云ES集群的参数:discovery.zen.ping.unicast.hosts
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了。
设置集群参数,将客户自建ES集群节点exclude掉
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需是节点的名称。
检查数据迁移完成后,修改自建集群所有节点的cluster.name,并停止进程,将客户自建ES集群下线。
比如:"cluster.name": "log_online" -> "cluster.name": "log_online_local"
注意:
自建节点下线需要滚动进行,且每个节点的下线间隔需要大于10s,否则会有失主的风险。
修改集群参数discovery.zen.ping.unicast.hosts,将该参数的值设置回腾讯云ES集群的节点列表
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 删除。