无法通过Node.js连接AWS EC2上的MongoDB服务器问题求助
远程连接EC2 MongoDB副本集失败的解决办法
问题背景
AWS EC2 Linux实例上运行MongoDB v6.0.4副本集,EC2本机操作正常,Mac可ping通实例,但远程Node.js连接时报错:getaddrinfo ENOTFOUND ip-xx-x-xx-xxx.ap-south-1.compute.internal
环境与配置
核心配置(/etc/mongod.conf)
# network interfaces net: port: 27017 ipv6: true bindIp: ::,0.0.0.0 # Tried with public DNS and IP as well here. security: authorization: enabled keyFile: /etc/mongodkeyfile.key replication: replSetName: rs0
连接代码
const { MongoClient } = require("mongodb"); const uri = "mongodb://<user>:<pwd>@<EC2-PublicIP>:27017/<dbname>?replicaSet=rs0&useUnifiedTopology=true"; const client = new MongoClient(uri); async function run() { try { const database = client.db('test'); const myColl = database.collection("pizzas"); const doc = { name: "Neapolitan pizza", shape: "round" }; const result = await myColl.insertOne(doc); console.log(`A document was inserted with the _id: ${result.insertedId}`); } finally { await client.close(); } } run().catch(console.dir);
问题原因
副本集初始化时,节点默认使用EC2内网hostname注册,远程客户端无法解析该内网地址,导致服务器选择失败。
解决步骤
1. 更新副本集节点地址
在EC2本机通过mongosh连接数据库:
mongosh --authenticationDatabase admin -u <你的用户名> -p <你的密码>
执行以下命令修改副本集配置:
// 获取当前配置 var cfg = rs.conf(); // 将第一个节点的host替换为EC2公网IP cfg.members[0].host = "<EC2公网IP>:27017"; // 应用新配置 rs.reconfig(cfg);
等待副本集重新同步,可通过rs.status()查看状态,确认stateStr为PRIMARY。
2. 确认EC2安全组规则
确保EC2安全组的入站规则允许你的Mac IP访问27017端口:
- 规则类型:自定义TCP
- 端口范围:27017
- 来源:你的Mac公网IP(测试阶段可临时用
0.0.0.0/0,生产环境务必限制IP)
3. 测试连接
保持Node.js连接字符串不变,重新运行代码,验证是否能成功插入数据。
内容的提问来源于stack exchange,提问作者Lovababu Padala
相关产品推荐
相关产品推荐

