尝试连接到 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) 地址更改为您的地址。
当我尝试连接到 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) 地址更改为您的地址。