在没有停机时间的情况下迁移MongoDB实例

Afs*_*ani 9 database-migration mongodb

我们在生产环境中使用MongoDB,现在,由于当前服务器的一些问题,我将更改服务器并启动一个新的MongoDB实例.

我们有一个副本集和一个mongod实例(两个不同的MongoDB网络用于不同的目的).现在,首先我应该将单个mongod实例,然后整个副本集迁移到新服务器.

我想知道的是,如何在没有停机的情况下迁移这两个实例?我不想关闭服务器或停止写操作.

提前致谢.

Joh*_*one 10

首先,你永远不应该将mongodb作为生产的单个实例运行.至少应该有1个主要,1个次要和1个仲裁.

其次,即使使用副本设置,在切换初选时也总会有一些写入停机时间,因为在选举过程中无法进行写入.来自文档:

重要选举选举对于复制品的独立操作至关重要; 但是,选举需要时间才能完成.当选举正在进行时,副本集没有主要内容,不能接受写入.除非必要,MongoDB避免选举.

例如,当您关闭主服务器以将其移动到新服务器或虚拟实例或升级数据库版本(例如从2.4到2.6)时,将会发生选举.

通过设置适当的选项以允许查询针对辅助节点运行,您可以使用现有副本集将停机时间降至最低.再次来自文档:

在故障转移期间维护可用性.如果希望应用程序在正常情况下从主数据库读取,则允许使用primaryPreferred,但允许在紧急情况下从辅助服务器读取过时的数据.这为故障转移期间的应用程序提供了"只读模式".

这至少可以处理读取.写入最好通过让您的应用程序重试失败写入或排队.

关于您的独立版本,转换为副本集的文档化程序经过了充分测试,可以在最短的停机时间内快速完成:

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