keepalived+mysql双主

二、搭建过程
搭建环境(服务器配置忽略)
master1: 196.168.126.6/22
master2: 196.168. 126.7/22
VIP:196.168. 126.67/32
master1和master2上安装keepalived服务,并修改配置文件,如下配置
解压
tar -xvf keepalived-2.0.8.tar.gz
cd keepalived-2.0.8

编译安装
./configure --prefix=/usr/local/keepalived
make && make install
对命令进行添加
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

192.168.126.6

[root@zxw6 ~]# cat /etc/keepalived/keepalived.conf 

! Configuration File for keepalived
      
global_defs {
notification_email {
kw_wangyang@tech.cebbak.com
gongzidong@tech.cebbak.com
}
      
notification_email_from kw_wangyang@tech.cebbak.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id MASTER-HA
}


vrrp_script chk_mysql_port {
        script "/root/chk_mysql.sh"
        interval 2
        weight -5
        fall 2
        rise 1
}
 
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    mcast_src_ip 192.168.126.6
    virtual_router_id 51
    priority 100
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.67
    }
}
track_script {
   chk_mysql_port
}
}
[root@zxw6 ~]# cat chk_mysql.sh 
#!/bin/bash
counter=`ss -tnl | grep "LISTEN" |grep "3306" |wc -l`
if [ ${counter} -eq 0 ]; then
      systemctl stop  keepalived 
fi
exit 0

192.168.126.17

[root@zxw7 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived
      
global_defs {
notification_email {
kw_wangyang@tech.cebbak.com
gongzidong@tech.cebbak.com
}
      
notification_email_from kw_wangyang@tech.cebbak.com
 smtp_server 127.0.0.1
 smtp_connect_timeout 30
 router_id MASTER-HA
}
vrrp_script chk_mysql_port {
        script "/root/chk_mysql.sh"
        interval 2
        weight -5
        fall 2
        rise 1
}
 
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    mcast_src_ip 192.168.126.7
    virtual_router_id 51
    priority 90
    nopreempt
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.67
    }
}
track_script {
   chk_mysql_port
}
}     
[root@zxw7 ~]# cat chk_mysql.sh 
#!/bin/bash
MYSQL=mysql
MYSQL_HOST=localhost
MYSQL_USER=root
MYSQL_PASSWORD=zxw
CHECK_TIME=3
#mysql  is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
MYSQL_OK=1
function check_mysql_helth (){
  $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p${MYSQL_PASSWORD} -e "show status;" >/dev/null 2>&1
    if [ $? = 0 ] ;then
        MYSQL_OK=1
    else
        MYSQL_OK=0
    fi
        return $MYSQL_OK
}
while [ $CHECK_TIME -ne 0 ]
do
        let "CHECK_TIME -= 1"
        check_mysql_helth
if [ $MYSQL_OK = 1 ] ; then
        CHECK_TIME=0
        exit 0
fi
if [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]
then
        pkill keepalived
        exit 1
fi
sleep 1
done
原文地址:https://www.cnblogs.com/itzhao/p/15650928.html