我正在使用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)
答案 0 :(得分:1)
是的,您可以使用弹性IP地址。将一个弹性IP附加到每个Ec2实例网络接口。 你可以参考这个链接:http://blog.mongodirector.com/best-practices-for-deploying-mongodb-on-ec2/