0

I just need to perform an sh.status() command to see the sharding status of my mongodb database.
This command needs to be performed on a mongos, and it is not (yet) clear to me how to perform that. My guess is that I should simply launch a mongo shell from a mongos server directly, but Atlas does not seem to provide direct access to them (I may be wrong).

EDIT :

Here is the exception I get when I execute the command from a remote Mongo Shell connected to my cluster :

mongoc-shard-00-00-wddpo(mongos-3.6.0)[mongos] mydb> sh.status()
printStackTrace@src/mongo/shell/utils.js:73:15
DBCollection.prototype.aggregate@/Users/jondoe/.mongorc.js:98:13
sh.getRecentMigrations@/Users/jondoe/.mongorc.js:1388:28
printShardingStatus@/Users/jondoe/.mongorc.js:1497:30
sh.status@src/mongo/shell/utils_sh.js:89:5
@(shell):1:1

2017-12-12T16:31:59.985+0100 E QUERY    [thread1] uncaught exception:         aggregate failed: {
  "ok": 0,
  "errmsg": "The 'cursor' option is required, except for aggregate with the explain argument",
  "code": 9,
  "codeName": "FailedToParse",
  "$clusterTime": {
    "clusterTime": Timestamp(1513092719, 27),
    "signature": {
      "hash": BinData(0, "Ok0isqe1nHr+D/I9344pcNdxapA="),
      "keyId": NumberLong("6496824061736255491")
    }
  },
  "operationTime": Timestamp(1513092719, 27)
}

UPDATE

Since I was using Mongo Shell 3.4, I updated to 3.6 After some cleaning (I had to manually delete the home/.mongorc.js prior to installing 3.6 otherwise it had a mess) everything worked as expected

mongo "mongodb+srv://mongoc-wddpo.mongodb.net/mydb" --authenticationDatabase admin --username jondoe --password strongestpasswordever
MongoDB shell version v3.6.0
connecting to: mongodb+srv://mongoc-wddpo.mongodb.net/mydb
MongoDB server version: 3.6.0
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5a2953b4841c53c7b10a53f5")
  }
  shards:
        {  "_id" : "Mongoc-shard-0",  "host" : "Mongoc-shard-0/mongoc-shard-00-00-wddpo.mongodb.net:27017,mongoc-shard-00-01-wddpo.mongodb.net:27017,mongoc-shard-00-02-wddpo.mongodb.net:27017",  "state" : 1 }
        {  "_id" : "Mongoc-shard-1",  "host" : "Mongoc-shard-1/mongoc-shard-01-00-wddpo.mongodb.net:27017,mongoc-shard-01-01-wddpo.mongodb.net:27017,mongoc-shard-01-02-wddpo.mongodb.net:27017",  "state" : 1 }
        {  "_id" : "Mongoc-shard-2",  "host" : "Mongoc-shard-2/mongoc-shard-02-00-wddpo.mongodb.net:27017,mongoc-shard-02-01-wddpo.mongodb.net:27017,mongoc-shard-02-02-wddpo.mongodb.net:27017",  "state" : 1 }
        {  "_id" : "Mongoc-shard-3",  "host" : "Mongoc-shard-3/mongoc-shard-03-00-wddpo.mongodb.net:27017,mongoc-shard-03-01-wddpo.mongodb.net:27017,mongoc-shard-03-02-wddpo.mongodb.net:27017",  "state" : 1 }
  active mongoses:
        "3.6.0" : 12
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
                config.system.sessions
                        shard key: { "_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                Mongoc-shard-0  1
                        { "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : Mongoc-shard-0 Timestamp(1, 0) 
        {  "_id" : "mydb",  "primary" : "Mongoc-shard-1",  "partitioned" : false }

1 Answer 1

1

When you deploy a sharded cluster, you connect to mongos and can execute sh.status().

In the cluster overview click "Connect", choose "Connect with the Mongo Shell", and use connection string provided.

Update

Just tested it with stock ubuntu client upgraded to v3.6 and new v3.6 cluster.

The client:

$ mongo --version
MongoDB shell version v3.6.0
git version: a57d8e71e6998a2d0afde7edc11bd23e5661c915
OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
allocator: tcmalloc
modules: none
build environment:
    distmod: ubuntu1604
    distarch: x86_64
    target_arch: x86_64

Connection string copy-pasted from Atlas UI:

$ mongo "mongodb+srv://cluster14-74xqx.mongodb.net/test" --authenticationDatabase admin --username user --password password

The shell:

MongoDB shell version v3.6.0
connecting to: mongodb+srv://cluster14-74xqx.mongodb.net/test
MongoDB server version: 3.6.0
mongos> sh.status()
--- Sharding Status ---
  sharding version: {
    "_id" : 1,
    "minCompatibleVersion" : 5,
    "currentVersion" : 6,
    "clusterId" : ObjectId("5a3106712d26976bf628d75b")
  }
  shards:
        {  "_id" : "Cluster14-shard-0",  "host" : "Cluster14-shard-0/cluster14-shard-00-00-74xqx.mongodb.net:27017,cluster14-shard-00-01-74xqx.mongodb.net:27017,cluster14-shard-00-02-74xqx.mongodb.net:27017",  "state" : 1 }
        {  "_id" : "Cluster14-shard-1",  "host" : "Cluster14-shard-1/cluster14-shard-01-00-74xqx.mongodb.net:27017,cluster14-shard-01-01-74xqx.mongodb.net:27017,cluster14-shard-01-02-74xqx.mongodb.net:27017",  "state" : 1 }
  active mongoses:
        "3.6.0" : 6
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  no
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours:
                No recent migrations
  databases:
        {  "_id" : "config",  "primary" : "config",  "partitioned" : true }
8
  • Thank you for your answer. when you say "you connect to mongos" what do you mean exactly ? I understand that I need a direct connection to the terminal on the machines hosting a mongos process (i.e one of the primary shards) and run mongo shell from there. Is that right ? Because I am able to connect via a mongo shell installed on my own remote server but sh.status does not work from there (I get an exception, on Mongo 3.6) Commented Dec 13, 2017 at 9:46
  • Please see Edit Commented Dec 13, 2017 at 9:54
  • There is no any special restrictions. You can login from anywhere as long as the IP of the client is whitelisted on Atlas. I didn't test it with v3.6 tho, working with v3.4.
    – Alex Blex
    Commented Dec 13, 2017 at 10:14
  • The error seems to be related to the changes in aggregation in v3.6 docs.mongodb.com/manual/release-notes/3.6-compatibility/…: "If you run the aggregate command, you must include either the cursor option or the explain option."
    – Alex Blex
    Commented Dec 13, 2017 at 10:16
  • @MehdiLAMRANI I have updated the answer with test results. Could you update the question with exact shell version you are using?
    – Alex Blex
    Commented Dec 13, 2017 at 11:06

Not the answer you're looking for? Browse other questions tagged or ask your own question.