mongodb 从 mongos 内部进行分片集群快速健康检查?

mongodb sharded cluster fast health check from inside mongos?

如果分片集群中的所有分片副本集成员都活着,有人知道从 mongos 识别的选项吗?

例如,我可以检查配置的非隐藏成员是什么:

sh.status()

但是,我不知道如何检查所有分片成员是否都活着并且可以选择,我不想单独访问所有 replicaSet(想象一下,如果我有 100 个分片,我不想执行 100 次 rs.status() ,有没有这样的选择?最佳做法是什么?

谢谢

使用这样的函数:

function printClusterStatus(MONGO_PASSWROD) {
   if (db.hello().msg != "isdbgrid") return; // not a sharded cluster

   const user = db.runCommand({ connectionStatus: 1 }).authInfo.authenticatedUsers.shift().user;
   const map = db.adminCommand("getShardMap").map;

   try {
      for (let rs of Object.keys(map)) {
         let uri = map[rs].split("/");
         let connectionString = "mongodb://" + `${user}:${MONGO_PASSWROD}@${uri[1]}/admin?replicaSet=${uri[0]}&authSource=admin`;
         let replicaSet = Mongo(connectionString).getDB("admin");
         for (let member of replicaSet.adminCommand({ replSetGetStatus: 1 }).members) {
            // replicaSet.hello().isWritablePrimary  could be also useful
            if (!replicaSet.hello().hosts.includes(member.name)) continue; // skip Arbiter, hidden members, etc.
            if (member.health != 1 || !Array("PRIMARY", "SECONDARY").includes(member.stateStr)) {
               print(`ERROR in shard ${rs}: Member state of ${member.name} is '${member.stateStr}'`);
            }
         }
      }
   } catch (err) {
      print(tojsononeline(err));
   }

}

printClusterStatus("secret")