Skip to content

Instantly share code, notes, and snippets.

@H-Max
Created September 9, 2020 09:51
Show Gist options
  • Save H-Max/16f101afd0124a1d96ec75a629823adc to your computer and use it in GitHub Desktop.
Save H-Max/16f101afd0124a1d96ec75a629823adc to your computer and use it in GitHub Desktop.
pkill -2 mongos && sudo pkill -2 mongod
#!/usr/bin/env bash
# Remember to change password in script
shards=$1
wkdir=/data
logpath=/data/log
mongopath="" # /apps/mongodb/bin/current/
mongos_port=32001
config_port=32002
mongod_port=32100
memtotal=$(grep MemTotal /proc/meminfo | awk '{printf "%.f",$2 / 1024 / 1024}')
cache_size=$(((memtotal / shards) / 2)) # GB, Per instance
create_user='db.createUser({user: "clusterAdmin",pwd:"PASSWORD_IS_HERE",roles:[{role:"clusterAdmin",db:"admin"},{role:"userAdminAnyDatabase",db:"admin"}]});'
# Création du dossier du server de config (si besoin)
mkdir -p ${wkdir}/config
mkdir -p ${logpath}/config
# Démarrage du ConfigServer
${mongopath}mongod -f /data/mongo-common.conf --configsvr --replSet configReplSet \
--bind_ip config.edouard.m1by1.local --port ${config_port} --dbpath ${wkdir}/config --directoryperdb \
--nounixsocket --logpath ${logpath}/config-server.log --oplogSize 16 --wiredTigerCacheSizeGB 0.25 --fork --quiet
# Init du replicaSet
${mongopath}mongo --quiet --port ${config_port} admin > /dev/null <<EOF
rs.initiate();
while (db.isMaster()['ismaster'] !== true){sleep(200);}
${create_user}
EOF
# Démarrage du MongoS
${mongopath}mongos -f /data/mongo-common.conf --configdb configReplSet/config.edouard.m1by1.local:${config_port} --nounixsocket --logpath ${logpath}/mongos.log \
--bind_ip_all --port ${mongos_port} --setParameter diagnosticDataCollectionEnabled=false --fork --quiet
# Lancement de chaque shard
for (( s=1; s<=$shards; s++ ))
do
# Création des dossiers pour les shards
sn=$(printf "%02d" ${s})
dd=${wkdir}/shards/${sn}
prt=$((${mongod_port}+${s}))
mkdir -p ${dd}
host=mongod-${sn}.edouard.m1by1.local
# Démarrage du daemon mongod
${mongopath}mongod -f /data/mongo-common.conf --shardsvr --replSet shard-local-rs${sn} --bind_ip ${host} \
--port ${prt} --dbpath ${dd} --nounixsocket --logpath ${logpath}/mongod-${sn}.log --oplogSize 128 --wiredTigerCacheSizeGB ${cache_size} --fork
# Init du replicaset
${mongopath}mongo --host ${host} --port ${prt} admin > /dev/null <<EOF
rs.initiate();
while (db.isMaster()['ismaster'] !== true){sleep(200);}
${create_user}
EOF
# Ajout du shard au cluster
${mongopath}mongo --host mongos.edouard.m1by1.local --port ${mongos_port} --username clusterAdmin \
--password PASSWORD_IS_HERE --authenticationDatabase=admin admin > /dev/null <<EOF
sh.addShard("shard-local-rs${sn}/${host}:${prt}");
${create_user}
EOF
done
pkill -2 mongos && sudo pkill -2 mongod
rm -rf /data/{config,log,shards}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment