mongodbに接続するアプリケーションを作成している場合は、レプリカセットのシードリストを提供できます。ドライバーは、書き込みコマンドを実行できるマスターノードに移動します。
mongo
レプリカセットに接続するために、コマンドラインシェルのシードリストを指定するにはどうすればよいですか。
mongodbに接続するアプリケーションを作成している場合は、レプリカセットのシードリストを提供できます。ドライバーは、書き込みコマンドを実行できるマスターノードに移動します。
mongo
レプリカセットに接続するために、コマンドラインシェルのシードリストを指定するにはどうすればよいですか。
レプリカ セット プライマリに接続するには、mongo シェル--host
オプションを使用します。
mongo --host replicaSetName/host1[:porthost1],host2[:porthost1],host3[:porthost3],etc
例えば:
$ mongo --host rs1/john.local:27019,john.local:27018
MongoDB shell version: v3.4.9
connecting to: mongodb://john.local:27019,john.local:27018/?replicaSet=rs1
2017-10-12T14:13:03.094+0000 I NETWORK [thread1] Starting new replica set monitor for rs1/john.local:27019,john.local:27018
2017-10-12T14:13:03.096+0000 I NETWORK [thread1] Successfully connected to john.local:27019 (1 connections now open to john.local:27019 with a 5 second timeout)
2017-10-12T14:13:03.096+0000 I NETWORK [thread1] Successfully connected to john.local:27018 (1 connections now open to john.local:27018 with a 5 second timeout)
rs1:PRIMARY> db
test
rs1:PRIMARY>
注:バージョン 3.4.2 から 3.4.10 まで、--host または --port を使用した後にデータベースを指定できないというバグ ( SERVER-28072 ) がありました。
--host を使用して、レプリカセット内のホストの 1 つを指定するだけで済みますが、プレフィックスとしてレプリカセットの名前を付けます。
例えば:
mongo --host my_mongo_server1
my_mongo_server1 に接続しますが、それは単なる別の SECONDARY ノードである可能性があります。
しかし:
mongo --host my_repl_set_name/my_mongo_server1
my_mongo_server1 でなくても、常にレプリカ セットの PRIMARY ノードに接続します。
なんで?答えは「レプリカセットモニター」です。上記の例では、mongo シェルは指定されたノードに接続し、レプリカ セットの新しいレプリカ セット モニターを開始し、指定されたノードを使用してそれをシードします。そこから、モニターはレプリカ セット内のすべてのノードを把握し、接続をプライマリ ノードに切り替えます。
それが役に立ったことを願っています。
「name/seed1、seed2、...」形式を使用できます。
> conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
> db = conn.getDB("test")
これにより、現在プライマリであるノードに接続でき、フェイルオーバーを正常に処理できます。1つ以上のシードを指定すると、残りが検索されます。
(AFAIK)シェルでは、レプリカセット接続を使用して読み取りをセカンダリにルーティングできないことに注意してください。
私の知る限りでは、mongo コマンド ライン クライアントは、シードをマスター ノードに転送することを受け入れません。
rs.config()
ただし、RS 内の任意のノードに接続すると、またはを介して RS トポロジを検出できますdb.isMaster()
。その後、この情報を使用してプライマリ ノードに再接続できます。mongo --eval "db.isMaster()['primary']"
シェルによっては、マスターに自動的に接続するために使用できる場合があります。
シェルでは、最初に次を使用できます。
mongo --nodb
mongo レプリカセットに接続せずに mongo セッションを開くには
次に、クリスティーナが言ったように、使用できるはずです
conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
レプリカセットに接続します。
または最終的に置く
conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
あなたのjsファイルで
mongo --nodb yourcode.js
param を使用し--host
て replSet 名とシード リストを指定mongo
すると、現在のプライマリ ホストに自動的に接続されます。
例:
mongo --host rs0/1.example.com:27017,2.example.com:27017,3.example.com:27017 [dbname]
Chris Heald の回答に基づいて、これら 2 つの bash エイリアスを使用すると、1 つのコマンドでマスターに接続できます (db1.test.test はレプリカ セットのメンバーの 1 つ、acme はデータベース名、mreppy は私のアカウントなど)。もちろん、db1 がダウンしている場合でも、それでも便利です。
alias whichprimary='mongo db1.test.test/acme --username mreppy --password testtest --quiet --eval "db.isMaster()['"'primary'"']"'
alias connectprimary='mongo -u mreppy -p testtest `whichprimary`/acme'
eval エイリアスでの引用は難しいので、How to escape single-quotes within single-quoted strings?を使用しました。ヘルプ:-)
mongodb://< dbuser >:< dbpassword >@example.com:< port >,example2.com:< port >/< dbname >?replicaSet=setname