CK集群迁云实施方案

云掣YunChe3周前客户案例58



背景与需求




某企业大数据业务需迁至阿里云环境,其中涉及多套CK集群,业务要求停机切换时间尽可能短,需对数据进行增量迁移;


需迁移的业务,有多个CK集群,总共几百多张表,最大的表占用空间10T左右,另外源端建表不规范,目标端需统一调整表结构。




实施方案



01

迁移方法

利用remote函数远程复制表数据,借助脚本进行迁移,remote语句如下:



INSERT INTO $目标端库名.$目标端分布式表名 SELECT * FROM remote('$源端CK节点的IP:$端口,......,$源端CK节点的IP:$端口',$源端库名,$源端本地表名,'$源端用户名','$源端密码') WHERE $where条件

02

脚本逻辑

涉及多个脚本,包括表结构同步、数据迁移、对比校验、覆盖重迁;


数据迁移的脚本会读取表的分区信息,依次迁移各分区数据至目标端,每当remote命令迁移一个分区,脚本执行时就会确认remote命令执行的数量,令数量小于指定值来实现并发,所以迁移时可灵活调整并发提高迁移速率;


迁移后会用校验脚本进行对比校验,确认迁移脚本输出是否有异常,校验时先进行整表校验,整表数据量不一致时再按分区校验;


校验后对于数据不一致的表,需确认好不一致的分区,用覆盖脚本对不一致分区进行针对性覆盖重迁,重迁后再次校验。


03

如何实现增量迁移

全量迁移结束后,业务在源端、目标端配置了双写任务,理论上双写的数据在源、目标端应该是一致的,所以只需确保双写前的历史数据一致即可。


但由于配置的双写任务在目标端执行时有时会失败,导致双写后源与目标的数据并不一致,所以需对双写后的数据进行校验,如果数据不一致就覆盖重迁。


双写是按日期的分区增量进行的,待新增的分区双写结束后,才可对此分区进行校验、覆盖重迁;另外每张表双写的新增分区的数量不同,有些表会对近5天的分区数据都进行双写,所以需要根据业务需求灵活配置校验重迁任务;


双写后数据不一致导致后期增量迁移的工作量巨大,理论上业务不双写,用脚本对表的新分区进行迁移校验即可满足增量需求。


04

相关问题及处理方法

1、表结构调整


如源端本地表引擎是MergeTree的,目标端需统一替换为ReplicatedMergeTree;如源端本地表引擎是ReplacingMergeTree的,目标端需统一替换为ReplicatedReplacingMergeTree。表结构同步脚本,会对引擎进行识别替换,另外数据迁移前需对表结构进行核实确认;


源端部分分布式表没有拆分规则,在目标端需统一用rand()的拆分规则;


源端部分表有配置TTL生命周期,目标端也需配置;


另外迁移过程中,源端会对表结构进行调整或者新增表,此时目标端也需做相同的调整。

2、源端表使用不规范问题


源端有些表使用不规范,具体表现包括有些表无分区、有些表只在单节点存在、只有本地表没有分布式表、本地表与分布式表结构不一致等;


针对以上问题,源端表可以做调整的,就进行规范调整令其适配迁移脚本;源端表无法调整的,则修改迁移脚本令其适配特殊情况。

3、本地表数据分布问题


源端部分本地表的数据,不是按分布式表的拆分规则分布的,而是直接按业务的某种需求写入本地表;


        比如业务会将5月份的数据直接存放在节点1的本地表1中,6月份的数据直接存放在节点2的本地表2中,数据不会插入分布式表并按照分布式表的拆分规则分布;


业务的需求是确保数据迁移后,目标端本地表的数据分布与源端相同。


处理办法:目标端创建rand()拆分规则的分布式bak表和本地bak表,再创建与源端结构相同的分布式表和本地表;将源端数据先迁至目标端bak表中,业务再将目标端bak表的数据reshard重写至目标端非bak本地表中,最终结果是目标端各本地表的数据分布与源端各本地表的数据分布相同。


