MongooseServerSelectionError:连接ECONNREFUSED

时间:2020-07-07 11:19:08

标签: node.js mongodb amazon-web-services amazon-ec2

我正在尝试连接远程EC2 mongodb,但这是说MongooseServerSelectionError:连接ECONNREFUSED awsip:27017

在aws mongodb配置文件中,我将bindIp更改为0.0.0.0,但没有更改安全性部分。

这是一个快速应用程序,我尝试将2种方式与aws mongodb连接,并且两种方式都遇到相同的错误,这是我的数据库设置:

Setup: 01

const DATABASE_URL = `mongodb://${cfg.dbUser}:${cfg.dbPass}@${cfg.dbHost}:${cfg.dbPort}/${cfg.dbName}`

server.listen(port, () => {
  mongoose.connect(DATABASE_URL,
    {
      // auth: {
      //   user: cfg.dbUser,
      //   password: cfg.dbPass
      // },
      useNewUrlParser: true,
      useUnifiedTopology: true,
    })
    .then(() => {
      console.log("[ ? ] AWS MongoDB database connected.");
      console.log(`[ Server ] waiting on: ${cfg.serverHost}:${port}`);
    })
    .catch(err => {
      console.log(
        "[ ? ] Database connection error",
        { Error: err }
      );
    })
});


Setup: 02

const DATABASE_URL = `mongodb://${cfg.dbHost}:${cfg.dbPort}/${cfg.dbName}`
server.listen(port, () => {
  mongoose.connect(DATABASE_URL,
    {
      auth: {
        user: cfg.dbUser,
        password: cfg.dbPass
      },
      useNewUrlParser: true,
      useUnifiedTopology: true,
    })
    .then(() => {
      console.log("[ ? ] AWS MongoDB database connected.");
      console.log(`[ Server ] waiting on: ${cfg.serverHost}:${port}`);
    })
    .catch(err => {
      console.log(
        "[ ? ] Database connection error",
        { Error: err }
      );
    })
});

我已经在AWS中创建了数据库,并创建了所有数据库用户权限凭证。

我正在使用dotenv加载所有aws credintial

当我尝试从我的机​​器连接MongoDB-Compass时,也是同样的问题。

connect ECONNREFUSED awsip:27017

这是我的终端图片 enter image description here

希望专家会帮助我。

1 个答案:

答案 0 :(得分:0)

解决方案是ssh端口转发。

首先请确保您可以使用SSH进入mongo实例服务器并访问主副本节点和辅助副本节点

然后在具有公共IPv4地址的mongo服务器上使用这些设置为您的安全组创建新的入站规则

  1. 自定义TCP 8000 0.0.0.0/0
  2. 自定义TCP 8000 :: / 0

用于端口转发部分

SSH端口转发(SSH隧道)在当前计算机上的端口与另一台服务器上的端口之间建立连接

这是一个例子

ssh -i aws-ssh-key.pem -g -N -f -L 8000:127.0.0.1:27017 ec2-user@10.0.8.10

启动此命令时,它的作用是打开的,并将本地端口从当前计算机8000连接到mongo服务器:端口127.0.0.1:27017,其用户名和地址为ec2-user@10.0.8.10

用于标志 -g,-N,-f,-L

-g 允许远程主机连接到本地转发的端口。

-N 不要执行远程命令。防止ssh打开服务器上的外壳程序

-f 在后台运行ssh。

-L 指定要使用的本地端口

运行此命令以列出进程

ps aux | grep ssh

运行此命令可以随时终止进程

kill -9 <pid>

我希望这能回答您的问题以获取更多参考

https://linux.die.net/man/1/ssh

https://www.youtube.com/watch?v=JKrO5WABdoY

https://jasonwatmore.com/post/2020/02/05/connect-to-remote-mongodb-on-aws-ec2-simply-and-securely-via-ssh-tunnel