MongoDB副本集连接失败求助:getaddrinfo ENOTFOUND primary
MongoDB副本集连接失败:getaddrinfo ENOTFOUND primary 解决方法
错误原因
你的MongoDB副本集节点配置中使用了主机名(比如primary)而非公网IP,但客户端所在环境无法解析该主机名,导致驱动尝试从副本集配置获取节点地址时失败。
解决步骤
1. 验证副本集节点配置
直连任意一个可用节点(比如主节点),查看当前副本集配置:
mongo mongodb://sorterapp:SorTErRwXpressXb@3.109.226.31:27017/?authSource=sorter
进入shell后执行:
rs.conf()
查看返回结果中members数组的host字段,确认是否为无法解析的主机名(如primary:27017)而非你提供的公网IP。
2. 修改副本集节点地址为公网IP
如果members中的host是主机名,在主节点的shell中执行以下命令修改配置:
var cfg = rs.conf(); // 逐个替换为对应节点的公网IP和端口 cfg.members[0].host = "3.109.226.31:27017"; cfg.members[1].host = "15.207.33.131:27017"; cfg.members[2].host = "13.234.13.53:27017"; // 重新应用配置(force参数确保主节点可用时强制生效) rs.reconfig(cfg, {force: true});
执行完成后再次运行rs.conf()确认配置已更新。
3. 测试连接
使用原连接URL重新尝试连接,此时驱动将获取到可解析的公网IP地址,正常建立副本集连接。
备选临时方案(仅测试环境)
如果无法修改副本集配置,可在客户端机器的hosts文件中添加主机名到IP的映射:
- Windows:
C:\Windows\System32\drivers\etc\hosts - Linux/macOS:
/etc/hosts
添加内容示例:
3.109.226.31 primary
但此方案不适合生产环境,仅用于临时测试。
内容的提问来源于stack exchange,提问作者user3184674
相关产品推荐
相关产品推荐

