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

Error when try to connect to Replica Set in Mongo

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

slavenode:27017: [Errno -2] Name or service not known,ip-XXX-XX-XX-XX:27017: [Errno -2] Name or service not known

(其中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 Public IP)

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

rs0:主要> 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。有谁知道出了什么问题?

提前致谢。

您是否尝试过从 MongoClient()

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

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

db = client.myFirstDB

或者我认为您可以通过在 MongoClient()

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

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

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

在 mongo shell 的小学我做了:

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")

当然,请将 Public DNS (IPv4) 地址更改为您的地址。