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/