在 MongoDB 上使用复制进行迁移

在 MongoDB 上使用复制进行迁移

我对使用 Mongo 上的副本集功能作为在机器之间顺利迁移的方法很感兴趣。我的 Mongo 数据库目前是一个独立实例。我知道建议的做法是让三个独立实例作为副本集运行。但我们目前的可用性要求还不够高,不足以证明运行三个独立实例的成本是合理的。话虽如此,我希望尽可能避免停机。

当对服务器进行重大更改时,我最理想的做法是启动一台新服务器并进行所需的更改(可能是从原始服务器克隆,也可能是从头构建并进行所需的更改)。该服务器托管 mongo 数据库。

在测试这台新服务器时,我希望它成为一台隐藏的辅助服务器。这样它就有数据,但实际上并不响应客户端请求。一旦我对新服务器感到满意,我就想切换一些东西,这样新服务器就是主服务器,旧服务器就是隐藏的辅助服务器。这样旧服务器继续获取数据,但不处理客户端请求。如果检测到问题,我可以再次切换主服务器和辅助服务器,将客户端发送回旧服务器。假设几天后没有问题,我可以关闭旧服务器。

我的问题是:

  • 使用这种方法我可能会遇到什么问题?
  • 它是否可以实现我的目标,即将数据从一台服务器移动到另一台服务器(以及将客户端从一台服务器移动到另一台服务器),并且希望零停机时间?
  • 由于我可能希望在将来的更改中这样做,我可能会将新服务器保留为具有 0 个成员的副本集。我意识到这不能提供至少三个成员所提供的高可用性。但保留这种方式会有什么坏处吗?或者最好将其切换回独立实例?

答案1

您需要在副本集中至少有 3 个服务器才能选出主服务器。您可以使用现有服务器、新服务器和在其中一台服务器上运行的仲裁器作为第三台服务器。您不能运行单服务器副本集。没有主服务器,您将无法进行任何写入。

如果不停止/启动 mongod 服务,则无法从独立模式切换到副本集。您需要重新启动 mongo--replSet replica_set_name或将选项添加replSet=replica_set_name到 mongod.conf。

一旦同步,它将是一个类似的过程来转换回独立(停止 mongo,删除 replSet 配置,启动 mongo)。

如果您的客户端将“主”配置为读取首选项,则您的所有读取都不会转到辅助服务器(这通常是默认设置,因为辅助服务器主要用于持久性,而不是水平扩展)。

http://docs.mongodb.org/manual/tutorial/convert-standalone-to-replica-set/

相关内容