112 lines
2.9 KiB
Bash
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
|