0

JPAを使用してJavaアプリをmongodbに接続するために、datanucleus mongodb mavenプラグインと「アクセスプラットフォーム」を使用しています。

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) に接続すると、すべて正常に動作しますが、他の 2 つの 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 を試す主な目的は、可用性を実現することです。そのため、レプリケーションとフェイルオーバーが可能であることが非常に重要です。障害が発生した場合のノード間のトランザクションと一貫性は問題ではありません。また、たまに 1 つまたは 2 つの更新が失われることも心配していないので、mongodb は JPA を使用する良い代替手段のように見えます (私は mysql に完全にうんざりしています :-)

よろしくお願いします。

4

2 に答える 2

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 に答える