MONGOREPLAY 的“坑”

本文探讨了Mongodb的Mongoreplay工具在数据同步中的应用及遇到的挑战,特别是在捕获本地执行命令数据方面的局限性,指出其更适合用于系统调试和故障重放。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

故事是这样开始的,因为想做一个MONGODB 的测试库同步部分生产库的数据,同时不想从基本数据搞起,因为数据量比较大。 其实是可以通过mongoexport 和 mongoimport 来搞起的,但问题是如果只是想捕获某个时间段的数据呢,或者仅仅想复现一下生产库中某个时间段出现的故障数据。怎么能跟踪这些数据并记录,在测试库上复现。

其实从MONGODB 3.4以后是有一个工具可以帮助的,Mongoreplay,他主要的功能就是,通过网络抓包,将通过网卡的数据截获变成特定的数据格式,然后在通过  replay的方式将数据在另一个库上进行重放,我们可以认为他有点类似于mysql 的binlog.  当然原理可能不同。

坑在哪里,继续往下听。 在捕捉数据的时候,要指定网卡,要指定你捕捉的端口号

mongoreplay record -i ens32 -e "port 27027" -b 20 -p /mongodata/mongo.json

据以BSON的方式灌入你指定的文件中。然后你拿着这个文件,可以原地将数据灌入到指定的 MONGODB 服务器

数据源位置,执行play 命令就可以将数据灌入到测试机中。

坑在哪里,在测试的过程中,发现数据时有时无,而且数据时有时无是有规律的,凡是在本地机执行的命令都找不到,凡是不在本地机执行的命令都有相关的数据抓取。

这里就牵扯,不是这个命令的问题,是抓包的问题,命令中 -i 后面的是必须要指定数据来源的网卡,一般机器有lo 本地回路,和 对外的物理网卡。而监控的时候,是在监控对外的物理网卡,而本地执行的命令均在 lo 回路中体现。

但这里就出现了问题,如果想要一个完全的数据通过mongoreplay命令是很困难的,即使我们产生两套mongoreplay 去抓取本地 和 外网的数据,但执行的顺序我们是无法再回放中进行鉴别的。

所以mongoreplay 这样的功能,仅仅有限于系统调试和故障重放,对于数据同步来说,这个功能实属鸡肋。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值