尝试连接到MongoDB 部署时,应用程序可能会遇到服务器选择超时错误。此错误表示客户端驾驶员无法在配置的超时时间内选择合适的服务器。
服务器选择超时的常见原因是网络连接问题、 IP访问权限限制、DNS SRV 解析失败或 TLS 配置问题。
本页介绍服务器选择超时的常见原因,并提供诊断和解决这些问题的步骤。如果完成以下步骤后问题仍然存在,联系 技术支持。
先决条件检查
要验证应用程序是否遇到服务器选择超时,查看客户端错误消息。常见示例包括:
MongoTimeoutError: Server selection timed out after 30000 msMongoServerSelectionError: connection timed outMongoServerSelectionError: getaddrinfo ENOTFOUNDNo suitable servers found (`serverSelectionTryOnce` set): [Failed to resolve '<my-database-host>]
检查部署可用性
在Atlas部署中,在Atlas用户界面的“集群”页面中确认集群状态为
Active(带有绿点状态指示器)。在自管理部署中,验证
mongod进程正在运行并侦听预期端口。
检查日志消息
在服务器或驾驶员中启用日志消息,以确认客户端重复尝试服务器发现,直到超时。
客户端日志
客户端日志可能会显示重复尝试发现集群拓扑结构,然后超时。消息可能会引用:
DNS 解析失败。
TLS 握手错误。
未完成的连接尝试。
服务器日志(自我管理)
在您运行getLog 命令时或在配置的日志目标上,如果服务器日志显示没有传入连接尝试,这通常表明存在网络连接问题。
常见问题和解决方案
以下部分介绍服务器选择超时的常见原因以及解决方法。
本地网络或防火墙阻止连接
如果客户端无法与部署中的任何托管建立 TCP 连接,则服务器选择将失败。
要恢复连接:
验证 TCP 端口
27017(或配置的自定义端口)是否允许来自客户端托管的出站流量。检查防火墙规则、安全组和网络 ACL 的限制。
确保没有 VPN、代理或本地防火墙拦截连接。
进行更改后重试连接。
不允许使用客户端IP地址 (Atlas)
如果集群可用但没有收到传入连接:
在Atlas 用户界面中,导航到网络访问。
验证客户端的公共IP解决是否包含在IP访问列表中
如果需要进行测试,请暂时允许来自
0.0.0.0/0的访问权限。保存更改并等待配置应用。
重试连接。
有关IP访问权限列表的更多信息,请参阅 配置IP访问列表条目。
DNS SRV 解析失败
如果客户端在 SRV(服务)查找期间报告 ENOTFOUND 等错误或失败,则环境可能无法解析 DNS SRV 记录。
验证 DNS SRV 解析
从客户端托管执行以下步骤:
从连接字符串中识别主机名:
mongodb+srv://<cluster-name>.mongodb.net 运行 DNS SRV 查找:
nslookup -type=SRV _mongodb._tcp.<cluster-name>.mongodb.net 验证该命令是否返回指向MongoDB主机的一个或多个 SRV 记录。
如果没有返回记录:
确认主机名正确。
检查您的 DNS提供商是否支持 SRV 记录。
确认出站 DNS 查询未被阻止。
解决 SRV 限制
如果无法解析 SRV 记录,则需要从部署中检索标准连接字符串(非 SRV),更新应用程序以使用:
mongodb://host1,host2,host3/?replicaSet=<name>
重试连接。
TLS 配置问题
如果错误输出引用 TLS 或 SSL 握手失败,您可以采取以下步骤来解决常见的 TLS 配置问题:
验证客户端驾驶员是否支持 TLS 1.2 或更高版本。
确保系统根证书是最新的。
对于自管理部署:
确认证书主机名与连接字符串匹配。
验证完整的证书链是否可用。
完成这些步骤后,重试连接。
要学习;了解有关 TLS/SSL 的更多信息以及如何学习;了解TLS/SSL 连接,请参阅 TLS/SSL(传输加密)。
验证分辨率
解决根本的问题后:
客户端建立连接而不会超时。
应用程序日志表明服务器选择成功。
Atlas指标(如果适用)显示活动连接。
服务器日志记录传入的客户端连接。
为获得更多支持而收集的诊断信息
完整的客户端错误消息和堆栈跟踪
MongoDB连接字符串(凭证已删除)
驱动程序名称和版本
MongoDB服务器版本
DNS SRV 查找输出
网络连接测试结果
相关MongoDB日志