#!/bin/bash
_redColor='\033[0;31m'
_yellowColor='\033[1;33m'
_greenColor='\033[0;32m'
_noColor='\033[0m'
DB_ROOT_PATH=~/data
SHARD_PATH_1=$DB_ROOT_PATH'/shard1'
SHARD_PORT_1=10001
SHARD_PATH_2=$DB_ROOT_PATH'/shard2'
SHARD_PORT_2=10002
SHARD_PATH_3=$DB_ROOT_PATH'/shard3'
SHARD_PORT_3=10003
CONFIG_PATH_1=$DB_ROOT_PATH'/config1'
CONFIG_PORT_1=20001
CONFIG_PATH_2=$DB_ROOT_PATH'/config2'
CONFIG_PORT_2=20002
CONFIG_PATH_3=$DB_ROOT_PATH'/config3'
CONFIG_PORT_3=20003
ROUTER_PORT_1=30001
ROUTER_PORT_2=30002
echo -e "${_greenColor}開始本地部署 mongodb sharded cluster in localhost...${_noColor}"
echo -e "${_greenColor}清空DB資料...${_noColor}"
echo -e "${_yellowColor} -> ${DB_ROOT_PATH}${_noColor}"
rm -rf $DB_ROOT_PATH
echo -e "${_greenColor}建立DB目錄...${_noColor}"
echo -e "${_yellowColor} -> ${SHARD_PATH_1}${_noColor}"
echo -e "${_yellowColor} -> ${SHARD_PATH_2}${_noColor}"
echo -e "${_yellowColor} -> ${SHARD_PATH_3}${_noColor}"
echo -e "${_yellowColor} -> ${CONFIG_PATH_1}${_noColor}"
echo -e "${_yellowColor} -> ${CONFIG_PATH_2}${_noColor}"
echo -e "${_yellowColor} -> ${CONFIG_PATH_3}${_noColor}"
mkdir -p $SHARD_PATH_1 $SHARD_PATH_2 $SHARD_PATH_3 $CONFIG_PATH_1 $CONFIG_PATH_2 $CONFIG_PATH_3
echo -e "${_greenColor}Set 3 Config Server...${_noColor}"
echo -e "${_yellowColor} -> localhost:${CONFIG_PORT_1}${_noColor}"
echo -e "${_yellowColor} -> localhost:${CONFIG_PORT_2}${_noColor}"
echo -e "${_yellowColor} -> localhost:${CONFIG_PORT_3}${_noColor}"
mongod --dbpath $CONFIG_PATH_1 --port $CONFIG_PORT_1 --fork --logpath $DB_ROOT_PATH'/config1.log'
mongod --dbpath $CONFIG_PATH_2 --port $CONFIG_PORT_2 --fork --logpath $DB_ROOT_PATH'/config2.log'
mongod --dbpath $CONFIG_PATH_3 --port $CONFIG_PORT_3 --fork --logpath $DB_ROOT_PATH'/config3.log'
echo -e "${_greenColor}Set 2 Router Server...${_noColor}"
echo -e "${_yellowColor} -> localhost:${ROUTER_PORT_1}${_noColor}"
echo -e "${_yellowColor} -> localhost:${ROUTER_PORT_2}${_noColor}"
mongos --configdb localhost:$CONFIG_PORT_1\
,localhost:$CONFIG_PORT_2,\
localhost:$CONFIG_PORT_3 \
--port $ROUTER_PORT_1 --fork --logpath $DB_ROOT_PATH'/router1.log'
mongos --configdb localhost:$CONFIG_PORT_1\
,localhost:$CONFIG_PORT_2,\
localhost:$CONFIG_PORT_3 \
--port $ROUTER_PORT_2 --fork --logpath $DB_ROOT_PATH'/router2.log'
echo -e "${_greenColor}Set 3 Shard Server...${_noColor}"
echo -e "${_yellowColor} -> localhost:${SHARD_PORT_1}${_noColor}"
echo -e "${_yellowColor} -> localhost:${SHARD_PORT_2}${_noColor}"
echo -e "${_yellowColor} -> localhost:${SHARD_PORT_3}${_noColor}"
mongod --dbpath $SHARD_PATH_1 --port $SHARD_PORT_1 --nojournal --fork --logpath $DB_ROOT_PATH'/shard1.log'
mongod --dbpath $SHARD_PATH_2 --port $SHARD_PORT_2 --nojournal --fork --logpath $DB_ROOT_PATH'/shard2.log'
mongod --dbpath $SHARD_PATH_3 --port $SHARD_PORT_3 --nojournal --fork --logpath $DB_ROOT_PATH'/shard3.log'
echo -e "${_greenColor}Add Shard Node...${_noColor}"
mongo localhost:$ROUTER_PORT_1 --eval 'printjson(sh.addShard("localhost:'$SHARD_PORT_1'"))'
mongo localhost:$ROUTER_PORT_1 --eval 'printjson(sh.addShard("localhost:'$SHARD_PORT_2'"))'
mongo localhost:$ROUTER_PORT_1 --eval 'printjson(sh.addShard("localhost:'$SHARD_PORT_3'"))'
echo -e "${_greenColor}Enable Sharding for a Database...${_noColor}"
mongo localhost:$ROUTER_PORT_1 --eval 'printjson(sh.enableSharding("Cluster_DB"))'
echo -e "${_greenColor}Enable Sharding for a Collection...${_noColor}"
mongo localhost:$ROUTER_PORT_1 --eval 'printjson(sh.shardCollection("Cluster_DB.users", {"_id": "hashed"} ))'
echo -e "${_greenColor}MongoDB Shell${_noColor}"
mongo localhost:$ROUTER_PORT_1