【问题标题】:Cannot connect to mongodb replica set无法连接到 mongodb 副本集
【发布时间】:2013-05-25 20:24:38
【问题描述】:

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

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

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

当我将应用程序连接到主应用程序(连接网址:mongodb:db1.mongo:27017/ops?replicaSet=rs0)时,一切正常,但是当我将其他两个 mongodb 添加到连接网址时,它变成了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,并将名称添加到主机文件中。

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

提前感谢您的帮助!

【问题讨论】:

    标签: mongodb maven jpa datanucleus


    【解决方案1】:

    我认为您的 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
    

    【讨论】:

      【解决方案2】:

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

      还要确保您使用的是 datanucleus-mongodb

      的 v3.1.2(或更高版本)

      【讨论】:

        猜你喜欢
        • 2020-12-11
        • 1970-01-01
        • 1970-01-01
        • 2019-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-30
        • 2013-11-02
        相关资源
        最近更新 更多