4、ReplacingMergeTree引擎的表数据校验问题


源端少部分表用的是ReplacingMergeTree引擎,数据只在相同节点唯一,即整体的分布式表可能还存在数据重复的问题。另外迁移过程中源端后台可能进行optimize,导致迁移后源、目标端分布式表的count结果不完全相同等情况,所以数据验证时需验证表的唯一值是否一致。


5、副本问题


源端部分集群是多个副本,而副本数据相同,只所以需从其中1个副本的本地表中读取数据并写入目标端即可,避免数据重复。

6、大表问题


源端最大的表占用空间10T左右,表按日期分区,即使只迁1个分区数据,量也很大且耗时很长,大表整体迁移速度缓慢;


将大表在分区的基础上,用其它列将每个分区的数据进一步拆成多份,对小份数据并发迁移提高迁移速度。

7、覆盖重迁问题


覆盖重迁需先删除目标端数据不一致的分区再进行重迁,Clickouse的delete是将不需删除的数据重写,待下一次后台合并时才能物理删除,消耗很大,需用drop partiton命令删除分区。

8、并发问题


迁移时需设置一定并发提高迁移速度,但并发过大会影响源端业务的正常使用;并发动态调整可控,白天并发低、晚上并发高,非工作日并发会更加高。




迁移结果



确保CK集群数据按客户需求全量+增量迁至云上环境,业务停机切换时间较短,迁移后数据一致。


相关文章

混合云网络建设

混合云网络建设

项目背景    云计算经过十余年突飞猛进的发展,已经迎来新的黄金十年,进入普惠发展期。据相关机构调研,随着产业结构持续优化,服务部署形态趋于多元化,融合了私有云安全性和公有云开放性...

统一融合,云掣助力知名烟草集团打通互联网营销平台数据脉络

统一融合,云掣助力知名烟草集团打通互联网营销平台数据脉络

某烟草集团,集卷烟生产销售、烟草物资配套供应、科研以及多元化经营等为一体,在卷烟产销总量、全国市场覆盖率、国际市场销量等多项指标上均位居行业前列。该集团基于微信服务号运营,策划了以烟包二维码为载体,通...

数据库高可用架构建设

数据库高可用架构建设

项目背景    某互联网+健康医疗整体解决方案提供商,通过构建线上实名认证卡管系统、虚拟账户结算管理系统、移动互联网平台、远程运维监控平台、预约挂号系统平台,并辅以线下排队及信息发...

图片

首先将腾讯云的ES集群全量快照备份至腾讯云COS中,待全量快照备份完成后,再使用阿里云的在线迁移服务功能,将腾讯云COS中的快照数据在线迁移至阿里云OSS。快照数据迁移完毕后,登录阿里云ES集群进行快照恢复操作即可,当所有的索引健康状态变为green,就表明快照恢复任务完成。
增量快照的备份恢复流程与全量快照的备份流程一致,区别仅在于,增量快照的备份恢复流程进行到最后一步快照恢复操作时,需要提前将阿里云ES集群中的索引状态修改为close,待快照数据全部恢复完成后,索引的健康状态会默认变为green。


 建设内容

Step1:环境准备


预先在阿里云购买可1:1安装的集群,即资源规格、集群插件与当前腾讯云ES集群一致的阿里云6.7.0版本ES集群,然后提前将腾讯云中全量的ES集群数据通过快照迁移的方式迁移到阿里云ES集群中。


Step2:代码验证


客户公司的研发人员对迁移后的集群数据进行灰度测试,包括客户端连接、写入、读取等功能的代码测试。


Step3:割接前的流程梳理确认

  1. 确定写入的链路,并读取业务方负责人信息;
  2. 准备好防止数据丢失和保障数据一致的预案;
  3. 明确回滚方案。

