MongoDB 3.6跨机器连接异常:一台机器无法连接另一台可正常访问
排查MongoDB 3.6跨机器连接失败的问题
这种情况我之前处理过好几次,结合你提到的「第二台机器能正常访问、第一台报错连接失败」的现象,咱们从几个常见方向逐一排查:
1. 网络与防火墙限制(最常见原因)
首先排除最基础的网络问题:
- 测试网络连通性:在第一台机器上执行
ping xxxxxxx,如果丢包或者完全不通,说明两台机器之间的网络链路有问题(比如路由策略、VLAN隔离),需要联系运维调整网络配置。 - 检查端口可达性:用
telnet xxxxxxx 27017或者nc -zv xxxxxxx 27017测试27017端口。如果返回「connection refused」,大概率是防火墙拦截了:- 服务器端:MongoDB 3.6默认只绑定
127.0.0.1(仅允许本地访问),需要修改mongod.conf配置文件中的net.bindIp字段,改成0.0.0.0(允许所有IP访问)或者指定第一台机器的IP,然后重启MongoDB服务:sudo systemctl restart mongod(CentOS/Ubuntu)或net stop MongoDB && net start MongoDB(Windows)。 - 第一台机器本地:检查本地防火墙(比如iptables、firewalld、Windows防火墙)是否禁用了对27017端口的出站访问,放行该端口即可。
- 服务器端:MongoDB 3.6默认只绑定
2. 认证与权限配置问题
虽然第二台能连接,但第一台可能存在认证错误:
- 检查连接命令的认证参数:确保第一台机器使用的连接命令包含正确的认证信息,比如带用户名密码的连接格式:
如果省略了mongo "mongodb://your_username:your_password@xxxxxxx:27017/your_db?authSource=admin"authSource,可能会导致认证失败(MongoDB默认从admin库读取用户信息)。 - 验证用户权限:在MongoDB服务器上执行
use admin,然后db.getUser("your_username"),确认该用户拥有readWrite或对应数据库的访问权限,且没有IP白名单限制(如果配置了IP绑定规则)。
3. DNS解析问题
如果你用的是域名而非IP连接服务器:
- 在第一台机器上尝试直接用服务器IP连接,比如
mongo xxxxxxx_ip:27017,如果能成功,说明是DNS解析失败导致的。可以检查第一台机器的/etc/hosts(Linux)或C:\Windows\System32\drivers\etc\hosts(Windows),添加服务器域名与IP的映射,或者联系DNS管理员修复解析问题。
4. 客户端环境异常
最后检查第一台机器的MongoDB客户端:
- 执行
mongo --version确认版本确实是3.6.x,和服务器版本一致(虽然3.6兼容性不错,但版本差异偶尔也会导致连接问题)。 - 如果客户端文件损坏,尝试重新安装MongoDB客户端包,替换掉可能损坏的
mongoshell文件。
内容的提问来源于stack exchange,提问作者Cracken




