如果我写它连接到MongoDB的话,我可以提供一个replicaset的种子列表的应用程序,驱动程序将直接我的主节点,在那里我可以运行写命令。
如何指定一个命令行的种子列表mongo
以conenct到replicaset外壳。
如果我写它连接到MongoDB的话,我可以提供一个replicaset的种子列表的应用程序,驱动程序将直接我的主节点,在那里我可以运行写命令。
如何指定一个命令行的种子列表mongo
以conenct到replicaset外壳。
要连接到设置主要用途蒙戈外壳复制品--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有一个错误( SERVER-28072 ,其防止指定使用--host或--port时后的分贝)。
以上这些问题的答案是蒙戈3.2。
据蒙戈3.4 文档 ,外壳被改了一下:
在3.2:
mongo --host host1,host2,host3/myRS myDB
要么,
mongo --host host1:27017,host2:27017,host3:27017/myRS myDB
在3.4:
mongo "mongodb://host1,host2,host3/myDB?replicaSet=myRS"
要么,
mongo "mongodb://host1:27017,host2:27017,host3:27017/myDB?replicaSet=myRS"
您可以使用 “名称/ SEED1,seed2中,...” 格式:
> conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
> db = conn.getDB("test")
这应该给你哪个节点是当前主要的连接和处理故障转移没关系。 你可以指定一个或多个种子,它会找到休息。
需要注意的是(据我所知)外壳不允许路由读取与副本集连接次级。
所有您需要做的是--host使用,并给它在replicaset但与replicaset作为前缀的名字你的主机之一。
例如:
mongo --host my_mongo_server1
将连接到my_mongo_server1,它可能只是另一个节点。
但:
mongo --host my_repl_set_name/my_mongo_server1
将始终连接到在副本集主节点,即使它不是my_mongo_server1。
为什么? 答案是“副本设置显示器”。 在上面的例子,蒙戈外壳将连接到指定的节点上,启动为副本集的新副本集显示器和将使用指定的节点只是接种它。 从那里,显示器会弄清楚在副本集中的所有节点,并切换到主节点的连接。
希望帮助。
据我所知,蒙戈命令行客户端将不接受种子给你转发给主节点,因为你可能经常要真正在辅助节点上运行,而不是转发。
但是,一旦连接到该RS的任何节点,可以发现通过RS拓扑rs.config()
或db.isMaster()
然后,您可以使用这些信息来重新连接到主节点。 根据您的外壳,你可能能够使用mongo --eval "db.isMaster()['primary']"
自动连接到主。
在shell中,你可以先用:
mongo --nodb
打开一个蒙戈会话,无需连接蒙戈replicaset
然后,像克里斯蒂娜说,那么你应该能够使用
conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
连接到replicaset。
或最终放
conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
在你的js文件和
mongo --nodb yourcode.js
您可以使用--host
参数去指定的复制集的名称和种子列表,然后mongo
会自动连接到当前主主机。
例:
mongo --host rs0/1.example.com:27017,2.example.com:27017,3.example.com:27017 [dbname]
大厦由克里斯·希尔德在回答这两个bash的别名让我用一个命令连接到主服务器(其中db1.test.test是副本集的一个成员,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别名的报价是很难的,我曾经如何逃避单引号字符串中的单引号? 求助 :-)
我使用V3.4。 此外新作MongoDB的东西......虽然从“人蒙戈”的帮助信息建议使用“--host replicaSet /主机:端口,主机:端口”的网址,它不会为我工作。 不过,我可以根据连接到我的replicaSet 正式文件 ,如下图所示:
$ mongo "mongodb://c1m,c2m,c3m/?replicaSet=rs0"
MongoDB shell version v3.4.1
connecting to: mongodb://c1m,c2m,c3m/?replicaSet=rs0
2017-02-08T14:46:43.818+0800 I NETWORK [main] Starting new replica set monitor for rs0/c1m:27017,c2m:27017,c3m:27017
MongoDB server version: 3.4.1
Server has startup warnings:
2017-02-08T13:31:14.672+0800 I CONTROL [initandlisten]
2017-02-08T13:31:14.672+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-02-08T13:31:14.672+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2017-02-08T13:31:14.672+0800 I CONTROL [initandlisten]
rs0:PRIMARY>
所以我想我的蒙戈的手册页是过时(我用的CentOS 7.3)。
mongodb://< dbuser >:< dbpassword >@example.com:< port >,example2.com:< port >/< dbname >?replicaSet=setname