0

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

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

我有一个简单的 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)
    ...

我已经搜索过这个错误,但我发现的那些与 localhost/127.0.0.1 的使用有关。我试图通过在单独的 VM 上运行 mongodb 并因此在非本地 IP 上运行以及将名称添加到主机文件来缓解这种情况。

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

在此先感谢您的帮助!

4

2 回答 2

0

当我最初编写该支持并在那时工作时,我使用了多个 MongoDB 服务器。现在没有时间,但您可以查看解析数据存储连接 URL并将其转换为 MongoDB java API 调用的 DataNucleus 代码。应该剥离服务器,然后调用“ new Mongo(serverAddrs);”。如果它正确地传递它(调试器?),那么问题可能是 Mongo 特有的,而不是 DataNucleus 为您所做的。

还要确保您使用的是 v3.1.2(或更高版本)的datanucleus-mongodb

于 2013-05-30T10:28:48.983 回答
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
于 2013-05-30T19:37:00.280 回答