ChinaUnix首页 > 精华文章 > Sybase > 正文

[精华] 写了一个复制服务器的监控脚本, 大家提提意见


http://www.chinaunix.net 作者:unixer123  发表于:2008-05-05 15:53:46
发表评论】 【查看原文】 【Sybase讨论区】【关闭

写了一个复制服务器的监控脚本, 放在crontab中, 首先监控repserver,rsm是否正常运行,如果down掉, 则重新启动进程
否则, 继续执行admin who_is_down语句, 将输出结果放到一个文件中, 逐行分析时候是否存在指定的复制关系, 有的话
则形成resume connection to "复制关系“的语句, 然后执行此语句。
#!/bin/ksh

HOME_DIR=/export/home/sybaserep
LD_LIBRARY_PATH=/export/home/sybaserep/OCS-12_5/lib:/export/home/sybaserep/OCS-12_5/lib3p:
export HOME_DIR LD_LIBRARY_PATH

PROCESS_LIST=$HOME_DIR/script/process_list
LOG=$HOME_DIR/script/log
TMPFILE=$HOME_DIR/script/tmpfile
REP_CONN_LIST=$HOME_DIR/script/rep_conn_lst

DOWN="NO"

while read LINE
do
    ps -ef | grep `echo $LINE | awk '{print $1}'` | grep -v grep
    if [ "$?" = 0 ]
    then
        DOWN = "YES"
        process_name=`echo $LINE | awk '{print $1}'`
        echo "$process_name failed at `date`" >> $LOG
        start_process=`echo $LINE | awk '{print $2" "$3}'`
        $start_process
        echo "$process_name restart at `date`" >> $LOG
        echo "--------------------------------" >> $LOG
        sleep 60
    fi
done < $PROCESS_LIST

if [ $DOWN = "YES" ]
then
    exit 1
fi

eval $HOME_DIR/OCS-12_5/bin/isql -Usa -Pxxxxxxxx -Sxxxxxxxx -i$HOME_DIR/script/getdown.sql > $TMPFILE

while read REP_CONN
do
    cat $TMPFILE | grep $REP_CONN
    echo "cat" >> $LOG
    if [ "$?" != 0 ]
    then
        sql="resume connection to $LINE"
        echo $sql > $TMP_DIR/script/resume.sql
        echo "go" >> $TMP_DIR/script/resume.sql 
        eval $HOME_DIR/OCS-12_5/bin/isql -Usa -Pxxxxxxxx -Sxxxxxxxx -i$HOME_DIR/script/resume.sql >> $LOG
        sleep 30
    fi
done < $REP_CONN_LIST

date >> $LOG



 chenfeng825 回复于:2007-12-17 12:36:21

不错!
建议加上对rep 和db server的日志分析,例如,如果是duplicate key,queue 等问题导致的suspend等问题,resume依然还是会报错的,针对几个常见的错误进行一些常规处理会更加完美!


 unixer123 回复于:2007-12-17 13:22:12

斑竹, 有个疑问, 就比如说duplicate key这方面的问题, 如果主点的数据表有主键, 那么在主点的操作不会成功的,这个操作就应该不会传到备点啊

还有dbserver的分析也应该是ftp到主点或备点的服务器上取下来再分析吧


 wufeiwf 回复于:2008-01-04 10:08:32

部分同意,很多时候如果queue设备本身没有问题,down的connection通常因为数据不一致(总会有人不小心动过备点的数据)或者主点备点的索引有点区别造成,往往在实际应用中直接resume是成功不了的,倒是建议可以先resume ... skip tran,这样connection能up的可能性更大一点,再写点脚本去分析exception里面的语句或者数据库errorlog

[ 本帖最后由 wufeiwf 于 2008-1-4 10:10 编辑 ]


 liyongquan 回复于:2008-01-04 11:16:27

在未查清DOWN的原因前直接resume ... skip tran比较危险,易造成两边的数据不一致.


 wufeiwf 回复于:2008-01-04 11:35:34

skip tran是不安全,但是实际运行中就有可能已经两边数据不一致而造成的down,不skip也不行,除非手工处理,而且一定是要检查errorlog,总之不是简单的一个resume就能自动处理的,还是有比较多的情况要考虑。这种问题不能出现次数太多,否则累死了,而且系统说明用得有问题,另外在业务繁忙每天数据量大的复制系统中,事务的单位一定要尽量小,否则巨大的事务下的partition会成为噩梦。


 sky_walker1011 回复于:2008-01-09 17:44:39

sky_walker1011 @sina.com


 nicsky 回复于:2008-05-05 15:53:46

谢谢楼主了




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=1030139
转载请注明作者名及原文出处