使用MongoShake实现MongoDB副本集间的单向同步
通过阿里云自研的MongoShake工具,您可以实现MongoDB数据库间的数据同步,该功能可用于数据分析、灾备和多活等业务场景。本文介绍副本集实例间的单向数据同步的操作流程。
说明 如果您需要实现副本集实例间的双向数据同步,您可以提交工单申请。
MongoShake介绍
MongoShake是阿里云以golang语言编写的通用平台型服务工具,它通过读取MongoDB的Oplog操作日志来复制MongoDB的数据以实现特定需求。
MongoShake还提供了日志数据的订阅和消费功能,可通过SDK、Kafka、MetaQ等方式的灵活对接,适用于日志订阅、数据中心同步、Cache异步淘汰等场景。
说明 如需了解更多MongoShake相关信息,请参见MongoDB-shake Github主页。
支持的数据源
源数据库 | 目标数据库 |
---|---|
|
|
本文以云数据库MongoDB实例间的数据实时同步为例介绍配置流程,该方法也同样适用于自建数据库之间的数据同步。
注意事项
- 在全量数据同步完成之前,请勿对源库进行DDL操作,否则可能导致数据不一致。
- 不支持同步admin和local数据库。
数据库用户的权限要求
同步的数据源 | 所需权限 |
---|---|
源MongoDB实例 | readAnyDatabase权限、local库的read权限和mongoshake库的readWrite权限。 |
目标MongoDB实例 | readWriteAnyDatabase权限或目标库的readWrite权限。 |
说明 关于MongoDB数据库用户的创建及授权操作请参见使用DMS管理MongoDB数据库用户或db.createUser命令介绍。
准备工作
操作步骤
- 登录ECS实例。
- 执行下述命令,下载MongoShake程序。
wget https://github.com/alibaba/MongoShake/releases/download/release-v2.0.7-20190817/mongo-shake-2.0.7.tar.gz
说明 建议下载最新版本的MongoShake程序,详情请参见releases页面。 - 解压MongoShake程序。
tar xvf mongoshake-2.0.tar.gz
- 通过
vim
命令,修改MongoShake的配置文件collector.conf,涉及的主要参数的说明如下表所示。参数 说明 示例值 mongo_urls 源端MongoDB实例的ConnectionStringURI格式连接地址。 说明- 建议通过专有网络地址进行互连,以获取最低的网络延迟。
- 关于ConnectionStringURI格式详情请参见副本集实例连接说明。
mongo_urls = mongodb://root:[email protected]:3717,dds-bpxxxxxxxx.mongodb.rds.aliyuncs.com:3717
tunnel.address 目标端MongoDB实例的ConnectionStringURI格式连接地址。 tunnel.address = mongodb://root:[email protected]:3717,dds-bpxxxxxxxx.mongodb.rds.aliyuncs.com:3717
sync_mode 数据同步的方式,取值: - all:执行全量数据同步和增量数据同步。
- document:仅执行全量数据同步。
- oplog:仅执行增量数据同步。
说明 默认取值为oplog。sync_mode = all
replayer.dml_only 是否仅同步DML操作,取值: - false:同步DML操作和DDL操作。
- true:仅同步DML操作。
说明 默认取值为true。replayer.dml_only = false
filter.namespace.black 指定数据同步的黑名单,这些指定的命名空间不会被同步至目标数据库,多个命名空间用英文分号(;)分隔。 说明 命名空间是指MongoDB中集合或索引的规范名称,是由数据库名称和集合/索引名称的组合,例如mongodbtest.customer
。filter.namespace.black = mongodbtest.customer;testdata.test123
filter.namespace.white 指定数据同步的白名单,只有这些指定的命名空间会被同步至目标数据库,多个命名空间用英文分号(;)分隔。 filter.namespace.white = mongodbtest.customer;test123
- 执行下述命令启动同步任务,并打印日志信息。
./collector -conf=collector.conf -verbose
- 观察打印的日志信息,当出现如下日志时,即代表全量数据同步已完成,并进入增量数据同步模式。
[09:38:57 CST 2019/06/20] [INFO] (mongoshake/collector.(*ReplicationCoordinator).Run:80) finish full sync, start incr sync with timestamp: fullBeginTs[1560994443], fullFinishTs[1560994737]
监控MongoShake状态
增量数据同步开始后,您可以再开启一个命令行窗口,通过如下命令来监控MongoShake。
./mongoshake-stat --port=9100
监控输出示例:
参数 | 说明 |
---|---|
logs_get/sec | 每秒获取的oplog数量。 |
logs_repl/sec | 每秒执行重放操作的oplog数量。 |
logs_success/sec | 每秒成功执行重放操作的oplog数量。 |
lsn.time | 最后发送oplog的时间。 |
lsn_ack.time | 目标端确认写入的时间。 |
lsn_ckpt.time | Check Point持久化的时间。 |
now.time | 当前时间。 |
replset | 源数据库的副本集名称。 |
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论