连接失败,提示:No route to host以及connection attempt failed
问题描述
使用如下命令连接DDS实例时报错。
./mongo --host 192.168.1.6 --port 8635 -u rwuser -p xxxxxxxxx --authenticationDatabase admin --ssl --sslCAFile /root/ca.crt –sslAllowInvalidHostnames
报错信息如下:
MongoDB shell version v3.4.17 connecting to: mongodb://192.168.1.6:8635/ 2019-09-19T09:38:36.954+0800 W NETWORK [thread1] Failed to connect to 192.168.1.6:8635, in(checking socket for error after poll), reason: No route to host 2019-09-19T09:38:36.954+0800 E QUERY [thread1] Error: couldn't connect to server 192.168.1.6:8635, connection attempt failed : connect@src/mongo/shell/mongo.js:240:13 @(connect):1:6 exception: connect failed
可能原因
- DDS实例的端口错误,不可用。
- DDS实例与ECS不在同一个区域。
- DDS实例与ECS不在同一个子网。
排查思路
- 检查DDS实例与ECS是否在同一个区域、同一个安全组和子网内。
- 登录DDS控制台,单击实例名称,在基本信息页面查看DDS实例所在的区域、VPC、安全组和子网信息。
图1 查看DDS实例网络信息
- 登录弹性云服务器控制台,单击云服务器名称,在基本信息页面,查看当前ECS所在的区域、VPC、安全组和子网信息。
图2 查看ECS网络信息
- 登录DDS控制台,单击实例名称,在基本信息页面查看DDS实例所在的区域、VPC、安全组和子网信息。
- 检查实例的端口是否正确,并通过curl命令检查端口是否可用。
- 单击实例名称,在基本信息页面查看当前实例的端口信息。
图3 查看实例端口
- 通过curl命令确认端口是否可用,示例:
curl 192.168.1.6:8635
提示“It looks like you are trying to access MongoDB over HTTP on the native driver port.”表示可以正常连接该IP地址,且8635端口可以正常通信。
图4 回显信息
- 单击实例名称,在基本信息页面查看当前实例的端口信息。
处理方法
- 选择和DDS实例处于同一个区域、VPC和子网的ECS进行连接。或者可以绑定弹性公网IP,通过公网连接实例。
- 确保输入的端口信息和控制台查看的实际端口信息一致。
背景知识
- 内网连接实例时,需要ECS与待连接的DDS实例的区域、VPC子网和安全组需要一致。
- 内网无法连接实例时,也可以绑定弹性公网IP,通过公网方式连接实例。