【问题标题】:Remotely connecting to MongoDB http interface on EC2 server远程连接到 EC2 服务器上的 MongoDB http 接口
【发布时间】:2013-01-17 05:11:32
【问题描述】:

我无法远程连接到 AWS ec2 服务器上的 mongodb http 接口。

我检查了日志并确认它正在侦听端口 28017。我已经使用 netstat -a 验证了 tcp 端口 28017 已打开。我已经在安全组中启用了 28017。

我使用 ifconfig 获取我的 IP,并尝试使用 IP:28017 访问 http 接口。什么都没发生。没有错误,什么都没有。

我已经在我的 mongod.conf 文件中添加了 rest = true 并且我使用 'sudo service mongod restart' 将 mongod 作为服务启动

我什至尝试使用 'sudo mongod --rest' 启动 mongod,但无济于事。

这是 tail -f /log/mongod.conf 显示的内容:

Sat Feb  2 02:06:54 [initandlisten] MongoDB starting : pid=3919 port=27017 dbpath=/data 64-bit host=domU-12-31-39-12-3A-A2
Sat Feb  2 02:06:54 [initandlisten] db version v2.2.2, pdfile version 4.5
Sat Feb  2 02:06:54 [initandlisten] git version: d1b43b61a5308c4ad0679d34b262c5af9d664267
Sat Feb  2 02:06:54 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
Sat Feb  2 02:06:54 [initandlisten] options: { config: "/etc/mongod.conf", dbpath: "/data", fork: "true", logappend: "true", logpath: "/log/mongod.log", pidfilepath: "/var/run/mongodb/mongod.pid", rest: "true" }
Sat Feb  2 02:06:54 [initandlisten] journal dir=/data/journal
Sat Feb  2 02:06:54 [initandlisten] recover : no journal files present, no recovery needed
Sat Feb  2 02:06:54 [initandlisten] waiting for connections on port 27017
Sat Feb  2 02:06:54 [websvr] admin web console waiting for connections on port 28017

这是 netstat -a 显示的内容:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 localhost:smtp              *:*                         LISTEN
tcp        0      0 *:27017                     *:*                         LISTEN
tcp        0      0 *:mysql                     *:*                         LISTEN
tcp        0      0 *:28017                     *:*                         LISTEN
tcp        0      0 *:ssh                       *:*                         LISTEN
tcp        0    272 domU-12-31-39-12-3A-A2.:ssh pool-108-54-50-116.ny:50722 ESTABLISHED
tcp        0      0 *:ssh                       *:*                         LISTEN
udp        0      0 *:bootpc                    *:*
udp        0      0 domU-12-31-39-12-3A-A2.c:ntp *:*
udp        0      0 localhost:ntp               *:*
udp        0      0 *:ntp                       *:*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ACC ]     STREAM     LISTENING     5402   @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     40948  /var/lib/mysql/mysql.sock
unix  2      [ ACC ]     SEQPACKET  LISTENING     5468   @/org/kernel/udev/udevd
unix  2      [ ACC ]     STREAM     LISTENING     6332   /var/run/dbus/system_bus_socket
unix  9      [ ]         DGRAM                    6278   /dev/log
unix  2      [ ACC ]     STREAM     LISTENING     182622 /tmp/mongodb-27017.sock
unix  3      [ ]         STREAM     CONNECTED     182434
unix  3      [ ]         STREAM     CONNECTED     182433
unix  2      [ ]         DGRAM                    182429
unix  2      [ ]         DGRAM                    131031
unix  2      [ ]         DGRAM                    40170
unix  2      [ ]         DGRAM                    19247
unix  2      [ ]         DGRAM                    7231
unix  2      [ ]         DGRAM                    7212
unix  2      [ ]         DGRAM                    7194
unix  3      [ ]         STREAM     CONNECTED     6341   /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     6340
unix  3      [ ]         STREAM     CONNECTED     6336
unix  3      [ ]         STREAM     CONNECTED     6335
unix  3      [ ]         DGRAM                    5484
unix  3      [ ]         DGRAM                    5483

【问题讨论】:

  • 这可能不相关,但请查看此站点:MongoDB EC2 特别是这一提示:默认情况下,数据库现在将侦听端口 27017。Web 管理 UI 将在端口上28017 和这个链接Understanding Amazon EC2 Security
  • 谢谢你,但我已经确定安全组是正确的。我已经用 0.0.0.0/0 从外部打开了 28017。
  • 您是否检查过您的/etc/mongod.conf 中没有bind_ip 限制?在mongo shell 中,您还可以检查db.getSiblingDB('admin').runCommand({'getCmdLineOpts':1}) 中的bind_ip 值。如果不存在,则 bind_ip 为“任意”。

标签: http mongodb rest interface amazon-ec2


【解决方案1】:

我在尝试远程访问 mongo shell 时遇到了类似的问题,其中一些答案对部分解决方案有所帮助。总结一下:

  • 公共 IP/DNS:在 EC2 管理控制台上选择您的实例,并确保它具有公共 IP 或公共 DNS。 AWS 正在将更多默认设置转移到虚拟私有云 (VPC) 中,并且可以启动到只有私有 IP 地址(VPC 内部)的云中。如果您没有公共 DNS 或 IP,则需要 allocate an Elastic IP

  • 安全组端口:再次查看 EC2 控制台上的实例详细信息,找到安全组并选择“查看规则”。假设您使用的是默认 Mongo 端口,您应该从0.0.0.0/0 或(更安全)从您的 IP 地址为 TCP 打开 2701728017。如果没有,请为您的实例选择一个安全组,然后从控制台转到 Inbound > Edit > Add Rule > Custom TCP RulePort Range: 27017 和适当的 IP Source。对于http接口,为Port Range: 28017添加一条规则。

  • /etc/mongod.conf

    • 取消注释port=27017 以确保您拥有默认端口(我认为这实际上没有必要,但这让我感觉更好,很高兴知道在哪里更改默认端口...)
    • 注释掉 bind_ip=127.0.0.1 以便监听外部接口(例如远程连接)
    • 如果要使用http接口,请取消注释httpinterface=true
  • 创建用户:您需要create an admin and/or user才能远程访问数据库。

【讨论】:

  • 我已经拉头发好几个小时了。太感谢了。评论bind_ip=127.0.0.1工作。
  • @Saurabh 很高兴它有帮助:)
【解决方案2】:

对于您的 EC2 实例,添加两个入站自定义 TCP 规则以允许端口 27017 和 28017 上的入站流量。

确保在 /etc/mongod.conf 文件中注释掉“bind_ip = 127.0.0.1”

重启mongod服务器: $sudo service mongod 重启

【讨论】:

    【解决方案3】:

    听起来您的安全组设置有问题。您可以尝试从盒子本身访问管理界面:

    curl http://localhost:28017/
    

    如果您恢复内容,那么您的安全组设置(或盒子本身的防火墙)可能有问题。

    【讨论】:

      【解决方案4】:

      您是否检查过它正在侦听公共 IP 以及该端口?它可能正在监听本地主机。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-16
        • 1970-01-01
        • 2012-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多