首页 > 其他 > 详细

对采用rsync + inotify数据同步方式进行健康检测

时间:2014-04-06 20:09:04      阅读:674      评论:0      收藏:0      [点我收藏+]

一、问题背景

我们平时一般都采用 rsync + inotify 的方式进行网站数据实时同步,有时会遇到不能正常推送到某台服务器,而不能及时发现,因此有必要对数据同步进行健康检测。


二、技术原理

在源端服务器定期构造简单测试数据,休息若干秒后,然后从各个目的端服务器进行测试数据拉取,同时将拉取信息记录在/tmp/check_rsync_health.log”,以做进一步的告警处理。


三、SHELL脚本代码(/data/scripts/check_rsync_health.sh

#!/bin/bash
#===================================================================================================
# 检测网站源端服务器代码数据推送是否正常
# 发生异常时,会产生邮件、RTX、短信告警
#===================================================================================================
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
                                                                                                                                                                    
## WEB数据目录
WEB_DATA_PATH="/data/web/data"
                                                                                                                                                                    
## 其他Apache地址列表
IP_LIST_FILE="/usr/local/inotify/iplist.txt"
                                                                                                                                                                    
## 代码同步rsync参数
user="backup"
pwdfile="/usr/local/rsync/etc/rsyncd.pwd"
rsync="/usr/local/rsync/bin/rsync"
                                                                                                                                                                    
srcdir="webdata"
dstdir="/tmp/"
                                                                                                                                                                    
## 短信、RTX、邮件告警程序
MOINITOR_BIN_PATH="/usr/local/oms/agent/alarm/BusMonitorAgent"
TOKEN="service_monitor"
                                                                                                                                                                    
## 状态标记
RSYNC_FLAGS=0
                                                                                                                                                                    
## 检测结果LOG文件
RESULT_LOG_FILE="/tmp/check_rsync_health.log"
                                                                                                                                                                    
## 同步测试文件
TEST_FILE="check_rsync_health.dat"
                                                                                                                                                                    
#===================================================================================================
echo "MY_WEB_DATA"`date +‘%Y%m%d%H%M%S‘` > ${WEB_DATA_PATH}/${TEST_FILE}
sleep 20
echo -n "" > ${RESULT_LOG_FILE}
                                                                                                                                                                    
for IPADDR in `sed ‘/^$/d‘ ${IP_LIST_FILE}`
do
    recv_count=`ping -c 2 ${IPADDR} | awk ‘/received/ {print $4}‘`
    [[ ${recv_count} -eq 0 ]] && echo "远程服务器: ${IPADDR} ping不可达 ^_^" && continue
                                                                                                                                                                       
    ${rsync} -qzrtopgl --include "${TEST_FILE}" --exclude ‘*‘ --bwlimit=40960 ${user}@${IPADDR}::${srcdir} ${dstdir} --password-file=${pwdfile}
    if [[ ! -e /tmp/${TEST_FILE} ]]; then
        RSYNC_FLAGS=1
    else
        retval=`sort -nr ${WEB_DATA_PATH}/${TEST_FILE} /tmp/${TEST_FILE} | uniq -u | wc -l`
        [[ ${retval} -gt 0 ]] && RSYNC_FLAGS=1
    fi
                                                                                                                                                                       
    if [[ ${RSYNC_FLAGS} -gt 0 ]]; then
        echo "${IPADDR}|no" >> ${RESULT_LOG_FILE}
        RSYNC_FLAGS=0
    else
        echo "${IPADDR}|yes" >> ${RESULT_LOG_FILE}
    fi
                                                                                                                                                                       
    rm -f /tmp/${TEST_FILE}
done
                                                                                                                                                                    
#---------------------------------------------------------------------------------------------------
retval=`awk -F ‘|‘ ‘$2=="no" {print $2}‘ ${RESULT_LOG_FILE} | wc -l`
if [[ ${retval} -gt 0 ]]; then
    killall -9 rsync.sh inotifywait >/dev/null 2>&1
    cd /usr/local/inotify && nohup ./rsync.sh &
    ${MOINITOR_BIN_PATH} -c 2 -f ${TOKEN} -t "同步健康检测" -i "网站源端代码推送发生异常,已修复完毕,请尽快确认 ^_^"
fi
                                                                                                                                                                    
rm -f ${WEB_DATA_PATH}/${TEST_FILE} /tmp/${TEST_FILE} `pwd`/connect_error.log
                                                                                                                                                                    
## 防止文件锁不能正常释放,而导致下次未能正常调度运行
retval=`fuser /var/run/check_rsync.lock`
if [[ "${retval}X" != "X" ]]; then
    rm -f /var/run/check_rsync.lock && touch /var/run/check_rsync.lock
    kill -9 `ps -A -oppid,pid,cmd | grep check_rsync_health.sh | grep -v grep | awk ‘{print $2}‘` >/dev/null 2>&1
fi
                                                                                                                                                                    
#===================================================================================================
#The End


四、crontab信息添加

*/10 * * * * (flock --timeout=0 /var/run/check_rsync.lock /data/scripts/check_rsync_health.sh >/dev/null 2>&1)

注:增加了文件锁“/var/run/check_rsync.lock”,以保证单实例运行




本文出自 “人生理想在于坚持不懈” 博客,请务必保留此出处http://sofar.blog.51cto.com/353572/1391119

对采用rsync + inotify数据同步方式进行健康检测,布布扣,bubuko.com

对采用rsync + inotify数据同步方式进行健康检测

原文:http://sofar.blog.51cto.com/353572/1391119

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!