我有一个由3台服务器组成的MongoDB“副本集”。 它存储了两个DB,我想知道是否可以只复制一个DB而不运行多个mongoDB实例(每个DB一个)。
这是“问题”草图
Server1 Server2 Server3
DB1 X X X
DB2 X X
X代表服务器,其中必须复制数据库。
感谢
答案 0 :(得分:6)
我不相信这是可能的。
与分片不同,您可以在其中指定分析到 集合 级别的分片,使用副本集您可以定义给定的MongoDB 实例 是副本集的一部分。由于在任何给定时间,副本集中只有一个节点可以是主节点,因此根据您正在讨论的场景,如果出现问题,则会出现问题。 Server1出现故障,Server3被提升为master - 因为DB2无法写入。
答案 1 :(得分:3)
我有一个类似的问题,并在javascript中找到了一个非常简单的解决方案,可以在mongo-shell中执行。
此处提供的源代码: http://www.suenkel.de/blog/2012/02/mongodb-replicate-one-database-or-collection/
在主服务器的oplog上打开一个tailable游标,每个操作都可以应用到另一个服务器(当然你可以按集合的命名空间甚至数据库进行过滤......)
答案 2 :(得分:0)
根据当前的MongoDB ReplicaSet体系结构,不能将单个副本集与某些具有数据库或集合部分的成员一起使用。
但是,如果您需要在另一个位置实时复制单个数据库或集合,那么我将获得以下解决方法:
directoryPerDB
分隔所需的数据库文件(如果尚未创建新副本,请启用此选项)正如我所说,您将最终获得另一个专用于此数据库的副本集,但是复制是实时完成的,并且两个副本集都以一致的方式拥有数据(您必须在第一个ReplicaSet上执行写入操作,但)。