keepalive安装(配合mysql主主复制)
系统:centos5.5_64#vip为程序读取mysql的IP,应和程序服务器的网卡一个网段主库实际IP 192.168.10.48从库实际IP 192.168.10.49虚拟VIP 192.168.10.50 #该IP供程序连接使用【一】、keepalived安装步骤,这里建议使用keepalived-1.1.17,不可使用过高版本wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gztar zxvpf keepalived-1.1.17.tar.gzcd keepalived-1.1.17./configure#不使用lvs只需要Use VRRP Framework为Yesmakemake install#拷贝配置文件并创建配置问文件目录cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/#suse使用keepalived.suse.init启动脚本覆盖/etc/init.d/keepalivedcp /usr/local/sbin/keepalived /usr/sbin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/mkdir /etc/keepalived【二】、定义配置文件vim /etc/keepalived/keepalived.conf #(见下面文件详细配置)#启动服务/etc/init.d/keepalived start#启动后加载配置文件(一般无需该操作,只有在更新了配置之后重新加载时使用)/usr/sbin/keepalived -f /etc/keepalived/keepalived.conf#如下是keepalived.conf配置文件内容,因为我们的需求是主主热备,无需其他功能,故主从的配置文件一致即可#在同一局域网内,两组keepalived两参数 router_id 和 virtual_router_id 不可以一致##主从库需要区别修改的三处如下:## state 初始状态值,主库对应参数为 MASTER 从库对应的参数为 BACKUP# priority 主库的优先级参数为150 从库的优先级参数为 100 注意这里的参数,从库的优先级一定要低于主库# virtual_ipaddress 定义虚拟VIP地址以及绑定的网卡参数############################keepalived.conf配置内容##########################! Configuration File for keepalivedglobal_defs { router_id mysql #keepalive主机标识,这里的标识很重要,影响到主从库之间的keepalived通讯}vrrp_script check_run { script "/etc/keepalived/check_mysql.sh" #服务器检查脚本,主要检查mysql是否可以正常访问 interval 3 #服务检查周期,单位:秒}vrrp_sync_group VG1 { group { VI_1 #服务组名,多个时候一个出错就切换 } notify_master /etc/keepalived/takeover.sh #状态切换为从库接管时执行该脚本,即主库宕机时,从库接管 notify_backup /etc/keepalived/recovery.sh #状态切换为主库接管时执行该脚本,即主库恢复时,从库归还}vrrp_instance VI_1 { state BACKUP #初始状态,都设置为BACKUP,配合不抢占参数 interface eth1 #实例绑定网卡 virtual_router_id 11 #VRID标识0-255 priority 150 #主库的高优先级竞选为MASTER,从库的优先级要低于主库,故需要设置为100 advert_int 1 #检查时间,单位:秒 nopreempt #不抢占,只能设置在BACKUP上 authentication { #验证方式 auth_type PASS auth_pass 1qaz@WSX } track_script { check_run #定义程序的检查方法,调用脚本 } virtual_ipaddress { #VIP 10.10.20.205 dev eth1 label eth1:1 }}##########################end#############################################【三】、注意事项1、无论主从服务器mysql都要优先keepalived启动,所以mysql开机启动权值应高于keepalived2、将启动脚本加入系统服务启动项,需在脚本加入如下一段内容,位置放到`#!/bin/sh`下即可,注意前面的`#`号需要添加`# chkconfig: 2345 90 80 `#解释如下:# chkconfig 系统命令通过该命令获取参数# 2345 启动顺序# 20 开机启动优先权 故mysql的启动优先权一定要高于keepalived优先权,建议将mysql设置为15 ,keepalived设置为80# 80 关机停止优先权 故mysql的停止优先权一定要高于keepalived优先权,建议将mysql设置为60 ,keepalived设置为803、添加启动chkconfig --add keepalivedchkconfig --level 35 keepalived on4、如果需要主从两台服务器关机维护时,如迁移机房,应先关闭从库服务器上的mysql和keepalived,再关闭主库的服务,避免因为先关闭主库而导致从库接管服务【四】、需要配合的检查脚本及报警脚本如下###########################################################################!/bin/bash#脚本位置:/etc/keepalived/check_mysql.sh#脚本作用:mysql状态检测脚本mysql -urepl -p"repl" -h127.0.0.1 -P3306 -e "show status;" >/dev/null 2>&1if [ "$?" -ne 0 ];then/etc/init.d/keepalived stopfi#脚本结束##########################################################################chmod 700 /etc/keepalived/check_mysql.sh###########################################################################!/bin/sh#脚本位置:/etc/keepalived/takeover.sh#脚本作用:接管服务报警脚本#报警短信手机号Phonenumber=13811080724LANG="zh_CN.GBK"export LANGIP=`/sbin/ifconfig|awk -v RS="Bcast:" '{print $NF}'|awk -F: '/addr/{print $2}'|awk '{printf"%s_",$0}' | sed 's/_$//'`node=`ls /data1/*mysql5*/data/*_mysql5_*_[0-9][0-9]*|awk -F "/" '{print $NF}'|awk -F"_" '{print $1}'`case $node inmaster) #报警信息 SMS="${node}库`hostname`已恢复服务_${IP}_`date +%Y%m%d_%R`" #邮件报警 echo $SMS | /bin/mail -s "keepalived恢复通知" mis@pearlinpalm.com #短信报警 java -cp "/root/sh" SmsDelegate $Phonenumber "$SMS";;slave) #备用节点接管后,停止数据库备份 sed -i 's/\(.*\)dbbackup\.sh\(.*\)/#\1dbbackup\.sh\2/' /var/spool/cron/root #报警信息 SMS="${node}库`hostname`已接管服务_${IP}_`date +%Y%m%d_%R`" #邮件报警 echo $SMS | /bin/mail -s "keepalived接管通知" mis@pearlinpalm.com #短信报警 java -cp "/root/sh" SmsDelegate $Phonenumber "$SMS" ;;esac#记录日志echo $SMS >> /etc/keepalived/keepalived.log #脚本结束##########################################################################chmod 700 /etc/keepalived/takeover.sh###########################################################################!/bin/sh#脚本位置:/etc/keepalived/recovery.sh#脚本作用:关闭服务通知脚本Phonenumber=15801177843LANG="zh_CN.GBK"export LANGIP=`/sbin/ifconfig|awk -v RS="Bcast:" '{print $NF}'|awk -F: '/addr/{print $2}'|awk '{printf"%s_",$0}' | sed 's/_$//'`node=`ls /data1/*mysql5*/data/*_mysql5_*_[0-9][0-9]*|awk -F "/" '{print $NF}'|awk -F"_" '{print $1}'`case $node inmaster)SMS="${node}库`hostname`已等待接管_${IP}_`date +%Y%m%d_%R`";;slave)SMS="${node}库`hostname`已等待接管_${IP}_`date +%Y%m%d_%R`"#主节点恢复后,启动数据库备份sed -i 's/#\(.*\)dbbackup\.sh\(.*\)/\1dbbackup\.sh\2/' /var/spool/cron/root;;esac#记录日志echo $SMS >> /etc/keepalived/keepalived.log#脚本结束##########################################################################chmod 700 /etc/keepalived/recovery.sh【五】、测试结果1、首先需要保证mysql和keepalived都正常启动,且mysql优先启动于keepalived.可以ifconfig查看到主库的虚拟VIP网卡,从库是正常网卡2、将主库服务器电源直接断电,从库自动接管,时间预计2秒钟左右.从库将自动启动虚拟VIP网卡,并接管成功,访问数据库正常。在接管的同时从库会发出报警告知。3、重新启动主库,待主库正常启动,从库将自动归还,这时从库的虚拟VIP将消失,主库的虚拟VIP加载。同时从库在归还的同时将发出报警告知。4、如果结果vip不生效,从接管VIP后主动刷新arp: /sbin/arping -I em1 -c 10 -s vip gateway&>/dev/null