本地PyMongo无法连接AWS EC2上MongoDB副本集问题排查
本地PyMongo无法连接AWS EC2上的MongoDB副本集排查求助
我在AWS EC2实例上部署了一主两从的MongoDB副本集,同VPC内的其他EC2实例可通过PyMongo正常连接,本地电脑用Studio 3T也能连接,但本地使用PyMongo却无法连接——从日志看连接被接受后50ms就断开。
环境信息
- 运行MongoDB的EC2系统:Amazon Linux 2
- 本地电脑:macOS 12.5.1 M1芯片
- MongoDB版本:v4.2.22
- Python版本:3.8.10
- MongoDB状态:正常运行,监听端口27017
- EC2安全组:已添加
0.0.0.0/0的27017 TCP入站规则,同时开放了所有IP和端口的ICMP协议 - MongoDB配置:
/etc/mongod.conf中net.bindIp设为0.0.0.0,也试过net.bindIpAll: true并重启mongod,无变化 - SSH连接:本地可免私钥SSH连接该EC2(Studio 3T和同VPC内EC2连接均无需私钥)
MongoDB日志(本地IP为1.2.3.4:12345)
2023-04-19T10:40:24.448+0000 I NETWORK [listener] connection accepted from 1.2.3.4:12345 #140572 (47 connections now open) 2023-04-19T10:40:24.450+0000 I NETWORK [conn140572] received client metadata from 1.2.3.4:12345 conn140572: { driver: { name: "PyMongo", version: "4.3.3" }, os: { type: "Darwin", name: "Darwin", architecture: "arm64", version: "12.5.1" }, platform: "CPython 3.8.10.final.0" } 2023-04-19T10:40:24.497+0000 I NETWORK [conn140572] end connection 1.2.3.4:12345 (46 connections now open)
已尝试的连接方式
1. 直接连接主节点
cli = pymongo.MongoClient('mongodb://username:password@ec2-1-1-1-1.eu-central-1.compute.amazonaws.com')
2. 使用Studio 3T的连接字符串
cli = pymongo.MongoClient('mongodb://username:password@ec2-1-1-1-1.eu-central-1.compute.amazonaws.com/admin?authSource=admin')
本地终端用
mongosh使用上述字符串可正常连接。
3. SSH隧道跳转(同VPC内EC2中转)
server = SSHTunnelForwarder( ('ec2-2-2-2-2.eu-central-1.compute.amazonaws.com', 22), # 同VPC内可连PyMongo的EC2 ssh_username='ubuntu', ssh_pkey='/path/to/key', # 需指定密钥文件完整路径 remote_bind_address=('1.1.1.1', 27017), # MongoDB所在EC2公网IP local_bind_address=('127.0.0.1', 27017) # 绑定到本地 ) server.start() # 服务器启动无错误 # 连接数据库 client = pymongo.MongoClient( host='127.0.0.1', port=27017, username='username', password='password' ) client.server_info()
补充:本地用Studio 3T通过该SSH隧道可正常连接。
已查阅相关Stack Overflow帖子但未找到解决方案,恳请提供排查思路。
MongoDB所在EC2的netstat -an结果

内容的提问来源于stack exchange,提问作者Erce Can Bektüre
相关产品推荐
相关产品推荐