Step4:割接前的数据迁移

  1. 关闭阿里云ES集群的白名单,禁止研发测试的数据写入,保障集群环境单一可靠;
  2. 清空阿里云ES集群的脏数据、数据验证、历史快照的恢复和同步记录;
  3. 进行增量快照的恢复和同步,并保持验证,直至割接前;
  4. 如果第2步和第4步有重合的部分,为了防止数据污染,需要在阿里云ES集群中再进行一次历史数据清空和增全量恢复的动作。

Step5:割接开始

  1. 研发人员提前将配置文件的地址修改为阿里云ES集群连接内网的地址,并设置业务不上线生效;
  2. 关闭腾讯云ES集群的业务数据写入;
  3. 最后一次进行增量数据快照和恢复动作,将数据补齐;
  4. 开启阿里云ES集群的白名单;
  5. 设置切换配置生效,并进行上线动作,完成读写业务后,再切换到阿里云ES集群;
  6. 进行读写验证;
  7. 关闭腾讯云ES集群的白名单;
  8. 测试工程师进行回归测试

Step6:回滚

  1. 将阿里云ES集群的白名单关闭,停止写入数据;
  2. 恢复腾讯云ES集群的白名单,并将配置文件的地址改回腾讯云ES集群生效;
  3. 回滚方案生效,业务数据(kafka、mysql)重新消费写入腾讯云ES集群。



 知识拓展

 快照备份


ES集群基于快照的迁移方式
需通过 snapshot api 接口进行迁移,基本原理是从源ES集群创建索引快照,然后在目标ES集群中进行快照恢复。通过snapshot api方式进行数据迁移时,特别需要注意ES集群的版本,目标ES集群的主版本号要大于等于源ES集群的主版本号。
例如:6.x中的6为主版本号,那么此集群所创建的快照就不能在7.x版本的集群中恢复。
快照迁移支持索引数据的增量备份和恢复迁移
由于二次快照是在前一次快照的索引数据基础之上,再增加新数据的快照,包括了索引数据的增、删、改等新变动。那么在二次快照之后,新的ES集群实例恢复后,新数据与源ES集群实例数据将保持一致。
二次快照备份恢复的时长
由于二次快照的数据量低于首次快照,所以耗时会比首次快照备份的时间短。


 logstash迁移同步


logstash的版本
应与目标ES集群的主版本号相同。例如:目标ES集群为6.8.2版本,则logstash也需要使用6.8版本。
索引type的问题
不同版本的ES集群对索引type的约束也不同,所以在跨大版本迁移ES集群时,可能会出现因为索引type而导致目标集群写入失败等情况。这是因为logstash的增量数据同步基于时间字段,所以要求字段类型为@timetamp时,才能按照时间同步数据。若时间字段为long、text等非标准的类型,则无法按照时间同步数据。
硬件和网络配置要求
logstash对网络带宽和服务器CPU、内存、磁盘的要求较高,如果想实时同步大量数据,就必须提升硬件和网络配置。


 总结


此次迁云方案效率实现了业务停机时间的最小化,迅速响应了客户公司的需求,并确保了迁移前后数据的一致性。


从腾讯云到阿里云,ES集群跨云迁移技术原理及最佳实践

本文旨在通过一次腾讯云ES集群在线迁移至阿里云ES集群的成功客户案例,结合云掣在多次客户数据迁移过程中总结出的宝贵经验,与大家详细地分享快照迁移ES集群的技术原理和最佳实践,有助于满足各行业领域客户跨...

全面提升|支付企业系统上云实践

全面提升|支付企业系统上云实践

近年来,得益于中央政府一系列的扶持政策以及云计算、大数据和AI等技术在支付领域的深化应用,面向小微企业、个体工商户等群体的普惠支付有了极大的发展。 某支付机构基于创新科技和完善风控能力,聚焦...

案例分享|某医院数据上云性能优化

案例分享|某医院数据上云性能优化

01 前言 之前在和小伙伴在做技术分享的时候,分享了他们做的某医院数据上云方案。该医院因为数据延迟问题,病人无法及时看到检验报告。当时大致了解了一下这个案例的情况:客户的数据是存储...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。