2014-03-19 199 views
1

上我已经建立了MongoDB的服务器外部的主机服务器上运行,我可以做在客户端计算机下列轻松连接蒙戈客户壳:pymongo无法连接到数据库的远程服务器

162.243.27.34 --port 27017 

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

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的外壳版本:2.0.4

+0

是你从外壳连接本地或远程。那么''mongod'运行在同一服务器实例上的外壳连接是什么?如果是这样,那么你使用了相同的IP地址还是本地主机(127.0.0.1)? –

+0

@NeilLunn感谢您的回复,我在问题 –

+0

中加入了一些细节,所以要清楚。您正在使用**相同的** IP地址从您正在尝试运行您的Python应用程序的** **客户端进行连接。那是对的吗?也可以尝试'ps aux | grep mongod'在mongo服务器上和/或在使用的配置文件中查找'bind_ip'。确保它与您发布的内容或其他内容没有区别'0.0.0.0' –

回答

2

更换bind_ip = 127.0.0.1bind_ip = 0.0.0.0允许从远程ho连接到MongoDB STS。

0
  1. 去/etc/mongo.conf
  2. 找到bind_ip所有条目(取决于您运行的数据库服务器,你可能有一个以上的条目)
  3. 确保您只有一个进入直播bind_ip
  4. 更换为0.0.0.0,两个条目:127.0.0.1,内部IP,外部IP - 如果你想从云安装
  5. 保存并退出外
  6. 重启蒙戈与须藤服务的mongod [R连接estart
  7. 添加防火墙规则,允许从你的应用服务器

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

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

我使用MongoDB的与谷歌云(点击部署有2个节点+仲裁者),并且运行良好