MongoDB庖丁解牛(Replication Set监控/备份/故障切换)

  • A+

监控PRIMARY和SECONDARY状态,zabbix通过脚本返回值报警

[root@web02]# vim /etc/zabbix/scripts/chk_mongodb_replset.sh
MONGO_BIN_PATH="/usr/local/mongodb/bin/mongo"
IPADDR="127.0.0.1:37017/admin"
IP="172.16.11.11"
USER="admin"
PASSWORD="123456"

MONGO_MASTER=`${MONGO_BIN_PATH} $IPADDR -u$USER -p$PASSWORD --quiet --eval "printjson(rs.status())" | grep -B 3 PRIMARY | awk -F ':' '/name/{print $2}' | sed 's/ "//'`

MONGO_SLAVE=`${MONGO_BIN_PATH} $IPADDR -u$USER -p$PASSWORD --quiet --eval "printjson(rs.status())" | grep SECONDARY|wc -l`

if [[ "${MONGO_MASTER}" != "${IP}" ]] || [[ "${MONGO_SLAVE}" != "2" ]]; then
    echo "0"
    exit 1

else
    echo "1"
fi

zabbix_agentd修改配置

vim /etc/zabbix/zabbix_agentd.conf
####添加 Mongodb montior $1 ==PORT  $2==COMMAND
UnsafeUserParameters=1  #启用自定义KEY
UserParameter=mongo_primary,/etc/zabbix/scripts/chk_mongodb_replset.sh

监控Mongodb状态

MongoDB庖丁解牛(Replication Set监控/备份/故障切换)chk_mongodb.txt

监控MongoDB副本集PRIMARY角色异常监控告警

[root@web02]# /data/scripts/check_mongo_primary.sh
MONGO_BIN_PATH="/usr/bin/mongo"
IPADDR="10.51.183.161"
PORT="27017"
CURRENT_MONGO_MASTER=`awk '/mongod.vancloud.com/{print $1}' /etc/hosts`
MONGO_MASTER=`${MONGO_BIN_PATH} --host $IPADDR admin --quiet --eval "printjson(rs.status())" | grep -B 3 PRIMARY | awk -F ':' '/name/{print $2}' | sed 's/ "//'`

if [[ "${MONGO_MASTER}" != "${IPADDR}" ]]; then
	sed -i '/mongod.vancloud.com/d' ${HOSTS_FILE}
	echo "${MONGO_MASTER} mongod.vancloud.com" >> ${HOSTS_FILE}
	echo "MongoDB副本集PRIMARY角色已自动切换,请尽快确认!"
fi

Mongodb备份

全库备份脚本

[root@xiujianshen-web02 mongodb_backup]# vim /scripts/mongodb_backup.sh 

#!/bin/bash
targetpath='/data/mongodb_backup'
nowtime=$(date +%F-%T)


start()
{
  /usr/local/mongodb/bin/mongodump --host 127.0.0.1 --port 37017 -o ${targetpath}/$nowtime
}
execute()
{
  start
  if [ $? -eq 0 ]
  then
    echo "back successfully!"
  else
    echo "back failure!"
  fi
}

execute
echo "============== back end ${nowtime} =============="

注意

业务通过mongod.vancloud.com域名进行mongodb集群访问,当mongodb集群的primary节点发生故障时,会自动选举剩下的其中的一个节点为primary角色,然后业务侧的监控脚本会自动发现最新的primary节点,并刷新本地的hosts配置。整个切换过程对业务侧保持透明,当然当数据与访问量到了一定规模时,我们也不推荐采用此架构模式,此时可以考虑自动路由分片的架构模式。

YaLei

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: