Bluemix的三台虚拟机做MongoDB Replica Set

之前在线上环境搭建过一款ps4的游戏,用的就是这个架构,最近在复习MongoDB, 就充分利用一下Bluemix的免费虚拟机,在做一次,并且将过程自动化。

服务器环境:

Hostname IP AddrOperation System
Database-Slave192.168.0.29Ubuntu 14.04 LTS
Database-Master192.168.0.28CentOS release 6.7 (Final)
Database-Arbiter192.168.0.30Ubuntu 14.04.4 LTS

安装之前确保已经提前设置好dns,或者hosts文件已经设置好。防火墙做好相应的规则,或者关闭防火墙。
首先生成mongodb的证书文件,然后copy到Master, Slave, Arbiter目录下,并添加到配置文件里面。

openss rand -base64 741 > /etc/mongodb .key
chmod  600  /etc/mongodb .key

下面是住安装脚本,可以将系统安装成Master,Slave 或者Arbiter


#!/bin/bash
#Author:Shanker
#set -x
#set -o nounset
 
source  . /mongo_config
 
function  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 config
MongosPort= '27015'
#Mongo COnfig Server Config
MongoConfigIP= '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.conf
DBLocation= '/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"  ]; then
mkdir  $DBLocation
fi 
if  [ ! -d  "$LogFolder"  ]; then
mkdir  $LogFolder
fi 
if  [ ! -f  "$PidFile"  ]; then
touch  $PidFile
fi 
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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值