无法连接到mongodb副本集

时间:2013-05-30 09:58:53

标签: mongodb maven jpa datanucleus

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

我按照http://docs.mongodb.org/manual/tutorial/deploy-replica-set/上的说明操作 在ubuntu VM上,将db1.mongo,db2.mongo和db3.mongo添加到guest虚拟机vm和主机(Mac OS X)上的hosts文件中。

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

当我将应用程序连接到主应用程序(连接URL: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)
    ...

我已经搜索过这个错误,但我发现的问题是使用l​​ocalhost / 127.0.0.1。我尝试通过在单独的VM上运行mongodb来缓解这种情况,从而在非本地IP上添加名称以及将名称添加到hosts文件中。

尝试mongodb的主要目标是实现可用性,因此复制和能够进行故障转移非常重要。在发生故障的情况下,节点之间的事务和一致性不是问题,我们也不关心偶尔丢失更新或两次更新因此mongodb看起来是使用JPA的一个很好的替代方案(我完全厌倦了mysql: - )< / p>

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

另外请确保您使用的是 datanucleus-mongodb

的v3.1.2(或更高版本)

答案 1 :(得分:0)

我认为你错误地格式化了你的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