繁体   English   中英

pymongo无法连接到远程服务器上的数据库

[英]pymongo cannot connect to database on remote server

我已经安装了在外部主机服务器上运行的mongodb服务器,通过在客户端计算机外壳中执行以下操作,可以轻松连接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

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

  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服务mongod重新启动Mongo
  7. 添加防火墙规则以允许来自应用服务器的流量

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM