本教程特定于MongoDB 4.2。对于MongoDB的早期版本,请参考《 MongoDB手册》的相应版本。
从MongoDB 3.2开始,可将分片群集的配置服务器部署为副本集。副本集配置服务器必须运行WiredTiger存储引擎。MongoDB 3.2不赞成将三个镜像
mongod
实例用于配置服务器。
此过程将分片群集的组件移至新的硬件系统,而不会造成读写中断。
重要
在迁移过程中,请勿尝试更改为分 片群集元数据。不要使用任何以任何方式修改集群元数据的操作。例如,请勿创建或删除数据库,创建或删除集合或使用任何分片命令。
禁用平衡器以停止块迁移,并且在过程完成之前不要执行任何元数据写入操作。如果正在进行迁移,那么平衡器将在停止之前完成正在进行的迁移。
要禁用平衡器,请连接到集群的一个
mongos
实例,然后发出以下方法:[1]
要检查平衡器状态,请发出该sh.getBalancerState()
方法。
有关更多信息,请参阅禁用平衡器。
[1] | 从MongoDB 4.2开始,sh.stopBalancer() 还会禁用分片群集的自动拆分。 |
在版本3.4中更改。
从MongoDB 3.2开始,分片群集的配置服务器可以部署为副本集(CSRS),而不是三个镜像配置服务器(SCCC)。对配置服务器使用副本集可提高配置服务器之间的一致性,因为MongoDB可以利用配置文件的标准副本集读取和写入协议。另外,将副本集用于配置服务器允许分片群集具有3个以上的配置服务器,因为副本集最多可具有50个成员。要将配置服务器部署为副本集,配置服务器必须运行WiredTiger存储引擎。
在3.4版中,MongoDB 删除了对SCCC配置服务器的支持。
当用于配置服务器时,以下限制适用于副本集配置:
对于配置服务器副本集的每个成员:
重要
在更换主要部件之前,请更换次要部件。
将mongo
外壳连接到配置服务器副本集的主服务器,并用于rs.add()
添加新成员。
小费
当新添加的辅助服务器的votes
且
其priority
设置大于零时,在其初始同步期间,即使该辅助服务器由于其数据不一致而无法提供读取服务或成为主服务器,但仍将作为投票成员。
这可能导致多数投票成员在线但无法选举主要成员的情况。为避免这种情况,请考虑首先使用和添加新的辅助服务器
。然后,一旦成员转换为
状态,即可使用来更新其优先级和投票。priority :0
votes :0
SECONDARY
rs.reconfig()
初始同步过程将所有数据从配置服务器副本集的一个成员复制到新成员,而无需重新启动。
mongos
实例自动识别配置服务器副本集成员中的更改,而无需重新启动。
确保新成员已达到SECONDARY
状态。要检查副本集成员的状态,请运行
rs.status()
:
重新配置副本集以更新新成员的投票和优先级:
n
数组中新成员的数组索引
在哪里members
。
警告
rs.reconfig()
壳方法可以强制当前主下台,这将导致一个选举。当主服务器降级时,将
mongod
关闭所有客户端连接。虽然这通常需要10到20秒,但请尝试在计划的维护期间进行这些更改。如果要更换主要部件,请先关闭主要部件,然后再关闭。
在替换配置服务器的初始同步完成后,从mongo
连接到主服务器的外壳开始,用于
rs.remove()
删除旧成员。
mongos
实例自动识别配置服务器副本集成员中的更改,而无需重新启动。
mongos
实例¶在版本3.2中更改:使用副本集配置服务器,mongos
实例在--configdb
或sharding.configDB
设置配置服务器副本集名称中指定实例,并至少指定一个副本集成员。分片mongos
群集的实例必须指定相同的配置服务器副本集名称,但可以指定副本集的不同成员。
如果mongos
实例在--configdb
或sharding.configDB
设置中指定了迁移的副本集成员,请在下次重启mongos
实例时更新配置服务器设置
。
有关更多信息,请参阅启动Sharded Cluster的mongos。
一次迁移一个碎片。对于每个分片,请遵循本节中的适当步骤。
要迁移分片群集,请分别迁移每个成员。首先迁移非主成员,然后再迁移主 最后。
如果副本集具有两个投票成员,请向副本集添加一个仲裁程序,以确保该副本集在迁移过程中保持其多数票可用。您可以在完成迁移后删除仲裁程序。
将数据目录(即dbPath
)移动到新计算机上。
mongod
在新位置重新启动该过程。
连接到副本集的当前主副本。
如果成员的主机名已更改,请使用rs.reconfig()
来使用
新的主机名更新副本集配置文档。
例如,以下命令序列将更新
阵列中位置2
上实例的主机名members
:
有关更新配置文档的更多信息,请参见 示例。
要确认新配置,请发出rs.conf()
。
等待成员恢复。要检查成员的状态,请发出
rs.status()
。
在迁移副本集的主要数据库时,该集合必须选择一个新的主要数据库。此故障转移过程使副本集在选举期间无法正常执行读取或接受写入操作,该过程通常很快完成。如果可能,请在维护时段内计划迁移。
降级主数据库以允许正常的故障转移过程。要退出主要数据库,请连接到主要数据库并发出
replSetStepDown
命令或rs.stepDown()
方法。以下示例显示了该rs.stepDown()
方法:
一旦主要成员卸任,另一个成员成为
PRIMARY
状态。若要迁移降级的主数据库,请按照“ 迁移副本集碎片成员”过程进行操作
您可以检查的输出rs.status()
以确认状态更改。
要完成迁移,请重新启用平衡器以恢复 块迁移。
连接到集群的一个mongos
实例并传递
true
给sh.startBalancer()
方法:[2]
要检查平衡器状态,请发出该sh.getBalancerState()
方法。
有关更多信息,请参阅启用平衡器。
[2] | 从MongoDB 4.2开始,sh.startBalancer() 还可以对分片群集进行自动拆分。 |