Ric*_*ton 68 mongodb mongo-shell
如果我正在编写一个连接到mongodb的应用程序,那么我可以为replicaset提供一个种子列表,驱动程序会将我引导到主节点,在那里我可以运行写命令.
如何为命令行mongoshell 指定种子列表以便连接到复制集.
Gia*_* P. 96
要连接到副本集主要使用mongo shell --host选项:
mongo --host replicaSetName/host1[:porthost1],host2[:porthost1],host3[:porthost3],etc
Run Code Online (Sandbox Code Playgroud)
例如:
$ 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>
Run Code Online (Sandbox Code Playgroud)
注意:从3.4.x开始,当使用--host或--port时,不能指定db.错误报告:https://jira.mongodb.org/browse/SERVER-28072
小智 14
您所要做的就是使用--host并在replicaset中为其中一个主机提供,但使用replicaset的名称作为前缀.
例如:
mongo --host my_mongo_server1
Run Code Online (Sandbox Code Playgroud)
将连接到my_mongo_server1,它可能只是另一个SECONDARY节点.
但:
mongo --host my_repl_set_name/my_mongo_server1
Run Code Online (Sandbox Code Playgroud)
将始终连接到副本集中的PRIMARY节点,即使它不是my_mongo_server1.
为什么?答案是"副本集监视器".在上面的示例中,mongo shell将连接到指定的节点,为副本集启动新的副本集监视器,并将使用指定的节点来播种它.从那里,监视器将找出副本集中的所有节点,并将连接切换到PRIMARY节点.
希望有所帮助.
kri*_*ina 13
您可以使用"name/seed1,seed2,..."格式:
> conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
> db = conn.getDB("test")
Run Code Online (Sandbox Code Playgroud)
这应该为您提供与当前主节点的连接,并处理故障转移正常.你可以指定一个或多个种子,它会找到其余的种子.
请注意,(AFAIK)shell不允许您使用副本集连接将读取路由到辅助节点.
据我所知,mongo命令行客户端不会接受种子将您转发到主节点,因为您可能经常希望实际操作辅助节点而不是转发.
但是,一旦连接到RS中的任何节点,您就可以通过rs.config()或发现RS拓扑db.isMaster().然后,您可以使用此信息重新连接到主节点.根据您的shell,您可以使用mongo --eval "db.isMaster()['primary']"自动连接到主服务器.
小智 7
在shell中,您可以先使用:
mongo --nodb
Run Code Online (Sandbox Code Playgroud)
打开一个mongo会话而不连接到mongo replicaset
然后,就像克里斯蒂娜所说,那么你应该可以使用
conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
Run Code Online (Sandbox Code Playgroud)
连接到复制集.
或最终放
conn = new Mongo("myReplicaSet/A:27017,B:27017,C:27017")
Run Code Online (Sandbox Code Playgroud)
在你的js文件和
mongo --nodb yourcode.js
Run Code Online (Sandbox Code Playgroud)
您可以使用--hostparam 指定 replSet 名称和种子列表,然后mongo将自动连接到当前的主要主机。
例子:
mongo --host rs0/1.example.com:27017,2.example.com:27017,3.example.com:27017 [dbname]
| 归档时间: |
|
| 查看次数: |
72515 次 |
| 最近记录: |