如何通过mongosh命令行获取MongoDB集群的所有主机列表?
获取MongoDB分片集群的所有主机列表
可以通过mongosh结合集群元数据查询,获取分片、配置服务器及mongos节点的主机信息,具体方法如下:
1. 获取配置服务器副本集所有节点
连接到任意mongos实例后,切换至config数据库,查询副本集配置文档并提取节点主机:
use config db.system.replset.findOne().members.forEach(member => print(member.host))
2. 获取所有注册过的mongos节点
MongoDB不会主动维护在线mongos的实时列表,但config数据库的mongos集合会记录所有曾连接过集群的mongos实例。执行以下命令获取:
use config db.mongos.find({}, { _id: 0, host: 1 }).forEach(doc => print(doc.host))
注意:该集合可能包含已下线的mongos节点,需结合实际情况验证有效性。
3. 获取所有分片的副本集节点
从config数据库的shards集合提取分片的连接信息,解析出所有副本集节点:
use config db.shards.find().forEach(shard => { // 拆分分片的连接字符串,提取主机列表 const hostPart = shard.host.split('/')[1]; hostPart.split(',').forEach(host => print(host)); })
或者也可以通过分片名称查询副本集状态来获取节点:
// 替换<分片副本集名称>为实际分片名,如"rs0" sh._adminCommand({ replSetGetStatus: 1, forShard: "<分片副本集名称>" }).members.forEach(member => print(member.name))
内容的提问来源于stack exchange,提问作者himanshu singh
相关产品推荐
相关产品推荐

