【问题标题】:pymongo cannot connect to database on remote serverpymongo 无法连接到远程服务器上的数据库
【发布时间】:2015-09-10 22:22:37
【问题描述】:

我已经设置了一个运行在外部主机服务器上的 mongodb 服务器,我可以通过在客户端计算机 shell 中执行以下操作轻松连接 mongo 客户端:

162.243.27.34 --port 27017

但是当我尝试使用 python 使用 pymongo 连接到服务器时,我得到以下输出

import pymongo
client = pymongo.MongoClient('162.243.27.34', 27017)

错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pymongo/mongo_client.py", line 352, in __init__
    raise ConnectionFailure(str(e))
pymongo.errors.ConnectionFailure: could not connect to 162.243.27.34:27017: [Errno 111] Connection refused

我在这里做错了什么?

更新 - 更多信息

IP 162.243.27.34 上的数据库服务器和客户端是具有不同 IP 的单独服务器。在上述两种情况下的示例中,我都尝试从远程客户端服务器进行连接,而不是连接到“localhost”。

数据库服务器上有防火墙,但客户端确实可以访问,并且由于 mongo 客户端命令行程序从客户端服务器连接良好,我假设从客户端连接到数据库服务器没有网络问题,而是我使用python连接的方式存在问题。

更新 2

运行命令:

cat /etc/mongodb.conf

显示:

bind_ip = 127.0.0.1
#port = 27017

我也在使用 MongoDB shell 版本:2.0.4

【问题讨论】:

  • 您是在本地还是远程从 shell 连接。那么,mongod 正在运行的同一服务器实例上的 shell 连接是吗?如果是这样,那么您是否使用了相同的 IP 地址或本地主机(127.0.0.1)?
  • @NeilLunn 感谢您的回复,我在问题中添加了一些细节
  • 好吧,说清楚。您正在使用 same IP 地址从您尝试从中运行 python 应用程序的 same 客户端进行连接。那是对的吗?还可以在 mongo 服务器上尝试 ps aux | grep mongod 和/或在使用的配置文件中查找 bind_ip。确保它与您发布的内容没有什么不同,或者是0.0.0.0
  • 正确我使用 python 和“mongo”命令行客户端从同一个 IP 连接。这是您发送给我的命令在数据库服务器上运行的输出,mongodb 1184 0.4 3.1 639596 15936 ? Ssl Mar18 5:47 /usr/bin/mongod --config /etc/mongodb.conf jon 3148 0.0 0.1 9392 888 pts/0 S+ 06:51 0:00 grep mongod 我没有看到任何绑定 ip,我做错了什么吗?
  • 使用 cat /etc/mongodb.conf 并使用找到的 bind_ip 值编辑您的问题,或者如果它不存在,请不要打扰。从 shell 连接时显示的版本也是如此。

标签: mongodb pymongo


【解决方案1】:

将bind_ip = 127.0.0.1 替换为bind_ip = 0.0.0.0 以允许从远程主机连接到MongoDB。

【讨论】:

    【解决方案2】:
    1. 转到 /etc/mongo.conf
    2. 使用 bind_ip 查找所有条目(取决于您运行数据库服务器的位置,您可能有多个条目)
    3. 确保您只有一个带有 bind_ip 的实时条目
    4. 将 0.0.0.0 替换为两个条目:127.0.0.1,internal ip,external ip - 如果您想从云安装外部进行连接
    5. 保存并退出
    6. 用 sudo service mongod restart 重启 Mongo
    7. 添加防火墙规则以允许来自您的应用服务器的流量

    注意:如果您有多个节点,您可能需要在应用服务器代码中处理识别哪个节点是主要节点并设置与它的连接。这意味着您需要对每个数据节点执行上述操作。或者,将一个数据节点设置为优先级 = 1,将其余所有数据节点设置为优先级 = 0(使用 Mongo shell)。例如:

    cfg = rs.config()
    cfg.members[<node id>].priority = 0
    rs.reconfig(cfg)
    

    我将 MongoDB 与 Google Cloud 一起使用(一键部署,2 个节点 + 仲裁器)并且运行良好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多