【Github】项目名:MongoShake – 基于mongodb oplog的集群复制平台
一、项目简介
MongoShake是由阿里云NoSQL团队开发和维护的一个通用数据复制平台。它基于MongoDB的oplog,从源Mongo数据库获取oplog,然后可以将其重放到目标Mongo数据库或者通过不同的隧道发送到其他端点。如果目标端是Mongo数据库,即直接重放oplog,它就像是一个用于将数据从源MongoDB复制到另一个MongoDB以构建冗余复制或双活复制的异步工具。此外,还有rpc、file、tcp、kafka等隧道类型,用户定义的接收器必须分别定义自己连接这些隧道的接口,也可以定义自己可插拔的隧道类型。
二、核心技术
- 并行复制:有三种并行复制选项,称为’shad_key’,分别是id(以文档为并发粒度)、collection(以集合/表为粒度)和auto(根据是否存在唯一索引决定,有则为collection,无则为id)。
- 高可用性:MongoShake定期将其上下文持久化到注册中心(默认是源数据库),目前上下文是标记成功重放oplog位置的检查点,并且支持监控器机制,在故障时可立即重启。
- 过滤器:支持使用白名单和黑名单对数据库和集合命名空间进行过滤。
- DDL同步:从1.5版本开始,通过使用全局屏障支持DDL同步。
- 隧道:支持rpc、tcp、file、kafka、mock和direct等隧道类型,并且提供接收器连接不同隧道。
- 压缩:在发送之前,支持对批量oplog进行Gzip、zlib、deflate压缩。
- 监控与调试:用户可以通过RESTful API对Mongo – Shake进行监控或调试。
三、项目总结
MongoShake是一个功能丰富的基于MongoDB oplog的集群复制平台,在数据冗余复制、双活复制等方面有着重要的作用,其多种功能特性能够满足不同的业务需求。欢迎大家在评论区留言讨论,分享使用经验或者提出问题。