如何连接到 MongoDB EC2 实例
Posted
技术标签:
【中文标题】如何连接到 MongoDB EC2 实例【英文标题】:How to connect to MongoDB EC2 instance 【发布时间】:2013-12-09 03:51:25 【问题描述】:我们有一个来自 Amazon MarketPlace 的 EC2 MongoDB 2.4 实例。 当我尝试使用 mongo 命令从我的计算机访问它时:
mongo xx-xx-xx-xx-xx.compute-1.amazonaws.com
我收到以下错误
Error: couldn't connect to server xx-xx-xx-xx-xx.compute-1.amazonaws.com:27017 at src/mongo/shell/mongo.js:147
exception: connect failed
我可以使用 ssh 连接到远程实例,因此可以访问。
端口为默认端口27017。
mongod 正在远程实例上运行和工作。
关于如何解决此问题的任何建议?
【问题讨论】:
端口 27017 未对远程连接开放?检查你的防火墙 Try this resource 我用这个解决了我的问题。 【参考方案1】:正如frisky所说,您必须在EC2安全组控制台中打开端口27017。 (要了解更多关于如何做到这一点:http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)
但您还需要更改 /etc/mongodb.conf 文件中的 bind_ip
变量。您需要注释该行或分配能够将数据库连接到该行的 ip。
【讨论】:
拯救了我的一天! bindIp(默认锁定到本地主机)的这个技巧是至关重要的 mongodb.conf 提示对我很有帮助。节省了我的时间和精力。 还有 .. 不要忘记重启你的 mongod 实例以使 /etc/mongod.conf 生效 我们可以将 bindIp 更改为 0.0.0.0 以便从所有主机进行连接。在这方面要小心,因为任何人只要知道您服务器的 IP,就可以连接到您的数据库。这只能在开发服务器上完成。请不要在生产服务器上这样做。【参考方案2】:以下两个步骤为我启用了远程连接:
-
在端口 27017 为我的 VPC 打开入站路由
VPC -> 安全 -> 安全组 -> 选择您的实例的 TCP 规则 -> 单击“编辑规则” -> 添加规则类型:“自定义 TCP 规则”,协议:TCP,端口范围:27017,来源:自定义 0.0。 0.0/0 -> 保存
-
SSH 进入您的实例 -> sudo vi /etc/mongod.conf -> 设置 bindIp: 0.0.0.0 -> 保存 -> sudo service mongod restart
之后,您将能够使用 mongo --host YOUR_INSTANCE_IP 连接到远程 mongo 实例
【讨论】:
谢谢伙计,虽然每个人都说只是评论 bindip(对我不起作用),但在将其设置为 0.0.0.0 后它就像一个魅力。 不要在不启用security
的情况下执行此操作,否则您将在互联网上打开您的数据库。
谢谢,兄弟拯救我的一天【参考方案3】:
由于 mongod 正在远程实例上运行和工作,您可以通过
访问您的 MongoDB 内容mongo xx-xx-xx-xx-xx.compute-1.amazonaws.com 或 mongo machine_elastic_IP
在此之前,您需要为该机器打开入站端口。默认情况下,端口 27017 对外部世界关闭。
更多信息请参考:http://docs.aws.amazon.com/gettingstarted/latest/wah/getting-started-security-group.html
【讨论】:
嗨,我按照你的建议做了。我通过添加如下的入站规则来更改现有实例的安全组...类型、协议、端口范围、源作为自定义 TCP 规则、TCP、27017、0.0.0.0/0。但是我仍然无法从外部访问它。任何建议。 frisky 我的 mongo db 实例没有任何公共 ip 或弹性 ip 如何连接到那个?【参考方案4】:亚马逊创建了未打开 27017 的 mongo 安全组。 向我的电脑打开端口 27017 解决了这个问题。
【讨论】:
不要在生产服务器上这样做!!此端口不在安全组中是有充分理由的。开放端口是一个重大的安全风险,绝对没有理由这样做(即使在非生产模式下也是如此)。直接在遥控器上通过 ssh 使用 ssh 隧道或 mongo 客户端! 如果它被锁定在一个 IP 上(如答案所示),它可以安全地用于配置数据库【参考方案5】:尝试从浏览器访问 xx-xx-xx-xx-xx.compute-1.amazonaws.com:27017,如果可行,则 ssh 进入实例。
停止 mongodb 服务器 删除文件/var/lib/mongodb/mongod.lock
再次启动 mongodb 服务器,并检查输入 mongo
是否进入 mongo shell 或给出任何错误。
如果出现错误,退出实例并再次 ssh 以检查 $mongo
,如果它打开了一个 mongo shell。如果上述更改后错误仍然存在,请尝试在此更改后重新启动。
这里唯一需要注意的是,在从任何应用程序访问它之前。 mongodb应该在终端独立工作。
【讨论】:
【参考方案6】:EC2 使用安全组控制访问,因此请确保访问 mongo db 主机的框位于允许访问此框的security group
中,并且为同一安全组启用了port
。
另一个问题可能是iptables
。检查 mongodb 框上的sudo service iptables status
,看看那里有什么规则。
确保您根据盒子的security
要求启用适当的端口。
【讨论】:
以上是关于如何连接到 MongoDB EC2 实例的主要内容,如果未能解决你的问题,请参考以下文章
在 Nodejs 中以编程方式连接到 Mongodb Amazon EC2 实例
从 Elastic Beanstalk 连接到托管在 AWS ec2 上的 MongoDB