78

mongodbに接続するアプリケーションを作成している場合は、レプリカセットのシードリストを提供できます。ドライバーは、書き込みコマンドを実行できるマスターノードに移動します。

mongoレプリカセットに接続するために、コマンドラインシェルのシードリストを指定するにはどうすればよいですか。

4

10 に答える 10

112

レプリカ セット プライマリに接続するには、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 ) がありました。

于 2015-02-23T14:04:48.393 に答える
19

--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 シェルは指定されたノードに接続し、レプリカ セットの新しいレプリカ セット モニターを開始し、指定されたノードを使用してそれをシードします。そこから、モニターはレプリカ セット内のすべてのノードを把握し、接続をプライマリ ノードに切り替えます。

それが役に立ったことを願っています。

于 2015-09-15T01:31:33.840 に答える
15

「name/seed1、seed2、...」形式を使用できます。

> conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
> db = conn.getDB("test")

これにより、現在プライマリであるノードに接続でき、フェイルオーバーを正常に処理できます。1つ以上のシードを指定すると、残りが検索されます。

(AFAIK)シェルでは、レプリカセット接続を使用して読み取りをセカンダリにルーティングできないことに注意してください。

于 2012-12-17T18:57:25.513 に答える
11

私の知る限りでは、mongo コマンド ライン クライアントは、シードをマスター ノードに転送することを受け入れません。

rs.config()ただし、RS 内の任意のノードに接続すると、またはを介し​​て RS トポロジを検出できますdb.isMaster()。その後、この情報を使用してプライマリ ノードに再接続できます。mongo --eval "db.isMaster()['primary']"シェルによっては、マスターに自動的に接続するために使用できる場合があります。

于 2012-12-17T11:21:47.407 に答える
7

シェルでは、最初に次を使用できます。

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
于 2014-05-23T11:09:27.280 に答える
5

param を使用し--hostて replSet 名とシード リストを指定mongoすると、現在のプライマリ ホストに自動的に接続されます。

例:
mongo --host rs0/1.example.com:27017,2.example.com:27017,3.example.com:27017 [dbname]

于 2015-03-17T20:51:43.717 に答える
1

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?を使用しました。ヘルプ:-)

于 2013-10-30T14:14:38.280 に答える
1
mongodb://< dbuser >:< dbpassword >@example.com:< port >,example2.com:< port >/< dbname >?replicaSet=setname
于 2019-05-13T11:35:52.527 に答える