浅谈数据库同步和迁移
从广义来说,迁移应该算是同步的一种模式。同步侧重于增量,而迁移侧重于全量。迁移通常说的是数据库的搬迁,将源数据库搬迁到目的数据库,搬迁之后目的数据库代替源数据库继续提供服务,源数据库可以选择下线或者继续提供服务。 迁移有多种场景,比如:同种数据库下异构模式迁移。例如:Redis 的主从版迁移到集群版;可以是数据库的升级迁移,比如:MongoDB 从 3.0 升级到 4.0;也可以是上云迁移,比如:云下的数据库迁移到云上,或者云上的迁移到云下等等。 迁移的同时,源数据库可写可不写,不写的话稍微简单一些。迁移往往不需要迁移增量,只需要做全量迁移即可,但这通常需要业务停写,很多业务难以接受。可写的话比较符合大部分业务场景,但对迁移的链路就需要有个全量+增量迁移的能力。等迁移完毕,用户可以对迁移后的数据进行校验,发现没问题了,等待一个业务时间点进行一次闪断切流,将流量分发到目的端,数据就完成了迁移,源数据库就可以下线了。 上述我提到了,迁移可以用于云下到云上,云上到云下这种混合云场景的迁移。但现在对于很多云厂商来说,从云上到云下的迁移可能比云下到云上的迁移困难一些,因为云上到云下的同步需要能够从云上拉取数据。对于一些数据库来说,这些拉取的权限很可能没有开放。例如:Redis 的Sync 迁移,需要源端开放 Sync/Psync 权限,而很多云厂商出于安全角度考虑是不支持的。这就对迁移工具提出了另一个挑战,而应对这个挑战的方式要么就是云厂商支持这种模式,要么就是换一种其他迁移方式。对于阿里云来说,已经开放了用户的复制权限,使得用户可以通过 Sync/Psync 进行数据的拉取。另外,RedisShake 本身也支持了其他绕过 Sync/Psync 的同步迁移方式,后续我都会介绍。 3. MongoShake & RedisShake同步迁移工具 阿里云开源了 MongoShake 和 RedisShake,可以用于 MongoDB 和 Redis 的同步和迁移,进一步实现用户对灾备和多活的需求。 3.1 MongoShake MongoShake 的同步是基于 Oplog 实现的,v1.5 版本开始支持全量同步。其内部具体实现细节可以参考我在云栖社区上写的文章,本小节主要从功能和应用场景来进行介绍。 项目地址:http://t.cn/AiTChwoV 首先介绍一下主要的功能:
下面来简单列举一下,有了这些功能,我们可以做什么?也就是说应用场景有哪些?
以上只是简单列举了几种应用场景,如果你有不同的玩法或者不同的业务需求,也欢迎跟我联系,MongoShake 产品还在持续迭代更新中,后续还会有很多有用且好玩的特性会进行持续添加。 3.2 RedisShake RedisShake 的同步是基于向源 Redis 发送 Sync/Psync 命令,然后实现全量+增量拉取并回放来实现的。同样,具体细节介绍请参考我在云栖社区发表的博客,本文主要从功能角度进行介绍。 项目地址:http://t.cn/E6hqgij RedisShake 目前主要有以下 5 大功能:
RedisShake 的 Sync 模式是目前使用最为广泛的模式,其通过 RDB 全量并发同步。以及增量异步写入的方式来提高同步的性能,理论上可以达到毫秒级别的同步延迟。此外,用户还可以根据 redis-full-check 来进行数据同步后的一致性校验,保证数据的正确性。 RedisShake 的场景以同步为主,如果用户有特定的需求,也欢迎告知我们,比如类似 MongoShake 的离线计算等场景。目前 RedisShake 处于刚开源阶段,功能点迭代比较快,欢迎大家关注。 4. 使用案例 本节主要介绍一下用户根据我们的 MongoShake 和 RedisShake 的使用案例 4.1 高德地图 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |