您的位置:首页 > 运维架构

LVS监控Realserver状态实现及时添加删除ReasServer小脚本

2012-04-24 09:11 645 查看
为了实现数据库读写分离,使用传统的mysql-proxy,变形虫(ameba),但是mysql-proxy不是很稳定,有的时候直接罢工,而变形虫不支持事务,而我们的程序是一个需要支持事务的引擎,所以这个用不到了,所以经过考虑,决定尝试LVS分发,来实现读写分离,但是LVS对后台realserver无法实时进行检测,所以会出现连接数据库失败的,所以写个脚本进行自动检测,然后自动把有故障的提出ipvsadm的队列,当故障解决了,又再次加到队列中,这样就不会出现分发错误、连接数据库失败的问题了,好了接下来就是一个简单的配置介绍了:架构设计大致如下:

本架构中涉及到了主从复制,LVS,这些配置很简单,不在多描述,接着就是主要讲述一下LVS的directory检测后端Realserver状态,并实现自动添加和删除对应出现故障的Realserver主机,主从和LVS就不多说了,接下来主要讲解的是Direcrtory自动检测脚本,然后根据slave的同步状态,同步延迟进行自动添加和删除。#!/bin/bash#:Title:Monitor the realservers#:Synopsis:#:Data:2012-04-23 13:36:32#:Version:1.1#:Author:LuoWei <luoweiro@126.com>#:Options:#-----------------------------------------------#Monitor RealServer on Direcrory#-----------------------------------------------User=connect //授权连接帐号(Slave上对directory主机授权)Password=redhat //连接Slave的密码Behindtime=120 //定义主从延迟时间,如果超过这个时间,就把后端的Realserver删除IPVS=/sbin/ipvsadmVIP=192.168.158.159 //定义VIPVPORT=3306 //定义LVS的虚拟端口RPORT=3306 //定义Realserver的端口while [ 0 -lt 1 ];do //写个死循环,让脚本后端执行 for I in {165,166};do //定义Realserver的IP,我这里两个地址,你可以接着写 Host1=192.168.158.$I del_realserver() { //定义删除Realserver的函数 $IPVS -d -t $VIP:$VPORT -r $Host1:$RPORT } add_realserver() { //定义添加Realserver的函数 $IPVS -a -t $VIP:$VPORT -r $Host1:$RPORT -g } Slave_IO_Running=`mysql -h $Host1 -u$User -p$Password -e "SHOW SLAVE STATUS\G;" | grep "Slave_IO_Running" | awk -F":" '{print $2}'` //定义Slave_IO_Running Slave_SQL_Running=`mysql -h $Host1 -u$User -p$Password -e "SHOW SLAVE STATUS\G;" | grep "Slave_IO_Running" | awk -F":" '{print $2}'` //定义Slave_SQL_Running Seconds_Behind_Master=`mysql -h $Host1 -u$User -p$Password -e "SHOW SLAVE STATUS\G;" | grep "Seconds_Behind_Master" | awk -F":" '{print $2}'` //定义Seconds_Behind_Master延迟时间 if [ $Slave_IO_Running == "Yes" -a $Slave_SQL_Running == "Yes" -a $Seconds_Behind_Master -lt $Behindtime ];then //如果三个参数都符合要求,就添加 add_realserver 当然这个添加不是必要的,如果原来有的话,就是防止以前删除过了,然后再添加,可以再写个判断,笔者就省略了 elif [ $Slave_IO_Running == "Yes" -a $Slave_SQL_Running == "Yes" -a $Seconds_Behind_Master -gt $Behindtime ];then del_realserver else del_realserver fi donedone
下面我就模拟停止165上的主从,可以看到164上就会把165的从队列中删除。


当把主从开启的时候,又会添加到队列中了

好了,现在基本功能都能实现了,但是要是采用文中的死循环的放在后端运行的话,会占用cpu资源,所以建议修改,然后优化一下脚本

我暂时还没有对脚本优化,望广大盟友给点优化的建议,以后就用这个脚本进行检测后端Realserver状态来自动添加和删除后端Realserver,避免照成连接失败的状况,同时也能快速检测Realserver的状态,可以在此脚本上添加报警机制,来实现主从同步状态进行监控。
望大家给点优化脚本的建议,不甚感激!!

本文出自 “Ro の博客” 博客,请务必保留此出处http://luoweiro.blog.51cto.com/2186161/842786
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