使用Djongo连接MongoDB出现连接超时错误,寻求解决方案
使用Djongo连接MongoDB Atlas时的连接超时错误排查方案
问题背景
尝试通过Djongo连接MongoDB Atlas集群时,出现服务器选择超时错误,所有分片节点连接均被关闭。
相关配置文件
settings.py

requirements.py

docker-compose.yml

报错信息
raise ServerSelectionTimeoutError( pymongo.errors.ServerSelectionTimeoutError: ac-yyvwtll-shard-00-00.gcdfin1.mongodb.net:27017: connection closed, ac-yyvwtll-shard-00-01.gcdfin1.mongodb.net:27017: connection closed, ac-yyvwtll-shard-00-02.gcdfin1.mongodb.net:27017: connection closed, Timeout: 30s, Topology Description: <TopologyDescription id: 62f603001b491814aad289bb, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('ac-yyvwtll-shard-00-00.gcdfin1.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-yyvwtll-shard-00-00.gcdfin1.mongodb.net:27017: connection closed')>, <ServerDescription ('ac-yyvwtll-shard-00-01.gcdfin1.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-yyvwtll-shard-00-01.gcdfin1.mongodb.net:27017: connection closed')>, <ServerDescription ('ac-yyvwtll-shard-00-02.gcdfin1.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-yyvwtll-shard-00-02.gcdfin1.mongodb.net:27017: connection closed')>]>
排查与解决步骤
- 检查Atlas IP白名单:MongoDB Atlas只允许白名单内的IP访问集群,确认你的服务器/本地机器IP已添加到Atlas控制台的IP白名单中,同时确保27017端口未被防火墙或安全组拦截。可通过以下命令测试连通性:
nc -zv ac-yyvwtll-shard-00-00.gcdfin1.mongodb.net 27017 - 验证版本兼容性:确认requirements中的Djongo版本与Atlas集群的MongoDB版本匹配,部分旧版Djongo可能不支持新版MongoDB的连接协议,建议参考Djongo官方文档使用兼容版本。
- 修正连接字符串配置:确保settings.py中的数据库连接字符串包含必要参数:
- 开启SSL(Atlas强制要求):
ssl=True - 指定副本集名称:
replicaSet=atlas-xxxxxx-shard-0(替换为你的集群副本集名称) - 认证数据库设置为
admin:authSource=admin
- 开启SSL(Atlas强制要求):
- 排查Docker网络限制:如果服务运行在Docker容器中,检查docker-compose的网络配置,确保容器具有外部网络访问权限。可进入容器内部执行连通性测试,确认容器内能否正常解析Atlas节点域名并建立连接。
- 调整PyMongo连接参数:在连接配置中添加超时参数,避免因网络波动导致连接失败:
'OPTIONS': { 'connectTimeoutMS': 30000, 'socketTimeoutMS': 30000, 'heartbeatFrequencyMS': 10000 }
内容的提问来源于stack exchange,提问作者Fasil K
相关产品推荐
相关产品推荐

