Mongodb – ensureIndex failed to create index on primary shard: Cannot accept sharding commands if not started with –shardsvr

mongodbmongodb-3.4sharding

After creating shards in replica set and also setting up config servers, when I try to add a collection to my shards then I get below error :

{
"ok" : 0.0,
"errmsg" : "ensureIndex failed to create index on primary shard: Cannot accept sharding commands if not started with –shardsvr"
}

I checked it and have started my shard server with --shardsvr. Still I face the same issue.

Current MongoDB Version : 3.4.6 (In which I am trying to create shards)

Best Answer

I check on same version on windows server with mongodb 3.4.6. Please find below scripts.

1) run shard servers

"C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --shardsvr --replSet rs0 --dbpath "C:\Mongodb_Databases\MongoDB_Shard\WT_mongod1" --logpath "C:\Mongodb_Databases\MongoDB_Shard\WT_mongod1\log.int1" --port 27000 --logappend "C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --shardsvr --replSet rs0 --dbpath "C:\Mongodb_Databases\MongoDB_Shard\WT_mongod2" --logpath "C:\Mongodb_Databases\MongoDB_Shard\WT_mongod2\log.int2" --port 27001 --logappend "C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --shardsvr --replSet rs0 --dbpath "C:\Mongodb_Databases\MongoDB_Shard\WT_mongod3" --logpath "C:\Mongodb_Databases\MongoDB_Shard\WT_mongod3\log.int3" --port 27002 --logappend "C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --shardsvr --replSet rs0 --dbpath "C:\Mongodb_Databases\MongoDB_Shard\WT_mongod4" --logpath "C:\Mongodb_Databases\MongoDB_Shard\WT_mongod4\log.int4" --port 27003 --logappend

2) config servers

"C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --configsvr --replSet rsconfig --dbpath "C:\Mongodb_Databases\MongoDB_Shard\WT_Shardcfg0" --port 26050 --logpath "C:\Mongodb_Databases\MongoDB_Shard\WT_Shardcfg0\log.cfg00" --logappend "C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --configsvr --replSet rsconfig --dbpath "C:\Mongodb_Databases\MongoDB_Shard\WT_Shardcfg1" --port 26051 --logpath "C:\Mongodb_Databases\MongoDB_Shard\WT_Shardcfg0\log.cfg01" --logappend "C:\Program Files\MongoDB\Server\3.4\bin\mongod.exe" --configsvr --replSet rsconfig --dbpath "C:\Mongodb_Databases\MongoDB_Shard\WT_Shardcfg2" --port 26052 --logpath "C:\Mongodb_Databases\MongoDB_Shard\WT_Shardcfg0\log.cfg02" --logappend

3) mongos mongo router

"C:\Program Files\MongoDB\Server\3.4\bin\mongos.exe" --configdb rsconfig/BSS-BC4-Benchmark2:26050,BSS-BC4-Benchmark2:26051,BSS-BC4-Benchmark2:26052 --logappend --logpath "C:\Mongodb_Databases\MongoDB_Shard\WT_mongos\log.mongos0" --bind_ip 127.0.0.1,10.10.180.39

4) Connect any shard instance in replica and initiate replica set using rs.initiate()

rs.initiate( { _id : "rs0", members: [ { _id : 0, host : "Mongo-Test-PC:27000" }, { _id : 1, host : "Mongo-Test-PC:27001" }, { _id : 2, host : "Mongo-Test-PC:27002" }, { _id : 3, host : "Mongo-Test-PC:27003" } ] } );

5) Connect any config server and initiate replica set for config server using rs.initiate() - name must be different from shard replica

rs.initiate(); rs.status(); cfg = rs.conf(); cfg.members[0].priority = 3; rs.reconfig(cfg); rs.add({ host:"Mongo-Test-PC:26051", priority: 2}); rs.add({ host:"Mongo-Test-PC:26052", priority: 1}); rs.status();

6) Connect mongos and ser read pref and add shard.

db.getMongo().getReadPref(); db.getMongo().setReadPref('secondary'); db.getMongo().setReadPref('primaryPreferred'); db.getMongo().getReadPref();

sh.addShard("rs0/Mongo-Test-PC:27000");

sh.status();

create database shardtest sh.enableSharding('shardtest');

use shardtest

db.createCollection("shardcollection");

Hope this will help you.