2013-05-30 186 views
0

我正在使用datanucleus mongodb maven插件和“访问平台”将我的java应用程序连接到使用JPA的mongodb。无法连接到mongodb副本集

我跟着上http://docs.mongodb.org/manual/tutorial/deploy-replica-set/ 说明在Ubuntu的虚拟机,添加db1.mongo,db2.mongo和db3.mongo到主机上的客户端虚拟机和主机键(Mac OS X)两种文件。

我有一个简单的java应用程序连接到服务器,(如http://www.datanucleus.org/products/accessplatform_3_0/mongodb/support.html所述)。

当我的应用程序连接到主(连接网址:mongodb:db1.mongo:27017/ops?replicaSet=rs0)一切都工作得很好,但是当我添加了另外两个MongoDB的对连接的URL,因此它成为mongodb:db1.mongo:27017/ops?replicaSet=rs0,db2.mongo:27018,db3.mongo:27019我得到异常:

com.mongodb.MongoException: can't find a master 
    at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:503) 
    at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:236) 
    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:216) 
    ... 

我已经搜索了这个错误,但是我发现的关注使用localhost/127.0.0.1。我试图通过在单独的虚拟机上运行mongodb来缓解这种情况,并因此使用非本地IP,并将名称添加到hosts文件中。

尝试mongodb的主要目标是实现可用性,以便复制和故障转移非常重要。在发生故障时节点之间的事务和一致性不是问题,我们也不担心偶尔会丢失一两次更新,所以mongodb看起来像使用JPA的好选择(我完全厌倦了mysql :-)

在此先感谢您的帮助!

回答

0

当我最初编写该支持并在那时工作时,我使用了多个MongoDB服务器。现在没时间了,但你可以看看the DataNucleus code that parses your datastore connection URL并将它转换成MongoDB的Java API调用。应分开服务器,然后调用“new Mongo(serverAddrs);”。如果它正确传递(调试器?),那么问题可能是Mongo特有的,与DataNucleus为您做的相反。

另外,还要确保你使用的V3.1.2(或更高版本)DataNucleus将-MongoDB的

0

的我想你已经misformatted您的MongoDB的URI。取而代之的是:

mongodb:db1.mongo:27017/ops?replicaSet=rs0,db2.mongo:27018,db3.mongo:27019 

这样做:

mongodb:db1.mongo:27017,db2.mongo:27018,db3.mongo:27019/ops?replicaSet=rs0