我在亚马逊云中创建了一个3成员副本集。我已经设置了所有需要的防火墙设置和mongo congigurations.Below是我的副本集配置:
{
"_id" : "rs1",
"version" : 3,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 1,
"host" : "ip-172-31-16-84:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "ip-172-31-23-212:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 3,
"host" : "ip-172-31-14-196:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5720fb585ef3baca32efe765")
}
}
注意:我使用机器主机名称机器公共IP地址创建了副本集。
我正在使用以下命令从这3台副本机中的任何一台连接到副本集,并且我连接到副本集的主要部分。
mongo --host "rs1/ip-172-31-16-84:27017"
但是当我使用来自任何其他机器的相同命令(假设我的本地机器)不在同一个局域网中时。命令失败,出现以下错误:
C:\Users\gur35948>mongo --host "rs1/52.221.230.236:27017"
MongoDB shell version: 3.0.6
connecting to: rs1/52.221.230.236:27017/test
2016-04-28T11:54:02.851+0530 I NETWORK starting new replica set monitor for replica set rs1 with seeds 52.221.230.236:27017
2016-04-28T11:54:02.853+0530 I NETWORK [ReplicaSetMonitorWatcher] starting
2016-04-28T11:54:03.043+0530 I NETWORK changing hosts to rs1/ip-172-31-14-196:27017,ip-172-31-16-84:27017,ip-172-31-23-212:27017 from rs1/52.221.230.236:27017
2016-04-28T11:54:13.689+0530 I NETWORK [ReplicaSetMonitorWatcher] getaddrinfo("ip-172-31-14-196") failed: errno:11001 No such host is known.
2016-04-28T11:54:14.335+0530 I NETWORK getaddrinfo("ip-172-31-16-84") failed: errno:11001 No such host is known.
2016-04-28T11:54:16.682+0530 I NETWORK getaddrinfo("ip-172-31-16-84") failed: errno:11001 No such host is known.
2016-04-28T11:54:17.505+0530 I NETWORK getaddrinfo("ip-172-31-14-196") failed:errno:11001 No such host is known.
2016-04-28T11:54:17.505+0530 W NETWORK No primary detected for set rs1
2016-04-28T11:54:17.511+0530 E QUERY Error: ReplicaSetMonitor no master found for set: rs1
at connect (src/mongo/shell/mongo.js:181:14)
at (connect):1:6 at src/mongo/shell/mongo.js:181
由于网络不同,mongo无法解析副本集中使用的主机名。我没有使用Public Ip,因为它不好练习我猜。
所以最后问题是我如何连接到这个远程副本集??
由于
答案 0 :(得分:2)
连接到副本集时,您的客户端/驱动程序(例如mongo
shell)将使用为rs.conf()
中定义的副本集配置的详细信息:
以下错误特别表明主机名无法从mongo
客户端解析:
2016-04-28T11:54:13.689+0530 I NETWORK [ReplicaSetMonitorWatcher] getaddrinfo("ip-172-31-14-196") failed: errno:11001 No such host is known.
2016-04-28T11:54:14.335+0530 I NETWORK getaddrinfo("ip-172-31-16-84") failed: errno:11001 No such host is known.
主机名ip-172-31-16-84
表明主机的IP地址为172.31.16.84,这是一个不可路由的private network address。
无法从网络外部连接到仅限内部的IP地址。
要安全地连接到您的部署,您需要打开与副本集所在的专用网络的SSH或VPN连接,并从该专用网络中运行mongo
shell。
有关保护部署安全的详细信息,请查看MongoDB Security Checklist。
答案 1 :(得分:1)
如何使用SSH隧道连接到其中一台服务器,然后使用mongo shell连接localhost?
现在大多数MongoDB GUI都很容易设置,安全和支持。