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.