我想知道是否有可能使用mongooplog命令构建一个master来掌握与MongoDB的合并复制。
例如:
# mongooplog --from master2 --host master1
# mongooplog --from master1 --host master2
这个解决方案的问题是mongooplog在到达最后一个oplog时结束,并且它不会保存最后一个支持的oplog,它应该重复最后n次操作。
这个解决方案是解决网络分裂的好方法吗? mongooplog如何处理分布式时间戳?
我认为如果主服务器可以接受从另一个副本集插入oplog,这将是一个很好的方法。
答案 0 :(得分:1)
这个解决方案是解决网络分裂的好方法吗? mongooplog如何处理分布式时间戳?
不,您使用mongooplog
建议的内容是不可能的,并且会导致数据丢失。 MongoDB复制&工具内部假设一个共同的oplog history and idempotent order of operations,你建议的方法将违反这些假设。
多主机支持需要某种冲突/合并解决方案。 MongoDB复制(在2.6处)旨在仅支持单个主服务器(也称为“主服务器”)。
副本集是MongoDB支持的automatic failover方法,因此,如果发生网络分裂或服务器故障,您需要规划适当的部署以确保可以选择主节点。
我认为如果主服务器可以接受从另一个副本集插入oplog,这将是一个很好的方法。
您可以在MongoDB问题跟踪器中提出/观看开放请求:SERVER-2956: Master-Master replication。这是长期路线图中考虑的功能,但目前尚未安排发布。
虽然不能完全替代多主机,但根据您的部署要求,您可以考虑一些方法:
使用tag-aware sharding部署分片群集,将数据隔离到某些分片。在具有多个数据中心的部署中,您可以有效地结束本地写入(对于存储在本地分片上的数据)和本地读取(如果您可以从具有最终一致性的辅助数据中读取)。
实现您自己的API,处理冲突解决和一些多主要功能。我见过(但从未尝试过)的一个例子是MongoMVCC。