在相同的存储卷上创建第二个(克隆)MongoDB ReplicaSet

在相同的存储卷上创建第二个(克隆)MongoDB ReplicaSet

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

我已经以新名称创建了新的独立数据库(从主数据库执行了 mongodumop,然后以新名称在与主数据库相同的卷上将其恢复为独立数据库)。我现在要做的是将这个新数据库从独立数据库更改为 ReplicaSet,而不会影响原始生产 ReplicaSet

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

但是这个示例只显示了一个 ReplicaSet,我只想确保该过程仍可与同一服务器上的两个数据库一起使用。要从独立服务器转换的 ReplicaSet 的名称是此示例中的 mongo 启动选项之一 ( --replSet )。该选项是否需要原始和新的 ReplicaSrt 名称,还是只需要从独立服务器转换的新名称

答案1

要将独立副本集转换为第二个副本集,而不影响原始副本集,您应该遵循正常副本集设置的说明,并考虑以下事项:

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

如果考虑到上述情况,那么您的 2 个集合将是不同的,并且 2 个集合之间不会尝试相互通信。请谨慎执行 rs.add() 操作,指定新成员的端口而不是旧成员的端口。

答案2

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

  1. 关闭辅助
  2. 更新 MongoDB 包
  3. 按照首次启动时的说明进行操作,如果有
  4. 对所有剩余的辅助节点重复步骤 1 – 4
  5. 连接到主
  6. 让它退出使用rs.stepDown(3600)
  7. 重复步骤 1 – 4

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

相关内容