尝试连接到Mongo中的副本集时出错

时间:2018-02-20 13:25:21

标签: mongodb python-2.7 amazon-web-services pymongo pymongo-3.x

当我尝试连接到AWS中的mongo副本集时,我收到此错误:

  

slavenode:27017:[Errno -2]姓名或服务没有   已知,ip-XXX-XX-XX-XX:27017:[Errno -2]名称或服务未知

(其中XXX-XX ..对应于我的实际IP地址)

连接代码如下所示:

client = MongoClient("mongodb://Master-PublicIP:27017,Slave-PublicIP:27017/myFirstDB?replicaSet=rs0")
db = client.myFirstDB
try:
    db.command("serverStatus")
except Exception as e:
    print(e)
else:
    print("You are connected!")
client.close()

(在Master-PublicIP和Slave-PublicIP中,我有来自AWS控制台的实际IPv4公共IP)

我已经有一个副本集,配置是:

RS0:PRIMARY> rs.conf()

{
"_id" : "rs0",
"version" : 2,
"members" : [
    {
        "_id" : 0,
        "host" : "ip-XXX-XX-XX-XXX:27017",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : false,
        "priority" : 1,
        "tags" : {

        },
        "slaveDelay" : 0,
        "votes" : 1
    },
    {
        "_id" : 1,
        "host" : "SlaveNode:27017",
        "arbiterOnly" : false,
        "buildIndexes" : true,
        "hidden" : false,
        "priority" : 1,
        "tags" : {

        },
        "slaveDelay" : 0,
        "votes" : 1
    }
],
"settings" : {
    "chainingAllowed" : true,
    "heartbeatTimeoutSecs" : 10,
    "getLastErrorModes" : {

    },
    "getLastErrorDefaults" : {
        "w" : 1,
        "wtimeout" : 0
    }
}

}

我在PRIMARY中创建了/ data / db,在SECONDARY中创建了/ data / db1,我已经使用sudo chmod -R 755 /data/db

给出了正确的所有权

我的MongoDB版本是3.0.15。有谁知道出了什么问题?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您是否尝试从myFirstDB

中删除MongoClient()
 MongoClient("mongodb://Master-PublicIP:27017,Slave-PublicIP:27017/?replicaSet=rs0")

因为您的下一行然后指定您要使用的数据库

db = client.myFirstDB

或者我认为您可以通过在dot

上的右大括号之后放置MongoClient()来指定数据库
MongoClient("mongodb://Master-PublicIP:27017,Slave-PublicIP:27017/?replicaSet=rs0").myFirstDB

答案 1 :(得分:0)

我设法解决问题。正如@ N3i1在commnets中建议的那样,我使用公共DNS(IPv4)。我在/ etc / hosts中声明了主机的问题。

在这个文件中,我用一些名字定义了主/从的ips。出于某种原因,这没有用。我删除它们然后重新配置副本集配置。

在mongo shell的PRIMARY中,我做了:

cfg = {"_id" : "rs0", "members" : [{"_id" : 0,"host" : "Public DNS (IPv4):27017"},{"_id" : 1,"host" : "Public DNS (IPv4):27017"}]}
rs.reconfig(cfg,{force: true});

然后我用python连接副本集:

MongoClient("mongodb://Public DNS (IPv4):27017,Public DNS (IPv4):27017/?replicaSet=rs0")

当然,与您的地址一起更改公共DNS(IPv4)地址。