我们正在升级软件,这将需要更新 MongoDB 数据库。我们计划通过复制现有 ReplicaSet 并使用新名称,然后对新名称进行更新,并在一切准备就绪后进行切换。这两个 ReplicaSet 都将位于同一台服务器上。
我已经以新名称创建了新的独立数据库(从主数据库执行了 mongodumop,然后以新名称在与主数据库相同的卷上将其恢复为独立数据库)。我现在要做的是将这个新数据库从独立数据库更改为 ReplicaSet,而不会影响原始生产 ReplicaSet
我发现 - 将独立服务器转换为副本集 http://docs.mongodb.org/manual/tutorial/convert-standalone-to-replica-set/
但是这个示例只显示了一个 ReplicaSet,我只想确保该过程仍可与同一服务器上的两个数据库一起使用。要从独立服务器转换的 ReplicaSet 的名称是此示例中的 mongo 启动选项之一 ( --replSet )。该选项是否需要原始和新的 ReplicaSrt 名称,还是只需要从独立服务器转换的新名称
答案1
要将独立副本集转换为第二个副本集,而不影响原始副本集,您应该遵循正常副本集设置的说明,并考虑以下事项:
- 对新集合使用不同的 replSet 名称
- 对任何新集成员使用不同的 dbpath
- 对任何新集合成员使用不同的日志路径
- 设置具有不同端口的新成员
如果考虑到上述情况,那么您的 2 个集合将是不同的,并且 2 个集合之间不会尝试相互通信。请谨慎执行 rs.add() 操作,指定新成员的端口而不是旧成员的端口。
答案2
这是更新副本集的一种非常奇怪的方法。通常的方法称为“滚动更新”,其工作原理如下:
- 关闭辅助
- 更新 MongoDB 包
- 按照首次启动时的说明进行操作,如果有
- 对所有剩余的辅助节点重复步骤 1 – 4
- 连接到主
- 让它退出使用
rs.stepDown(3600)
- 重复步骤 1 – 4
更新完成,停机时间最短(实际上,主要成员下台后,选举仅耗时约 2 秒钟),无需从这里复制到那里。