MongoDB局域网副本集连接失败求助及解决方法
问题:跨机器连接WSL2上MongoDB副本集失败,报错ECONNREFUSED 127.0.0.1:27017
环境与现象
- 在WindowsPC1的WSL2上部署MongoDB副本集,PC1局域网IP为
192.168.10.108 - 另一台WindowsPC2(IP
192.168.10.106)通过MongoDB Compass连接:- 使用直接连接字符串可正常访问:
mongodb://admin:xxxxxx@192.168.10.108:27017/?directConnection=true - 使用副本集连接字符串时失败,报错
connect ECONNREFUSED 127.0.0.1:27017,连接字符串:mongodb://admin:xxxxx@192.168.10.108:27017,192.168.10.108:27018,192.168.10.108:27019/?replicaSet=rs0&retryWrites=true&w=majority&readPreference=secondary
- 使用直接连接字符串可正常访问:
- 补充:PC2的WSL2中用
mongosh --host 192.168.10.108可直接连接成功,但使用副本集连接字符串仍报相同错误
解决方法
问题根源:MongoDB副本集初始配置中,所有成员的host字段使用了localhost。当客户端以副本集模式连接时,MongoDB会将配置中的节点地址返回给客户端,客户端尝试连接127.0.0.1:27017,而该地址在PC2上指向自身,导致连接失败。
修改步骤:
- 登录到MongoDB副本集的主节点,执行命令查看当前副本集配置:
var oldConf = rs.conf() // 原配置示例: /* { members:[{ host: 'localhost:27017' },{ host: 'localhost:27018' },{ host: 'localhost:27019' }] } */ - 将所有成员的
host替换为PC1的局域网主机名(或直接使用PC1的局域网IP192.168.10.108),然后重新加载配置:
注:oldConf.members[0].host = 'xxx.ronnie:27017' oldConf.members[1].host = 'xxx.ronnie:27018' oldConf.members[2].host = 'xxx.ronnie:27019' rs.reconfig(oldConf)xxx.ronnie为PC1的局域网主机名,需确保PC2能通过该主机名解析到PC1的IP。
内容的提问来源于stack exchange,提问作者ronnie
相关产品推荐
相关产品推荐

