- 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副本集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配置。整个切换过程对业务侧保持透明,当然当数据与访问量到了一定规模时,我们也不推荐采用此架构模式,此时可以考虑自动路由分片的架构模式。