Sleds/utils/run-mongo-standalone-or-replicated.sh

112 lines
2.9 KiB
Bash

#!/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