mongodb building a sharded environment

We are going to create a sharded mongodb environment locally on in machine using many non standard ports. 3 shards with each having 3 replicas. 3 configuration servers and 1 mongos server on standard port 27017. The mongos server handle all the incoming requests and then distribute to the apppariate shard server for the requests.

Create the frist shard with 3 mongodb replica nodes and name it shard1.

mkdir -p /data/shard1/rs1 /data/shard1/rs2 /data/shard1/rs3 /data/log
mongod --replSet shard1 --logpath "/data/log/shard1-replica1.log" --dbpath /data/shard1/rs1 --port 37017 --fork --shardsvr
mongod --replSet shard1 --logpath "/data/log/shard1-replica2.log" --dbpath /data/shard1/rs2 --port 37018 --fork --shardsvr
mongod --replSet shard1 --logpath "/data/log/shard1-replica3.log" --dbpath /data/shard1/rs3 --port 37019 --fork --shardsvr

mongo --port 37017 << 'EOF'
config = { _id: "shard1", members:[
          { _id : 1, host : "localhost:37017" },
          { _id : 2, host : "localhost:37018" },
          { _id : 3, host : "localhost:37019" }]};
rs.initiate(config);
EOF

Create the second shard with 3 mongodb replica nodes and name it shard2.

mkdir -p /data/shard2/rs1 /data/shard2/rs2 /data/shard2/rs3
mongod --replSet shard2 --logpath "/data/log/shard2-replica1.log" --dbpath /data/shard2/rs1 --port 47017 --fork --shardsvr
mongod --replSet shard2 --logpath "/data/log/shard2-replica2.log" --dbpath /data/shard2/rs2 --port 47018 --fork --shardsvr
mongod --replSet shard2 --logpath "/data/log/shard2-replica3.log" --dbpath /data/shard2/rs3 --port 47019 --fork --shardsvr

mongo --port 47017 << 'EOF'
config = { _id: "shard2", members:[
          { _id : 1, host : "localhost:47017" },
          { _id : 2, host : "localhost:47018" },
          { _id : 3, host : "localhost:47019" }]};
rs.initiate(config);
EOF

Create the third shard with 3 mongodb replica nodes. and name it shard3.

mkdir -p /data/shard3/rs1 /data/shard3/rs2 /data/shard3/rs3
mongod --replSet shard3 --logpath "/data/log/shard3-replica1.log" --dbpath /data/shard3/rs1 --port 57017 --fork --shardsvr
mongod --replSet shard3 --logpath "/data/log/shard3-replica2.log" --dbpath /data/shard3/rs2 --port 57018 --fork --shardsvr
mongod --replSet shard3 --logpath "/data/log/shard3-replica3.log" --dbpath /data/shard3/rs3 --port 57019 --fork --shardsvr

mongo --port 57017 << 'EOF'
config = { _id: "shard3", members:[
          { _id : 1, host : "localhost:57017" },
          { _id : 2, host : "localhost:57018" },
          { _id : 3, host : "localhost:57019" }]};
rs.initiate(config);
EOF

Create mongodb configuration servers, start mongos on standard port and add the 3 shards to enable sharding.

# create mongodb configuration servers.
mkdir -p /data/config/config-a /data/config/config-b /data/config/config-c 
mongod --logpath "cfg-a.log" --dbpath /data/config/config-a --port 57040 --fork --configsvr
mongod --logpath "cfg-b.log" --dbpath /data/config/config-b --port 57041 --fork --configsvr
mongod --logpath "cfg-c.log" --dbpath /data/config/config-c --port 57042 --fork --configsvr


# start the mongos on a standard port
mongos --logpath "/data/log/mongos-1.log" --configdb localhost:57040,localhost:57041,localhost:57042 --fork
echo "Connnecting to mongos and enabling sharding"

# add shards and enable sharding on the test db
mongo <<'EOF'
db.adminCommand( { addshard : "shard1/"+"localhost:37017" } );
db.adminCommand( { addshard : "shard2/"+"localhost:47017" } );
db.adminCommand( { addshard : "shard3/"+"localhost:57017" } );
db.adminCommand({enableSharding: "world"})
db.adminCommand({shardCollection: "world.people", key: {pid:1}});
EOF

Insert some documents into the database world in people collection.

mongo <<'EOF'
var db=db.getSiblingDB("world");
var person;
// 10,000 people
for (i=0; i<10000; i++) {
	person = {'pid': i, 'income': Math.random()*10000000};
	db.people.insert(person);
}
EOF

Insert some documents into the database world in people colletion using node.js

var MongoClient = require('mongodb').MongoClient;
var person;
MongoClient.connect("mongodb://localhost:27017/world", function(err, db) {
    if (err) throw err;
	for (i=10000; i<20000; i++) {
		person = {'pid': i, 'income': Math.random()*10000000};
		db.collection("people").insert(person, function (err, doc) {
			if (err) throw err;
			console.log(doc);
		});	
	}
});

Check the document counts on each shard.

mongo
use world;
db.people.count();
sh.status();
exit;

mongo --port 37017
use world;
db.people.count();
exit;

mongo --port 47017
use world;
db.people.count();
exit;

mongo --port 57017
use world;
db.people.count();
exit;

Search within Codexpedia

Custom Search

Search the entire web

Custom Search