function checkRS(members){ var valid=true; members.forEach(function(member){ print(member.name+" is "+member.stateStr) if (member.stateStr != "SECONDARY" && member.stateStr != "PRIMARY" && member.stateStr != "ARBITER"){ valid=false; } }); return valid; } db = db.getSiblingDB('config'); shards=db.shards.find(); print("\ncurrent shards:\n") while ( shards.hasNext() ) { printjson( shards.next() ); } print("\ncheck rs status:\n") shards=db.shards.find(); while ( shards.hasNext() ) { shard=shards.next(); print("checking "+shard._id) connStr=shard.host; mongo=new Mongo(connStr); rsStats=mongo.getDB("admin")._adminCommand("replSetGetStatus"); var valid=checkRS(rsStats.members); if(!valid){ print("please check this rs!!") printjson(rsStats) } print("") }
在mongos上运行mongo mongodbstats.js --quiet | grep -v "I NETWORK"
效果如下
引用
current shards:
{ "_id" : "s1", "host" : "s1/dev185.smarket:31001,dev186.smarket:31001" }
{ "_id" : "s2", "host" : "s2/dev250.smarket:31002" }
check rs status:
checking s1
dev186.smarket:31001 is PRIMARY
dev185.smarket:31001 is SECONDARY
dev250.smarket:31001 is ARBITER
checking s2
dev250.smarket:31002 is PRIMARY