MongoDB分片配置问题:无法在mongos中添加集群节点IP
解决MongoDB 4.2分片配置中mongos启动报错的问题
错误原因分析
你遇到的FailedToParse: invalid url错误,核心原因是MongoDB 4.2版本中,mongos的configDB配置格式要求必须指定配置服务器副本集的名称,格式为副本集名称/节点地址1:端口,节点地址2:端口,...,而你当前的配置直接写了节点列表,缺少副本集名称前缀。另外你配置了3个configdb节点,但实际只有两台服务器,这里存在配置与实际环境不匹配的问题,需要同步调整。
正确配置步骤
1. 先将配置服务器部署为副本集
MongoDB 3.4及以上版本,分片集群的配置服务器必须以副本集模式运行,不能是独立实例。针对你两台服务器的情况,按以下步骤配置:
- 修改两台服务器上的
mongod.conf,指定为配置服务器角色并开启副本集:
systemLog: destination: file path: /var/log/mongod/mongod.log processManagement: fork: true net: bindIp: 0.0.0.0 # 允许集群内其他节点访问,不要仅绑定localhost port: 27017 storage: dbPath: /var/lib/mongo journal: enabled: true sharding: clusterRole: configsvr # 标记为配置服务器 replication: replSetName: configRS # 定义副本集名称,后续mongos配置要和这个一致
- 启动两台服务器的
mongod服务:
mongod -f /etc/mongod.conf
- 连接到其中一台配置服务器,初始化副本集:
mongo --host 172.28.129.131:27017 rs.initiate({ _id: "configRS", configsvr: true, members: [ { _id: 0, host: "172.28.129.131:27017" }, { _id: 1, host: "172.28.136.157:27017" } ] })
2. 修改mongos.conf的configDB配置
将sharding.configDB调整为副本集名称+节点地址列表的格式,示例如下:
systemLog: destination: file path: /var/log/mongos/mongos.log processManagement: fork: true net: bindIp: 0.0.0.0 # 若需要外部访问,不要仅绑定localhost port: 27017 sharding: configDB: configRS/172.28.129.131:27017,172.28.136.157:27017
这里的configRS必须和你初始化配置服务器副本集时的replSetName完全一致。
3. 启动mongos并验证配置
执行启动命令:
mongos -f /path/to/mongos.conf
启动成功后连接mongos,查看集群状态确认配置生效:
mongo --host localhost:27017 sh.status()
额外注意事项
- 确保两台服务器之间的27017端口互通,防火墙需开放该端口的集群内访问权限。
- 不要将
bindIp设置为localhost,否则mongos或配置服务器无法被集群内其他节点访问。 - MongoDB 4.2版本的配置服务器副本集必须显式设置
configsvr角色,不能遗漏。
内容的提问来源于stack exchange,提问作者Aravind rajamani
相关产品推荐
相关产品推荐

