#!/bin/bash
|
dbRoot=/tmp
|
mongo=$(which mongo)
|
mongod=$(which mongod)
|
mongos=$(which mongos)
|
cfgPort=29017
|
mongosPort=30000
|
hostname=$(hostname)
|
replset="configServers"
|
mongoCmds=""
|
members="[ "
|
configServers=
|
storageEngine="wiredTiger"
|
|
waitForPrimary="assert.soon(function() { return rs.isMaster().primary })"
|
waitForNode="assert.soon(function() { return rs.isMaster().primary && (rs.isMaster().ismaster || rs.isMaster().secondary) })"
|
|
# Start mongods
|
for i in $(seq 0 2)
|
do
|
port=$((cfgPort+i))
|
dbpath="$dbRoot/config$i"
|
rm -fr $dbpath
|
mkdir -p $dbpath
|
logpath="mongod-config$i.log"
|
rm ${logpath}*
|
|
# Save each mongod configsvr
|
cfgSrvr[$i]="$mongod \
|
--storageEngine $storageEngine \
|
--smallfiles \
|
--configsvr \
|
--port $port \
|
--dbpath $dbpath \
|
--replSet $replset \
|
--logpath $logpath \
|
--fork"
|
|
# Start each mongod configsvr
|
${cfgSrvr[$i]}
|
members="$members {_id: $i, host: '$hostname:$port'},"
|
if [ ! -z "$configServers" ]; then
|
configServers="$configServers,$hostname:$port"
|
else
|
configServers="$hostname:$port"
|
fi
|
done
|
members="$members ]"
|
|
# Initiate the replica set as configsvr (CSRS)
|
mongoCmds="var cfg={_id: '$replset', configsvr: true, members: $members};
|
print('initializing with', tojson(cfg));
|
print('rs.initiate', tojson(rs.initiate(cfg)));
|
printjson(rs.status());"
|
echo "$mongoCmds" | $mongo --port $cfgPort
|
|
# Make sure all configsvr nodes are ready
|
for i in $(seq 0 2)
|
do
|
mongoCmds="$waitForNode; printjson(rs.isMaster());"
|
echo "$mongoCmds" | $mongo --port $((cfgPort+i))
|
done
|
|
# Start the mongos
|
mongosCmd="$mongos \
|
--port $mongosPort \
|
--configdb configServers/$configServers \
|
--fork \
|
--logpath mongos.log"
|
|
$mongosCmd
|
|