Redis 和 tdsql 数据异地同步 (迁移) 案例
Redis 篇
日常听到的 Redis 有两个概念,支持 Redis 协议的 ckv 和腾讯云 Redis。ckv+是腾讯自主研发的 NoSQL 系统,上云之前的主要 key-value 存储选型。但是目前已经不在云上售卖了。腾讯云上售卖的都是腾讯云 Redis。广州集群的 key-value 是使用的是 ckv+,而北京集群使用的是腾讯云 Redis。
从 ckv+到腾讯云 Redis 的直接数据迁移无法通过简单的工具完成,腾讯云 Redis 实例之间可以通过 DTS(数据迁移服务)迁移(https://cloud.tencent.com/document/product/571/13748)。
数据迁移服务 DTS 是腾讯云提供的不同数据存储实例之前的统一迁移能力。从页面上的类型来看,提供以下类型存储作为迁入源,还是挺丰富的。并且在迁入实例类型中看到了 TDSQL 的身影,感觉有戏。 回到 Redis 的迁移问题上来,确定 ckv+无法迁移到 Redis 之后,剩下的路只有 rdb 文件导入了。那么接下来的第一个问题是怎么拿到 ckv+的 rdb 文件呢?http://redis.oa.com 的控制台上是没有 rdb 下载链接的。腾讯云 Redis 就有。
https://iwiki.woa.com/pages/viewpage.action?pageId=690861706 ckv+的 cos 冷备获取方法。这里要注意把文档看完,cos 下载得到的是 cdb 的格式,需要使用文档附件的 redis-dump-tool 进行 rdb 的格式转换。
TDSQL 篇 Redis 数据的迁移虽然没有工具,但是有详细的冷备迁移策略。再加上之前 DTS 服务中好像有 TDSQL 自动迁移的可能。这文章就要结束啦。https://cloud.tencent.com/document/product/571/53375,拿上参考文档就出发。等等,这里文档是 Mysql 版本的。
首先按照一贯操作,业务方帮我们申请了资源。然后我打开 DTS 页面,填好对应的信息,测试连接通过,直接下一步。这里略过了表结构对齐,账户权限创建等等。这些可以按照上述文档的说明操作。然后我们遇到了第一个错误:
文档中提过要检查 lower_case_table 要一致。问问 helper 能不能设置然后重启。然后 helper 同学说搞不了,因为 tdsql shard 实例比较特殊,只能人肉操作。很容易有坑。行,我让业务方同学重新申请一个,毕竟是我没看文档的锅。然后我又准备好了,觉得自己行了,各种检查终于通过了,然后,然后是这样的
lush Table 这个作为 Mysql 的操作之一,有兴趣的同学可以参考 https://blog.csdn.net/qingsong3333/article/details/77170864。可以简单理解为全库锁表。于是乎,再次请教 helper 同学,helper 同学说 TDSQL shard 类型的实例搞不了这个。呃…那我干了个啥???
好吧,DTS 的路堵死了。在和 helper 同学的一番努力下,找到了 TDSQL sharding 多源同步方案。可以的是只支持同地域实例的同步。还有一种可行方法就是为广州集群的 TDSQL 创建一个北京的灾备集群。按照 helper 同学的说法,低负载时能够实现准实时同步。但是此时北京集群是个只读集群,不符合北京集群也接入写流量的想法。暂时放弃。
兜兜转转又是最原始的 sql 文件导入方法,helper 同学很贴心的送上了文档 https://cloud.tencent.com/document/product/557/47549,这次我仔细看了,dump 阶段没有任何问题。然后到了导入阶段,死活搞不定。最后和 helper 同学确认这文档后半段是错误的,要使用 mysql source sql 文件的方法导入。
弄完 Redis 和 TDSQL 的迁移后,最大的问题就是新的集群数据和旧集群是割裂开的。是两个没有任何关联的集群。不能实现用户从旧集群无缝切换到新集群的目的。在参考了常见的高可用部署方案后,发现异地双活可能是我们能够采用的方案。在和 helper 同学确认之后发现 redis 和 tdsql sharding 都做不了双向同步。Tdsql mysql 版本 https://cloud.tencent.com/document/product/571/59386能够通过 DTS 支持。所以当前这还只是个愿望,希望将来在业务需要时能够用上。
评论