mongodb单个数据库复制

时间:2011-03-14 14:18:20

标签: mongodb replication

我有一个由3台服务器组成的MongoDB“副本集”。 它存储了两个DB,我想知道是否可以只复制一个DB而不运行多个mongoDB实例(每个DB一个)。

这是“问题”草图

      Server1   Server2   Server3
DB1      X         X         X
DB2      X         X

X代表服务器,其中必须复制数据库。

感谢

3 个答案:

答案 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体系结构,不能将单个副本集与某些具有数据库或集合部分的成员一起使用。

但是,如果您需要在另一个位置实时复制单个数据库或集合,那么我将获得以下解决方法:

  1. 使用directoryPerDB分隔所需的数据库文件(如果尚未创建新副本,请启用此选项)
  2. 将所需数据库的目录复制到新位置。
  3. 使用此单个数据库部署新的ReplicaSet。
  4. 编写一个简单的脚本,然后使用Change Streams为您执行复制。

正如我所说,您将最终获得另一个专用于此数据库的副本集,但是复制是实时完成的,并且两个副本集都以一致的方式拥有数据(您必须在第一个ReplicaSet上执行写入操作,但)。