我正在尝试连接远程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
希望专家会帮助我。
答案 0 :(得分:0)
解决方案是ssh端口转发。
首先请确保您可以使用SSH进入mongo实例服务器并访问主副本节点和辅助副本节点
然后在具有公共IPv4地址的mongo服务器上使用这些设置为您的安全组创建新的入站规则
用于端口转发部分
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