MongoDB 不正式支持您所需的复制策略。
MongoDB 副本集由一个主服务器组成,该主服务器异步复制到同一副本集中的一个或多个辅助服务器。您不能配置具有多个主副本的副本集或复制到不同的副本集。
但是,根据您希望使中央服务器保持最新状态的积极程度以及您需要管理的数据/更新量,您的用例有几种可能的方法。
一些一般性警告:
方法#1:使用mongodump
和mongorestore
如果您只需要定期将内容同步到中央服务器,一种方法是使用mongodump
andmongorestore
。mongodump
您可以从每个独立实例中安排一个周期,并用于mongorestore
将它们导入中央服务器。
注意事项:
有一个--db
参数允许mongorestore
您从原始名称恢复到不同的数据库(如果需要)
mongorestore
仅对现有数据库执行插入操作(即不执行更新或 upserts)。如果_id
目标数据库上已经存在相同的现有数据,则 mongorestore 不会替换它。
您可以使用mongodump
诸如--query
对要导出的数据更具选择性的选项(例如,仅选择最近的数据而不是全部)
如果您想限制每次运行时转储和恢复的数据量(例如,仅导出“更改的”数据),您将需要弄清楚如何在中央服务器上处理更新和删除。
鉴于警告,这种方法最简单的用法是进行完全转储和恢复(即使用mongorestore --drop
)以确保复制所有更改。
方法 #2:在 MongoDB 中使用可尾游标oplog
。
如果您需要更多实时或增量复制,一种可能的方法是在 MongoDB 复制上创建可尾游标oplog
。
这种方法基本上是“滚动你自己的复制”。您必须编写一个应用程序来跟踪每个 MongoDB 实例上的 oplog,并查找感兴趣的更改以保存到您的中央服务器。例如,您可能只想复制选择性命名空间(数据库或集合)的更改。
一个可能感兴趣的相关工具是来自 10gen 实验室的实验性Mongo 连接器。这是一个 Python 模块,它提供了一个跟踪复制的接口oplog
。
注意事项: