2013-05-30 219 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