MongoDB 在 Ubuntu EC2 实例上 - 无法使用 java 访问副本集的主要成员
MongoDB on Ubuntu EC2 instance - Primary member of replica set cannot be accessed using java
我正在使用 Ubuntu t1.micro EC2 实例并使用 link 安装 MongoDB-2.6.7: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
我面临的问题是我无法访问副本集主要成员。
ServerAddress address0 = new ServerAddress("<public_ip1>", 27017);
ServerAddress address1 = new ServerAddress("<public_ip2>", 27018);
ServerAddress address2 = new ServerAddress("<public_ip3>", 27019);
我收到 MongoTimeoutException。
这里的问题是:当我不使用 PRIMARY 的服务器地址并将 ReadPreference 设置为 secondaryPreferred 时,我可以从可用的 SECONDARY 读取。
当我将这些服务器地址中的任何一个用作单独连接时,我可以读取(甚至写入 PRIMARY)。 =17=]
MongoClient mongoClient = new MongoClient("<public_ip1>", 27017);
副本集配置如下:
{
"_id" : "replicaSet",
"version" : 5,
"members" : [
{
"_id" : 0,
"host" : "ip-10-0-3-76:27017" //**private_ip**
},
{
"_id" : 1,
"host" : "ip-10-0-2-19:27018" //**private_ip**
},
{
"_id" : 2,
"host" : "ip-10-0-3-144:27019" //**private_ip**
}
]
}
安全配置也没有问题。我已经为入站和出站设置了 ALL。
谁能帮我解决这个问题。
报错如下:
线程中出现异常 "main" com.mongodb.MongoTimeoutException:等待与 {serverSelectors=[ReadPreferenceServerSelector{readPreference=secondaryPreferred} 匹配的服务器时 10000 毫秒后超时,
LatencyMinimizingServerSelector{acceptableLatencyDifference=15 毫秒}]}。集群状态的客户端视图是 {type=ReplicaSet, servers=[{address=ip-10-0-2-19:27018, type=Unknown, state=Connecting, exception=
{com.mongodb.MongoException$Network: Exception opening the socket}, 由 {java.net.UnknownHostException: ip-10-0-2-19}}, {address=ip-10-0-3-10:27019 引起,类型=未知,状态=连接,异常=
{com.mongodb.MongoException$Network: Exception opening the socket}, 由 {java.net.UnknownHostException: ip-10-0-3-10}}, {address=ip-10-0-3-76:27017 引起,类型=未知,状态=连接,异常=
{com.mongodb.MongoException$Network: Exception opening the socket}, 由{java.net.UnknownHostException: ip-10-0-3-76}}]
在 com.mongodb.BaseCluster.getServer(BaseCluster.java:82)
在 com.mongodb.DBTCPConnector.getServer(DBTCPConnector.java:656)
在 com.mongodb.DBTCPConnector.access500 美元(DBTCPConnector.java:40)
在 com.mongodb.DBTCPConnector$MyPort.getConnection(DBTCPConnector.java:505)
在 com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:448)
在 com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:284)
在 com.mongodb.DBTCPConnector.call(DBTCPConnector.java:269)
在 com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:84)
在 com.mongodb.DB.command(DB.java:320)
在 com.mongodb.DB.command(DB.java:299)
在 com.mongodb.DBCollection.getCount(DBCollection.java:1269)
在 com.mongodb.DBCursor.count(DBCursor.java:796)
在 com.test.replicaSetTest.main(replicaSetTest.java:41)
是的,您可以使用弹性 IP 地址。将一个弹性 IP 附加到每个 Ec2 实例网络接口。
你可以参考这个 link: http://blog.mongodirector.com/best-practices-for-deploying-mongodb-on-ec2/
我正在使用 Ubuntu t1.micro EC2 实例并使用 link 安装 MongoDB-2.6.7: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/
我面临的问题是我无法访问副本集主要成员。
ServerAddress address0 = new ServerAddress("<public_ip1>", 27017);
ServerAddress address1 = new ServerAddress("<public_ip2>", 27018);
ServerAddress address2 = new ServerAddress("<public_ip3>", 27019);
我收到 MongoTimeoutException。
这里的问题是:当我不使用 PRIMARY 的服务器地址并将 ReadPreference 设置为 secondaryPreferred 时,我可以从可用的 SECONDARY 读取。
当我将这些服务器地址中的任何一个用作单独连接时,我可以读取(甚至写入 PRIMARY)。 =17=]
MongoClient mongoClient = new MongoClient("<public_ip1>", 27017);
副本集配置如下:
{
"_id" : "replicaSet",
"version" : 5,
"members" : [
{
"_id" : 0,
"host" : "ip-10-0-3-76:27017" //**private_ip**
},
{
"_id" : 1,
"host" : "ip-10-0-2-19:27018" //**private_ip**
},
{
"_id" : 2,
"host" : "ip-10-0-3-144:27019" //**private_ip**
}
]
}
安全配置也没有问题。我已经为入站和出站设置了 ALL。
谁能帮我解决这个问题。
报错如下:
线程中出现异常 "main" com.mongodb.MongoTimeoutException:等待与 {serverSelectors=[ReadPreferenceServerSelector{readPreference=secondaryPreferred} 匹配的服务器时 10000 毫秒后超时, LatencyMinimizingServerSelector{acceptableLatencyDifference=15 毫秒}]}。集群状态的客户端视图是 {type=ReplicaSet, servers=[{address=ip-10-0-2-19:27018, type=Unknown, state=Connecting, exception= {com.mongodb.MongoException$Network: Exception opening the socket}, 由 {java.net.UnknownHostException: ip-10-0-2-19}}, {address=ip-10-0-3-10:27019 引起,类型=未知,状态=连接,异常= {com.mongodb.MongoException$Network: Exception opening the socket}, 由 {java.net.UnknownHostException: ip-10-0-3-10}}, {address=ip-10-0-3-76:27017 引起,类型=未知,状态=连接,异常= {com.mongodb.MongoException$Network: Exception opening the socket}, 由{java.net.UnknownHostException: ip-10-0-3-76}}] 在 com.mongodb.BaseCluster.getServer(BaseCluster.java:82) 在 com.mongodb.DBTCPConnector.getServer(DBTCPConnector.java:656) 在 com.mongodb.DBTCPConnector.access500 美元(DBTCPConnector.java:40) 在 com.mongodb.DBTCPConnector$MyPort.getConnection(DBTCPConnector.java:505) 在 com.mongodb.DBTCPConnector$MyPort.get(DBTCPConnector.java:448) 在 com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:284) 在 com.mongodb.DBTCPConnector.call(DBTCPConnector.java:269) 在 com.mongodb.DBCollectionImpl.find(DBCollectionImpl.java:84) 在 com.mongodb.DB.command(DB.java:320) 在 com.mongodb.DB.command(DB.java:299) 在 com.mongodb.DBCollection.getCount(DBCollection.java:1269) 在 com.mongodb.DBCursor.count(DBCursor.java:796) 在 com.test.replicaSetTest.main(replicaSetTest.java:41)
是的,您可以使用弹性 IP 地址。将一个弹性 IP 附加到每个 Ec2 实例网络接口。 你可以参考这个 link: http://blog.mongodirector.com/best-practices-for-deploying-mongodb-on-ec2/