mongodb 使用复制在集群之间迁移是否可行?
Is mongodb migration between clusters using replication a viable option?
我们在 Compose 上有一个托管的 mongodb 3.0.11 集群 运行,其中包含约 300gb 的数据(称为 C0)。我们想将此数据移动到 GCP 上的自我管理 mongodb 4.x 集群 运行(称为 C1)。我已经尝试了一些用于克隆/同步数据库的 github 回购协议,但是其中 none 已经可靠地用于我的测试(老实说,我不确定我是否想使用这些不-用于迁移我们的生产数据的经过严格测试的存储库)。
在阅读 mongodb 关于副本集、oplog 等的文档时,我想到也许我们可以让 mongodb 通过其内置的为我们做迁移relica set 成员添加过程。但是,由于我不是 mongodb 专家,我不知道这是否是一个可行的解决方案。
这是我感兴趣的内容 - mongodb 专家请评论这是否可行(如果您有任何基于经验的建议):
- 将来自 C1 的两个 mongodb 实例作为优先级 0 副本集成员添加到 C0
- 等待 C1.members 更新
- 进入"maintenance mode" - 数据库访问客户端关闭
- 强制将 C1.members 之一升级为主
- 从副本集中删除所有C0.members
- 使用到 C1 副本集的新连接字符串重新启动数据库客户端
另一种方法是编写我自己的克隆器/同步器,因为到目前为止我发现的 none 工具似乎可以用于 mongo 4.x 的生产。
想法?
我强烈不建议将集群迁移与通过几个主要版本进行升级相结合。分别处理这些任务将有助于您在进行故障排除时限制更改的范围。
如果您使用兼容的 MongoDB 服务器版本并且能够将所有成员添加到同一个副本集,则可以使用您概述的一般方法在集群之间迁移。目前只有相邻的主要服务器版本支持滚动升级,所以如果你的起点是 MongoDB 3.0.x 最新版本你可以直接添加到你的 3.0.x 副本集将是3.2.x。如果您的最终目标是 4.0.x,那么您必须从 3.2 => 3.4、3.4 => 3.6 升级到 3.6 => 4.0。 MongoDB Release Notes 包含每个主要版本的特定先决条件、升级过程和兼容性信息。
DBaaS 提供商通常不允许添加外部自我管理成员,因为这可能会损害他们管理的集群的安全性和稳定性。但是,DBaaS 提供商通常具有自动化功能来帮助您就地升级,因此您可能希望在迁移到自我管理之前利用这一点。
从 DBaaS 进行实时迁移的最佳选择是创建一个可以访问复制操作日志的用户,并找到适合您的用例和 source/target 服务器版本的迁移工具。对于生产环境,我会谨慎尝试跨多个主要版本(例如 3.0.x 到 4.0.x)进行实时迁移,并会鼓励相同的版本迁移(3.0.x => 3.0.x) 具有单独的升级步骤。
作为一般方法,我会:
- 查看您计划的服务器和驱动程序升级的所有版本、升级和兼容性说明。
- 确保您使用的是兼容的驱动程序版本并在升级服务器版本之前升级您的 drivers/application 代码。
- 在具有代表性的 staging/QA 环境中使用生产数据备份测试升级过程。
- 使用升级后的 driver/server 版本和具有代表性的工作负载测试您的应用程序,以查找性能回归等潜在问题。
我们在 Compose 上有一个托管的 mongodb 3.0.11 集群 运行,其中包含约 300gb 的数据(称为 C0)。我们想将此数据移动到 GCP 上的自我管理 mongodb 4.x 集群 运行(称为 C1)。我已经尝试了一些用于克隆/同步数据库的 github 回购协议,但是其中 none 已经可靠地用于我的测试(老实说,我不确定我是否想使用这些不-用于迁移我们的生产数据的经过严格测试的存储库)。
在阅读 mongodb 关于副本集、oplog 等的文档时,我想到也许我们可以让 mongodb 通过其内置的为我们做迁移relica set 成员添加过程。但是,由于我不是 mongodb 专家,我不知道这是否是一个可行的解决方案。
这是我感兴趣的内容 - mongodb 专家请评论这是否可行(如果您有任何基于经验的建议):
- 将来自 C1 的两个 mongodb 实例作为优先级 0 副本集成员添加到 C0
- 等待 C1.members 更新
- 进入"maintenance mode" - 数据库访问客户端关闭
- 强制将 C1.members 之一升级为主
- 从副本集中删除所有C0.members
- 使用到 C1 副本集的新连接字符串重新启动数据库客户端
另一种方法是编写我自己的克隆器/同步器,因为到目前为止我发现的 none 工具似乎可以用于 mongo 4.x 的生产。
想法?
我强烈不建议将集群迁移与通过几个主要版本进行升级相结合。分别处理这些任务将有助于您在进行故障排除时限制更改的范围。
如果您使用兼容的 MongoDB 服务器版本并且能够将所有成员添加到同一个副本集,则可以使用您概述的一般方法在集群之间迁移。目前只有相邻的主要服务器版本支持滚动升级,所以如果你的起点是 MongoDB 3.0.x 最新版本你可以直接添加到你的 3.0.x 副本集将是3.2.x。如果您的最终目标是 4.0.x,那么您必须从 3.2 => 3.4、3.4 => 3.6 升级到 3.6 => 4.0。 MongoDB Release Notes 包含每个主要版本的特定先决条件、升级过程和兼容性信息。
DBaaS 提供商通常不允许添加外部自我管理成员,因为这可能会损害他们管理的集群的安全性和稳定性。但是,DBaaS 提供商通常具有自动化功能来帮助您就地升级,因此您可能希望在迁移到自我管理之前利用这一点。
从 DBaaS 进行实时迁移的最佳选择是创建一个可以访问复制操作日志的用户,并找到适合您的用例和 source/target 服务器版本的迁移工具。对于生产环境,我会谨慎尝试跨多个主要版本(例如 3.0.x 到 4.0.x)进行实时迁移,并会鼓励相同的版本迁移(3.0.x => 3.0.x) 具有单独的升级步骤。
作为一般方法,我会:
- 查看您计划的服务器和驱动程序升级的所有版本、升级和兼容性说明。
- 确保您使用的是兼容的驱动程序版本并在升级服务器版本之前升级您的 drivers/application 代码。
- 在具有代表性的 staging/QA 环境中使用生产数据备份测试升级过程。
- 使用升级后的 driver/server 版本和具有代表性的工作负载测试您的应用程序,以查找性能回归等潜在问题。