2

レプリカ セットがあり、スレーブ インスタンスへのスタンドアロンの読み取り専用接続を確立したいと考えています。

通常、問題なく実行できます。私がすべき唯一のことはslaveOk=true、読み取り操作でクエリできるように設定することです。またはmongoコンソールを使用している場合nodejsはうまく機能しますが、を使用してそれを行う方法が見つかりませんでしたmonger

set-db!最も奇妙なことは、関数を呼び出しているときに例外が発生することです。

MongoException がマスターと通信せず、再試行が com.mongodb.DBTCPConnector.innerCall (DBTCPConnector.java:314) を使い果たしました

レプリカ セット接続を確立することは、私にとって選択肢ではありません。

現在、私は使用して[com.novemberain/monger "1.4.0"]います。

ありがとう!


更新: Java MongoDB Driver API Documentationを調べて、メソッドを見つけましslaveOkた。うまくいくことを期待して、次のコードを書きました。

(defn slave-connect!
  [& args]
  (mg/set-connection!
    (doto (apply mg/connect args)
          (.slaveOk))))

しかし、私が持っているのは新しい例外だけです:

MongoException マスターではない com.mongodb.CommandResult.getException (CommandResult.java:100)

4

2 に答える 2

1

私はmonger 2.0.0の下でも以下の作品を見つけました:

(connect-via-uri "mongodb://host/db?readOnly=true&readPreference=secondary")
于 2014-12-03T16:46:03.073 に答える
1

com.mongodb.DBApiLayer Documentationを使用して問題を解決したようです。

したがって、正しい解決策は、setReadPreferenceメソッドを使用してReadPreferenceセカンダリに設定し、 setReadOnly()メソッドを使用してデータベースを読み取り専用にすることです。

(import 'com.mongodb.ReadPreference)

(defn use-slave-db!
  [& args]
  (mg/set-db!
    (doto (apply mg/get-db args)
          (.setReadOnly true)
          (.setReadPreference
            (ReadPreference/secondary)))))

use-slave-db!これで、デフォルトuse-db!マクロの代わりに関数を使用してスレーブ インスタンスに接続できるようになりました。

于 2013-01-18T15:46:39.257 に答える