加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

浅谈数据库同步和迁移

发布时间:2019-08-14 03:53:55 所属栏目:编程 来源:VINLLEN CHEN
导读:本文将主要首先聊一聊数据库同步和迁移两个话题,之后将会围绕这 2 个话题介绍一下阿里云开源的基于 MongoDB 和 Redis 的数据同步迁移工具 MongoShake 和 RedisShake,最后介绍一些用户的使用案例。 1. 同步 现在大部分数据库都支持集群版的数据,也就是说

从广义来说,迁移应该算是同步的一种模式。同步侧重于增量,而迁移侧重于全量。迁移通常说的是数据库的搬迁,将源数据库搬迁到目的数据库,搬迁之后目的数据库代替源数据库继续提供服务,源数据库可以选择下线或者继续提供服务。

迁移有多种场景,比如:同种数据库下异构模式迁移。例如: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 最主要的功能肯定是数据的同步,全量加增量就是实现数据同步的基础。上面我们提到的灾备和多活功能就是基于这两个来实现的。
  • 过滤:MongoShake 支持对数据按库、表过滤,这样就能够实现我们在前面提到的,双向同步的场景。
  • 并行复制:MongoShake 内部采用了并行复制的策略,使得最高的 QPS 可以达到 40W。
  • 压缩:MongoShake 支持对数据进行压缩,通常用于远距离传输的场景。
  • HA:MongoShake 可以支持集群 HA 切换,用户可以通过启动多个 MongoShake 来启动主备集群。
  • 断点续传:MongoShake 通过持久化 checkpoint 信息来支持同步链路断开重连后,数据能够重新接上进行传输。
  • 灵活多通道支持:MongoShake 除了支持将源数据写入目的库以外,还支持多种通道,比如:TCP/RPC/File/Kafka 等,满足用户不同的需求。例如:MongoShake 可以将数据写入 Kafka,用户可以从 Kafka 中拉取数据,然后对接到流式计算平台满足实时计算的需求。用户甚至可以自定义通道类型,满足特殊的业务需求。

下面来简单列举一下,有了这些功能,我们可以做什么?也就是说应用场景有哪些?

  • MongoDB 集群的异步复制,减少业务双写的开销。
  • MongoDB 集群的灾备、多活、读写分离等业务部署。
  • 基于 MongoDB Oplog 的日志分析平台。
  • 基于 MongoDB Oplog 的日志订阅。用户可以从例如 Kafka 通道中拉取日志,然后对感兴趣的日志进行订阅。
  • MongoDB 集群的数据路由。根据业务需求,结合日志订阅和过滤机制,可以获取关注的数据,达到数据路由的功能。
  • 基于日志的集群监控。
  • Cache 的反向同步。可以通过日志分析的结果,知道哪些 Cache 可以被淘汰,哪些 Cache 可以进行预加载,从而反向推动 Cache 的更新。

以上只是简单列举了几种应用场景,如果你有不同的玩法或者不同的业务需求,也欢迎跟我联系,MongoShake 产品还在持续迭代更新中,后续还会有很多有用且好玩的特性会进行持续添加。

浅谈数据库同步和迁移

3.2 RedisShake

RedisShake 的同步是基于向源 Redis 发送 Sync/Psync 命令,然后实现全量+增量拉取并回放来实现的。同样,具体细节介绍请参考我在云栖社区发表的博客,本文主要从功能角度进行介绍。

项目地址:http://t.cn/E6hqgij

RedisShake 目前主要有以下 5 大功能:

  • Dump:从源 Redis 将全量 RDB 文件下载下来。
  • Decode:解析指定的 RDB 文件。
  • Restore:目的库根据指定的 RDB 进行全量恢复。
  • Sync:支持数据同步,源端可以是单节点 Redis、主从Redis、集群Redis,也支持 Codis,目的端同样也可以是各种模式的 Redis。
  • Rump:支持对源端进行 Key 扫描并全量迁移。这个主要是应对一些云厂商没有开放 Sync/Psync 权限的情况下,进行全量迁移的场景。

浅谈数据库同步和迁移

RedisShake 的 Sync 模式是目前使用最为广泛的模式,其通过 RDB 全量并发同步。以及增量异步写入的方式来提高同步的性能,理论上可以达到毫秒级别的同步延迟。此外,用户还可以根据 redis-full-check 来进行数据同步后的一致性校验,保证数据的正确性。

RedisShake 的场景以同步为主,如果用户有特定的需求,也欢迎告知我们,比如类似 MongoShake 的离线计算等场景。目前 RedisShake 处于刚开源阶段,功能点迭代比较快,欢迎大家关注。

4. 使用案例

本节主要介绍一下用户根据我们的 MongoShake 和 RedisShake 的使用案例

4.1 高德地图

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读