mongos信息
MongoDB Sharded Cluster 节点信息查询
以下保留两种查询方式:
-
方式一:通过
adminCommand查询 -
方式二:直接查询
config库
适用于你当前的 MongoDB 3.6.17 Sharded Cluster。
一、数据 Shard
方法一:listShards
db.adminCommand({listShards:1})
只输出 Shard + 节点:
db.adminCommand({listShards:1}).shards.forEach(function(s) {print(s._id + " => " + s.host);
})
示例:
rs1 => rs1/10.252.135.118:27017,10.252.135.121:27017,10.252.144.57:27017
rs2 => rs2/10.252.135.118:27018,10.252.144.130:27018,10.252.144.57:27018
rs3 => rs3/10.252.135.118:27019,10.252.135.130:27019,10.252.144.130:27019
方法二:直接查询 config.shards
use configdb.shards.find().pretty()
或者只看关键字段:
db.shards.find({}, {_id: 1,host: 1
}).pretty()
对应关系:
config.shards|+-- rs1 -> rs1/10.x.x.x:27017,...+-- rs2 -> rs2/10.x.x.x:27018,...+-- rs3 -> rs3/10.x.x.x:27019,...
二、Config Server
这里要特别区分:
Config Server 自身的节点信息不存放在 config 库的某张表里。
方法一:通过 mongos 获取 configDB
db.adminCommand({getCmdLineOpts:1}).parsed.sharding.configDB
例如:
cfg/10.252.128.101:27019,10.252.128.102:27019,10.252.128.103:27019
这里表示:
Config Server Replica Set: cfg10.252.128.101:27019
10.252.128.102:27019
10.252.128.103:27019
方法二:连接 Config Server 后查看 Replica Set
首先通过上面的 configDB 得到 CFG 地址,然后连接其中一个 Config Server:
mongosh --host 10.252.128.101:27019
执行:
rs.conf()
或者只看成员:
rs.conf().members.forEach(function(m) {print(m.host + " => " + m._id);
})
示例:
10.252.128.101:27019 => 0
10.252.128.102:27019 => 1
10.252.128.103:27019 => 2
重要说明
这里不存在类似:
db.configServer.find()
这样的标准 Config Server 节点表。
因此 Config Server 的两步关系是:
mongos|| getCmdLineOpts()v
sharding.configDB|v
cfg/10.252.128.101:27019,...|| 连接 CFGv
rs.conf()|v
CFG Replica Set 成员
三、Mongos 节点
方法一:直接查询 config.mongos
在 mongos 上:
use configdb.mongos.find().pretty()
只看关键字段:
db.mongos.find({}, {_id: 1,advisoryHostFQDNs: 1,mongoVersion: 1,ping: 1,up: 1
}).pretty()
你当前环境已经验证得到:
mongokml01.ops.zzt.360es.cn:20000
mongokml02.ops.zzt.360es.cn:20000
mongokml03.ops.zzt.360es.cn:20000
方法二:登录每个 mongos 查看自身配置
例如:
mongosh --host mongokml01.ops.zzt.360es.cn:20000
执行:
db.adminCommand({getCmdLineOpts:1})
查看:
db.adminCommand({getCmdLineOpts:1}).parsed
其中可以看到该 mongos 自身的配置,包括:
sharding.configDB
因此:
config.mongos↓
查看整个集群注册的 MongosgetCmdLineOpts()↓
查看当前这个 Mongos 自身配置
四、三类信息汇总
| 类型 | 方法一 | 方法二 |
|---|---|---|
| 数据 Shard | db.adminCommand({listShards:1}) |
config.shards.find() |
| Config Server | db.adminCommand({getCmdLineOpts:1}).parsed.sharding.configDB |
连接 CFG 后 rs.conf() |
| Mongos | db.getSiblingDB("config").mongos.find() |
当前 Mongos 执行 getCmdLineOpts() |
五、最常用命令汇总
如果你只是做日常巡检,直接使用下面这一组:
1. 数据 Shard
db.adminCommand({listShards:1}).shards.forEach(function(s) {print(s._id + " => " + s.host);
})
2. Config Server
db.adminCommand({getCmdLineOpts:1}).parsed.sharding.configDB
3. Mongos
db.getSiblingDB("config").mongos.find({}, {_id:1,advisoryHostFQDNs:1,mongoVersion:1,ping:1
}).pretty()
4. CFG Replica Set 成员
连接 CFG 后:
rs.conf().members.forEach(function(m) {print(m.host + " => " + m._id);
})
最终可以得到完整拓扑:
MongoDB Sharded Cluster
│
├── Mongos
│ ├── mongokml01:20000
│ ├── mongokml02:20000
│ └── mongokml03:20000
│
├── Config Server
│ └── cfg
│ ├── CFG01
│ ├── CFG02
│ └── CFG03
│
└── Data Shards├── rs1│ ├── node1│ ├── node2│ └── node3├── rs2│ ├── node1│ ├── node2│ └── node3└── ...