Skip to content

Instantly share code, notes, and snippets.

@saintc0d3r
Last active August 29, 2015 14:03
Show Gist options
  • Save saintc0d3r/5fbfb6f4f00aaf9ce29b to your computer and use it in GitHub Desktop.
Save saintc0d3r/5fbfb6f4f00aaf9ce29b to your computer and use it in GitHub Desktop.
[MongoDb][Bash] Create & Initialise MongoDb Shardings
# NOTES: Adjust replSet, dbpath, port parameters as you see them fit on your system environments.
# Supposed, by default, we want to create a shardings environment where it made up from 2 replica set & each replica set is made up form 3 nodes.
# Step #1: Create & Configure replica set for shard 0
# Creates data directories for 3 mongod servers (rs_01, rs_02, rs_03)
rm -rf *.log
rm -rf ~/MongoDatabase/shard_0/rs_01 ~/MongoDatabase/shard_0/rs_02 ~/MongoDatabase/shard_0/rs_03
mkdir -p ~/MongoDatabase/shard_0/rs_01 ~/MongoDatabase/shard_0/rs_02 ~/MongoDatabase/shard_0/rs_03
# Creates 3 mongod servers rs_01, rs_02, rs_03
mongod --replSet shard_0 --logpath "s0-rs_01.log" --dbpath ~/MongoDatabase/shard_0/rs_01 --port 27018 --fork --shardsvr --smallfiles
mongod --replSet shard_0 --logpath "s0-rs_02.log" --dbpath ~/MongoDatabase/shard_0/rs_02 --port 27019 --fork --shardsvr --smallfiles
mongod --replSet shard_0 --logpath "s0-rs_03.log" --dbpath ~/MongoDatabase/shard_0/rs_03 --port 27020 --fork --shardsvr --smallfiles
sleep 5
# Connect to one server node and initiate the replica set shard_0
mongo --port 27018 << 'EOF'
config = {
_id: "shard_0",
members: [
{_id:0, host: "KURONO:27018"},
{_id:1, host: "KURONO:27019"},
{_id:2, host: "KURONO:27020"}
]
};
rs.initiate(config)
EOF
# Do the same things for creating the 2nd replica set & so on..
# rm -rf *.log
rm -rf ~/MongoDatabase/shard_1/rs_11 ~/MongoDatabase/shard_1/rs_12 ~/MongoDatabase/shard_1/rs_13
mkdir -p ~/MongoDatabase/shard_1/rs_11 ~/MongoDatabase/shard_1/rs_12 ~/MongoDatabase/shard_1/rs_13
# Creates 3 mongod servers rs_01, rs_02, rs_03
mongod --replSet shard_1 --logpath "s1-rs_11.log" --dbpath ~/MongoDatabase/shard_1/rs_11 --port 37018 --fork --shardsvr --smallfiles
mongod --replSet shard_1 --logpath "s1-rs_12.log" --dbpath ~/MongoDatabase/shard_1/rs_12 --port 37019 --fork --shardsvr --smallfiles
mongod --replSet shard_1 --logpath "s1-rs_13.log" --dbpath ~/MongoDatabase/shard_1/rs_13 --port 37020 --fork --shardsvr --smallfiles
sleep 5
# Connect to one server node and initiate the replica set shard_1
mongo --port 37018 << 'EOF'
config = {
_id: "shard_1",
members: [
{_id:0, host: "KURONO:37018"},
{_id:1, host: "KURONO:37019"},
{_id:2, host: "KURONO:37020"}
]
};
rs.initiate(config)
EOF
# Step #2: Creates 3 config servers
rm -rf ~/MongoDatabase/config/config_1 ~/MongoDatabase/config/config_2 ~/MongoDatabase/config/config_3
mkdir -p ~/MongoDatabase/config/config_1 ~/MongoDatabase/config/config_2 ~/MongoDatabase/config/config_3
mongod --logpath "config_1.log" --dbpath ~/MongoDatabase/config/config_1 --port 47018 --fork --configsvr --smallfiles
mongod --logpath "config_2.log" --dbpath ~/MongoDatabase/config/config_2 --port 47019 --fork --configsvr --smallfiles
mongod --logpath "config_3.log" --dbpath ~/MongoDatabase/config/config_3 --port 47020 --fork --configsvr --smallfiles
# Step #3: Create mongos (shardings router) server on standard port
mongos --logpath "mongos_1.log" --configdb KURONO:47018,KURONO:47019,KURONO:47020 --fork
echo "Waiting 60 seconds for the replica sets to fully come online"
sleep 60
echo "Connnecting to mongos and enabling sharding"
# Step #4: Add created shards & enable sharding on the desired db & collection (e.g. demo_sharding)
mongo << 'EOF'
db.adminCommand({addshard: "shard_0/KURONO:27018"});
db.adminCommand({addshard: "shard_1/KURONO:37018"});
db.adminCommand({enableSharding: "demo_sharding"});
db.adminCommand({shardCollection: "demo_sharding.test_docs", key:{_id:1}});
EOF
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment