从MongoDB 3.6开始,所有分片都必须是副本集。在将3.4分片群集升级到版本3.6之前,必须将作为独立mongod
实例运行的所有分片转换为副本集分片。
本教程介绍了将独立的分片转换为分片副本集的过程。该过程特定于独立的分片。要将仅独立版本转换为副本集(即不属于任何分片群集的一部分),请参阅 将独立版本转换为副本集。
重要
以下过程将独立分片转换为单成员副本集分片。该过程假定单个成员与以前在同一主机和端口上运行。
使用--replSet
选项重新启动碎片实例,以指定新副本集的名称。确保名称是唯一的(例如,您可以将用作副本集名称);特别是,分片副本集不得使用与配置服务器副本集相同的名称。shard
name
其他选项可以保持不变。
例如,以下命令启动独立实例作为名为的新副本集的成员shardA
。其他选项与以前相同。例如,--dbpath
使用独立的现有数据库路径,/srv/mongodb/db0
并且--port
与以前相同:
使用rs.initiate()
启动新的副本集:
副本集现在可以使用了。要查看副本集配置,请使用rs.conf()
。要检查副本集的状态,请使用rs.status()
。
与实例断开连接。
将mongo
外壳连接到分片群集的
mongos
实例之一,并检索分片信息:
<name>
用分片的名称替换。分片的<name>
与分片副本集名称分开(除非您使用分片名称作为副本集名称)。要检索分片的名称,请参见方法shards
结果中的部分sh.status()
。例如,如果的结果sh.status()
包括以下分片部分,则两个分片的名称分别为"shard0000"
和
"shard0001"
:
host
使用副本集信息更新信息:
用<replica-set>
副本集的名称替换。用<member>
副本集成员替换
。例如
shardA/mongodb1.example.net:27018
。
保存信息。
对分片群集中的下一个独立分片重复上述步骤。确保为每个分片副本集使用一个唯一的名称。
将分片独立实例转换为分片副本集后,通过重新启动分片群集的所有成员,强制分片群集的成员更新对其他分片连接字符串的了解:
mongos
实例要将成员添加到此副本集中,请使用rs.add()
方法。有关将成员添加到副本集中的更多信息,请参见
将成员添加到副本集中。
要将非分片独立副本转换为非分片副本集,请参阅 将独立副本转换为副本集。