You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:45:26