#!/bin/bash # Usage: run-mongo-standalone-or-replicated.sh standalone|replicated # # This is intended for DEV/LOCALHOST single VM servers ONLY # Purpose is to setup mongo as single standalone instance or replicated system # Single instance uses standard default "localhost" 27017 (actually uses hostname:27017) # Replicated uses hostname:27017,hostname:27117,hostname:27217 # HOW=$1 if [ "$HOW" != "standalone" -a "$HOW" != "replicated" ]; then echo "Usage: run-mongo-standalone-or-replicated.sh standalone|replicated" exit 1 fi shift PROFILE="" PROFILE="--profile 2 --slowms 20" RSNAME="rs0" PORT1=27017 PORT2=27117 PORT3=27217 HOST=$(hostname) HOST1="${HOST}:$PORT1" HOST2="${HOST}:$PORT2" HOST3="${HOST}:$PORT3" MONGO_CONFIG=/etc/mongodb.conf DBPATH1=$(egrep '^dbpath' ${MONGO_CONFIG} | sed 's/dbpath=//') DBPATH2=${DBPATH1}_2 DBPATH3=${DBPATH1}_3 SUDOMSG="; you may have to enter YOUR password for 'sudo' " echo "Found DBPATH1 (primary/standalone) as: ${DBPATH1}" echo "Set DBPATH2 (replicated) as: ${DBPATH2}" echo "Set DBPATH3 (replicated) as: ${DBPATH3}" # HOST:PORT CMD function mongoExec(){ MVERBOSE=--quiet HOSTPORT=$1 CMD=$2 echo "Exec $HOSTPORT/sequencelogic $CMD" echo "$CMD" | mongo ${MVERBOSE} $HOSTPORT/sequencelogic if [ $? = 0 ]; then echo "[OK] Exec $1" return 0; else echo "[ERROR] $? $1" return 1; fi } function killMongo(){ echo "Killing running mongod processes${SUDOMSG} ..." sudo -u sequencelogic pkill mongod echo "Sleeping for 5 seconds..." sleep 5 } echo "Setup mongo as: ${HOW}${SUDOMSG}" if [ "$HOW" = "standalone" ]; then echo echo "Removing replicas; if this is already 'standalone' then errors will show below..." mongoExec $HOST1 "rs.remove('${HOST2}')" mongoExec $HOST1 "rs.remove('${HOST3}')" echo killMongo echo echo "Starting sole instance${SUDOMSG}..." sudo -u sequencelogic -i $MONGODB_HOME/bin/mongod --config $MONGO_CONFIG ${PROFILE} --rest --fork else echo echo "Create replica data directories${SUDOMSG}" sudo -u sequencelogic mkdir -p ${DBPATH2} sudo -u sequencelogic mkdir -p ${DBPATH3} killMongo echo echo "Starting primary ${HOST1}${SUDOMSG}..." sudo -u sequencelogic -i $MONGODB_HOME/bin/mongod --config $MONGO_CONFIG --rest --fork ${PROFILE} --port $PORT1 --dbpath $DBPATH1 --replSet $RSNAME echo echo "Initiating replicat set..." mongoExec $HOST1 "rs.initiate()" echo echo "Starting ${HOST2}${SUDOMSG}..." sudo -u sequencelogic -i $MONGODB_HOME/bin/mongod --config $MONGO_CONFIG --rest --fork ${PROFILE} --port $PORT2 --dbpath $DBPATH2 --replSet $RSNAME echo echo "Starting ${HOST3}${SUDOMSG}..." sudo -u sequencelogic -i $MONGODB_HOME/bin/mongod --config $MONGO_CONFIG --rest --fork ${PROFILE} --port $PORT3 --dbpath $DBPATH3 --replSet $RSNAME echo echo "Adding replicas to primary..." mongoExec $HOST1 "rs.add('${HOST2}')" mongoExec $HOST1 "rs.add('${HOST3}')" fi echo echo Finished exit 0