我们在生产环境中运行一个 3 成员的 MongoDB 副本集。
我们需要维护该 replset 的克隆,称为“镜像”,以进行内部分析。此镜像不需要是实时的,但它越是最新越好(最多可能滞后 1 天)。
维护这样一个镜像数据库的最合适的方法是什么?(请注意,此镜像可以是 1-member replset 或独立实例)
仅供参考,我们尝试了 2 个选项,但它们的速度不可接受:
- Oplog 重放。但这花了很多时间(从 replset 的 Primary 播放 oplog 大约需要 40 个小时)。
- 定期使用生产 replset 中的快照,但新卷(从快照创建)非常慢,因为它没有预热(我们使用的是 AWS EBS,预热大约需要 12 小时)
Update #1
: 我们也尝试让镜像成为 replset 成员,但是我们想将镜像从 replset 中分离出来,所以这个选项不能满足要求。
Update #2
: 我们不希望这个镜像成为 replset 成员的原因:我们在这个镜像上运行了大量的查询,使它耗尽了资源信用(磁盘 IO、网络 IO、CPU)并且实例暂时不可用。这改变了整个 replset 结构(因为它丢失了一个节点)。当实例再次可用时,它再次更改了 replset 结构(又添加了一个节点)。这些更改严重影响了 replset。
谢谢你。