之前在线上环境搭建过一款ps4的游戏,用的就是这个架构,最近在复习MongoDB, 就充分利用一下Bluemix的免费虚拟机,在做一次,并且将过程自动化。
服务器环境:
| Hostname | IP Addr | Operation System |
| Database-Slave | 192.168.0.29 | Ubuntu 14.04 LTS |
| Database-Master | 192.168.0.28 | CentOS release 6.7 (Final) |
| Database-Arbiter | 192.168.0.30 | Ubuntu 14.04.4 LTS |
安装之前确保已经提前设置好dns,或者hosts文件已经设置好。防火墙做好相应的规则,或者关闭防火墙。
首先生成mongodb的证书文件,然后copy到Master, Slave, Arbiter目录下,并添加到配置文件里面。
openss rand -base64 741 >/etc/mongodb.keychmod 600 /etc/mongodb.key下面是住安装脚本,可以将系统安装成Master,Slave 或者Arbiter
#!/bin/bash#Author:Shanker#set -x#set -o nounsetsource ./mongo_configfunction createConfig(){ role=$1 mongoConfig="./mongod-$role" if [ ! -f "$mongoConfig" ] then echo "dbpath=/var/lib/mongodb-$role" >>$mongoConfig echo "logpath=/var/log/mongodb-$role/mongodb.log" >>$mongoConfig echo "logappend=true" >>$mongoConfig echo "keyFile=$MongoKeyFile" >>$mongoConfig if [ "$role" == "master" ] then echo "port=$MasterMongoPort" >>$mongoConfig elif [ "$role" == "slave" ] then echo "port=$SlaveMongoPort" >>$mongoConfig elif [ "$role" == "arbiter" ] then echo "port=$ArbiterMongoPort" >>$mongoConfig fi echo "nohttpinterface=true" >>$mongoConfig echo "nojournal=true" >>$mongoConfig echo "replSet=rs0" >>$mongoConfig cp $mongoConfig /etc/ chmod 644 /etc/$mongoConfig fi}function installMongoService(){ echo "installing mongoserver" if [ ! -f "/usr/bin/mongo" ] then tar zxvf ./mongodb-linux-x86_64-2.4.9.tgz cd ./mongodb-linux-x86_64-2.4.9/bin/ cp * /usr/bin cd ../.. else echo "mongo server file already exist" fi cp mongod-$1.sh /etc/init.d/ chmod 755 /etc/init.d/mongod-$1.sh /etc/init.d/mongod-$1.sh start i=1 until ((i=="0")) do /bin/cat /var/log/mongodb-$1/mongodb.log | grep "waiting for connection" i=$? sleep 3 echo "waiting for mongodb ready" done echo "mongodb is ready" sleep 4}function setupReplSet(){ echo "setup mongodb replicationset" member="$SlaveName:$SlaveMongoPort" echo "rs.initiate()" | /usr/bin/mongo $MasterName:$MasterMongoPort sleep 3 echo "rs.add(\"$count\")" | /usr/bin/mongo $MasterName:$MasterMongoPort sleep 3 echo "rs.addArb(\"$ArbiterName:$ArbiterMongoPort\")"|/usr/bin/mongo $MasterName:$MasterMongoPort echo "rs.status()"|/usr/bin/mongo $MasterName:$MasterMongoPort}case $1 in "master"|"Master") createConfig "master" installMongoService "master" setupReplSet ;; "slave"|"Slave") createConfig "slave" installMongoService "slave" ;; "arbiter"|"Arbiter") createConfig "arbiter" installMongoService "arbiter" ;; "uninstall"|"Uninstall") echo "this will remove all mongo files!!!" if [ -f "/usr/bin/pkill" ] then pkill -9 mongod else kill -9 `ps aux | grep mongo | grep -v grep | awk -F" " '{print $2}'` fi rm -rf /etc/mongo* rm -rf /etc/init.d/mongo* rm -rf /var/lib/mongo* rm -rf /var/log/mongo* rm -rf /usr/bin/mongo* rm -rf /var/run/mongo* ;; *) echo "Please inpute $0 Master, slave or ARBITER" exit 0 ;;esac依赖配置文件mongo_config:
$ cat mongo_config SlaveIP='10.128.129.45'SlaveName='Databse-Slave'SlaveMongoPort='27017'ArbiterIP='10.128.129.46'ArbiterName='Database-Arbiter'ArbiterMongoPort='27017'MasterIP='10.128.129.44'MasterName='Database-Master'MasterMongoPort='27017'#Mongos configMongosPort='27015'#Mongo COnfig Server ConfigMongoConfigIP='127.0.0.1'MongoConfigName='Database-Config'MongoConfigDBPath='/var/lib/mongodc'MongoConfiglogpath='/var/log/mongodc'MongoConfigPort='27014'MongoKeyFile='/etc/mongodb.key'下面是Master 和 Slave要用到的启动脚本
$ cat mongod-master.sh #!/bin/bash#source /etc/mongod-start.confDBLocation='/var/lib/mongodb-master/'LogFolder='/var/log/mongodb-master/'StartProcess='/usr/bin/mongod -f /etc/mongod-master'PidFile='/var/lib/mongodb-master/mongod-master.lock'uid=`id | cut -d\( -f1 | cut -d= -f2`if [ ! -d "$DBLocation" ];thenmkdir $DBLocationfi if [ ! -d "$LogFolder" ];thenmkdir $LogFolderfi if [ ! -f "$PidFile" ];thentouch $PidFilefi PidFileNum=`/bin/cat $PidFile`CurrentPid=`ps aux|grep "$StartProcess"|grep -v "grep"|awk -F" " '{print $2}'`ProcessStart(){ if [ "x$CurrentPid" != "x" ];then echo "mongod process already runing!! PID is $CurrentPid. " else exec $StartProcess & sleep 2 NewPidNum=`ps aux|grep "$StartProcess"|grep -v "grep"|awk -F" " '{print $2}'` echo "mongod process is running, pid is $NewPidNum" #PidFileNum=`/bin/cat $PidFile` # #if [ $NewPidNum != $PidFileNum ];then # echo "Process is runing, but pid number is not match the pid file." # echo "pid number is $NewPidNum" #fi fi}ProcessStop(){ if [ "x$CurrentPid" == "x" ];then echo "mongod process already Stop!! " else kill -15 $CurrentPid sleep 3 NewPidNum=`ps aux|grep "\"$StartProcess\""|grep -v "grep"|awk -F" " '{print $2}'` if [ "x$NewPidNum" == "x" ];then echo "mongod process is stop." else kill -9 $NewPidNum if [ "x$NewPidNum" != "x" ];then echo "Can't kill mongod process, please call system administrator." else echo "mongod is stop." fi fi fi}ProcessStatus(){ if [ "x$CurrentPid" != "x" ];then echo "mongod process is runing!! PID is $CurrentPid. " else echo "mongod not running." fi}case "$1" in start) ProcessStart ;; stop) ProcessStop ;; restart) ProcessStop CurrentPid='' ProcessStart ;; status) ProcessStatus ;; *) echo $"Usage: mongod {start|stop|status|restart}" RETVAL=2 ;;esac其他脚本请到我的github取:https://github.com/sangrealest
本文介绍了一种利用Shell脚本自动化部署MongoDB集群的方法,包括Master、Slave和Arbiter节点的配置及启动过程。
2542

被折叠的 条评论
为什么被折叠?



