Redis和tdsql数据异地同步(迁移)案例

Redis篇

日常听到的Redis有两个概念,支持Redis协议的ckv和腾讯云Redis。ckv+是腾讯自主研发的NoSQL系统,上云之前的主要key-value存储选型。但是目前已经不在云上售卖了。腾讯云上售卖的都是腾讯云Redis。广州集群的key-value是使用的是ckv+,而北京集群使用的是腾讯云Redis。

从ckv+到腾讯云Redis的直接数据迁移无法通过简单的工具完成,腾讯云Redis实例之间可以通过DTS(数据迁移服务)迁移(https://cloud.tencent.com/doc...)。

数据迁移服务DTS是腾讯云提供的不同数据存储实例之前的统一迁移能力。从页面上的类型来看,提供以下类型存储作为迁入源,还是挺丰富的。并且在迁入实例类型中看到了TDSQL的身影,感觉有戏。 回到Redis的迁移问题上来,确定ckv+无法迁移到Redis之后,剩下的路只有rdb文件导入了。那么接下来的第一个问题是怎么拿到ckv+的rdb文件呢?http://redis.oa.com 的控制台上是没有rdb下载链接的。腾讯云Redis就有。

https://iwiki.woa.com/pages/v... ckv+的cos冷备获取方法。这里要注意把文档看完,cos下载得到的是cdb的格式,需要使用文档附件的redis-dump-tool进行rdb的格式转换。

TDSQL篇
Redis数据的迁移虽然没有工具,但是有详细的冷备迁移策略。再加上之前DTS服务中好像有TDSQL自动迁移的可能。这文章就要结束啦。https://cloud.tencent.com/doc...
拿上参考文档就出发。等等,这里文档是Mysql版本的。

首先按照一贯操作,业务方帮我们申请了资源。然后我打开DTS页面,填好对应的信息,测试连接通过,直接下一步。这里略过了表结构对齐,账户权限创建等等。这些可以按照上述文档的说明操作。然后我们遇到了第一个错误:
Redis和tdsql数据异地同步(迁移)案例_第1张图片

文档中提过要检查lower_case_table要一致。问问helper能不能设置然后重启。然后helper同学说搞不了,因为tdsql shard实例比较特殊,只能人肉操作。很容易有坑。行,我让业务方同学重新申请一个,毕竟是我没看文档的锅。然后我又准备好了,觉得自己行了,各种检查终于通过了,然后,然后是这样的
Redis和tdsql数据异地同步(迁移)案例_第2张图片

lush Table这个作为Mysql的操作之一,有兴趣的同学可以参考 https://blog.csdn.net/qingson...
可以简单理解为全库锁表。于是乎,再次请教helper同学,helper同学说TDSQL shard类型的实例搞不了这个。呃…那我干了个啥???

好吧,DTS的路堵死了。在和helper同学的一番努力下,找到了TDSQL sharding多源同步方案。可以的是只支持同地域实例的同步。还有一种可行方法就是为广州集群的TDSQL创建一个北京的灾备集群。按照helper同学的说法,低负载时能够实现准实时同步。但是此时北京集群是个只读集群,不符合北京集群也接入写流量的想法。暂时放弃。

兜兜转转又是最原始的sql文件导入方法,helper同学很贴心的送上了文档 https://cloud.tencent.com/doc...
这次我仔细看了,dump阶段没有任何问题。然后到了导入阶段,死活搞不定。最后和helper同学确认这文档后半段是错误的,要使用mysql source sql文件的方法导入。

弄完Redis和TDSQL的迁移后,最大的问题就是新的集群数据和旧集群是割裂开的。是两个没有任何关联的集群。不能实现用户从旧集群无缝切换到新集群的目的。在参考了常见的高可用部署方案后,发现异地双活可能是我们能够采用的方案。在和helper同学确认之后发现redis和tdsql sharding都做不了双向同步。Tdsql mysql版本 https://cloud.tencent.com/doc...
能够通过DTS支持。所以当前这还只是个愿望,希望将来在业务需要时能够用上。

你可能感兴趣的