MongoShake icon indicating copy to clipboard operation
MongoShake copied to clipboard

增量同步,数据一致问题

Open jinchengsix opened this issue 1 year ago • 6 comments

背景: 往生产集群A中写入数据,增量同步给灾备集群B,在集群A宕机后,快速切换到集群B,以达到灾备目的,所以需要验证在宕机期间,集群 A和B 的数据一致性。

验证步骤:

  1. A -> B 正常增量同步
  2. 往 A 的 ycsb06库中批量插入数据
  3. 执行第2步过程中,关闭集群A,此时查看集群B 中 ycsb06 库下有 1122147 条数据(从0开始) image
  4. 开启集群A,查看 ycsb06 库下有 1123035 条数据 image

小结: 上面验证来看,有888条数据在当即期间丢失,丢包率为 0.079% ,猜测是 mongoshake 获取到 oplog 后还没来得及 replay,A就已经挂掉了。

疑问: 请问上面的丢包可以避免吗?生产和容灾两套环境需要尽量保持数据一致,或者说是否有其他方案能尽量减小未同步的数据量(比如增加 worker 数量等等)

版本: mongoshake 2.8.4 最新版 mongodb 4.0.3

jinchengsix avatar May 12 '23 07:05 jinchengsix

可以按时间来算一下,丢失了几秒的数据。比如一秒写入100秒,少了200条就是2秒的数据。 shake复制不是双写,总会有数据丢失的,是不可避免的。能做的就是降低复制的延迟,这个可以通过增加work来实现,这里也要注意增量hash的方式

zhangst avatar May 12 '23 08:05 zhangst

好的,谢谢,另外还有个问题想请教下。 增量同步过程中,其他数据都没问题,但是用户信息无法同步,这是什么原因呢? 例如,我在 集群A 的 ycsb07 库下创建了一个用户 user1, 无法同步到集群B image 1683880787775

根据 FAQ,如果要同步 admin 下的users 信息,需要配置 filter 和 transform, 这个我还没尝试,但上面的用户是在 ycsb08 库下的,也无法同步

jinchengsix avatar May 12 '23 08:05 jinchengsix

最后一个问题,我当前是 4c8g 的独享机器,默认配置的 worker 数量为8,如果要尽量降低复制的延迟,这边建议 worker 配置为多少呢?

jinchengsix avatar May 12 '23 08:05 jinchengsix

  1. shake有开启DDL同步吗? createUser属于DDL操作
  2. worker的配置可以根据CPU的使用率来动态调配。但是要注意一个点,worker的hash规则和业务上规格是有相互影响的,配置文件如下:

hash的方式,id表示按文档hash,collection表示按表hash,auto表示自动选择hash类型。 如果没有索引建议选择id达到非常高的同步性能,反之请选择collection。 incr_sync.shard_key = auto

zhangst avatar May 15 '23 02:05 zhangst

开启了以下配置: filter.ddl_enable = true filter.pass.special.db = admin transform.namespace = admin.system.users:admin:system.users

结果:新增的用户均无法同步(无论是 admin 还是 其他库下的用户),其他数据(包括建表等操作)都能正常同步

另外也尝试了以下配置: filter.ddl_enable = true filter.pass.special.db = admin filter.namespace.white = admin transform.namespace = admin.system:admin:system

结果:仅同步用户数据,其他库表不同步

不清楚问题出在哪里,新增用户时,我看日志都有反馈 image

jinchengsix avatar May 15 '23 08:05 jinchengsix

shake2.8.4+mongodb6.0下,创建新用户是可以同步的。 只设置这两个参数,其它两个不设置 filter.ddl_enable = true filter.pass.special.db = admin

设置shake日志参数为debug级别,看下是否有createuser或admin.system.users的日志输出。

zhangst avatar May 18 '23 01:05 zhangst