Ubuntu EC2实例上的MongoDB - 无法使用java访问副本集的主要成员

时间:2015-02-09 13:55:00

标签: mongodb ubuntu amazon-ec2

我正在使用Ubuntu t1.micro EC2实例并使用以下链接安装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)

 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 ms后超时, LatencyMinimizingServerSelector {acceptableLatencyDifference = 15 ms}]}。集群状态的客户端视图是{type = ReplicaSet,servers = [{address = ip-10-0-2-19:27018,type = Unknown,state = Connecting,exception = {com.mongodb.MongoException $ Network:打开套接字的异常},由{java.net.UnknownHostException:ip-10-0-2-19}}引起,{address = ip-10-0-3-10:27019 ,type = Unknown,state =正在连接,异常= {com.mongodb.MongoException $ Network:打开套接字的异常},由{java.net.UnknownHostException:ip-10-0-3-10}}引起,{address = ip-10-0-3-76:27017 ,type = Unknown,state =正在连接,异常= {com.mongodb.MongoException $ Network:打开套接字的异常},由{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.access $ 500(DBTCPConnector.java:40)     at 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)

1 个答案:

答案 0 :(得分:1)

是的,您可以使用弹性IP地址。将一个弹性IP附加到每个Ec2实例网络接口。 你可以参考这个链接:http://blog.mongodirector.com/best-practices-for-deploying-mongodb-on-ec2/