在相同的存储卷上创build第二个(克隆)MongoDB副本集

我们正在升级我们的软件,这需要更新我们的MongoDB数据库。 我们计划通过使用新名称复制现有的ReplicaSet,并对新的名称进行更新,然后在一切准备就绪时进行切换。 这两个ReplicaSet将在同一台服务器上。

我已经用它的新名称创build了新的独立数据库(是否有来自主服务器的mongodumop,然后在与主服务器同样的卷名下将其作为独立服务器进行了恢复)。 我现在想要做的是将这个新的数据库从一个独立的版本更改为一个ReplicaSet,而不会影响原始的Production ReplicaSet

我发现 – 将独立转换为副本集http://docs.mongodb.org/manual/tutorial/convert-standalone-to-replica-set/

但是这个例子只显示了一个ReplicaSet,我只想确保这个过程仍然可以在同一台服务器上的两个数据库上工作。 在此示例中,要从独立版转换的ReplicaSet的名称是mongo启动选项之一(–replSet)。 该选项是否需要原始和新的ReplicaSrt名称,或只需要从Standalone转换新的名称

要将独立副本转换为第二副本集,而不影响原始副本集,则应遵循正常副本集设置的说明,同时考虑以下因素:

  1. 为新的集合使用不同的replSet名称
  2. 对任何新的集合成员使用不同的dbpath
  3. 对任何新的集合成员使用不同的日志path
  4. 使用不同的端口设置新成员

如果上述内容被考虑在内,那么你的2套将是截然不同的,2之间将不会尝试彼此沟通。 请仔细执行您的rs.add()操作,指定新成员的端口,而不是旧的。

这是更新副本集的一种非常奇怪的方式。 通常的方法称为“滚动更新”,其工作原理是这样的:

  1. closures一个辅助
  2. 更新MongoDB包
  3. 如果有的话,按照第一次启动的指示
  4. 重复步骤1 – 4为所有其余的辅助
  5. 连接到主要
  6. 让它使用rs.stepDown(3600)
  7. 重复步骤1 – 4

更新完成,停机时间最短(实际上,在主要下台后选举仅需2秒钟),不会从这里复制到那里。