mysql keepalived双主ha


【1】环境

操作系统 Centos7.8

192.168.148.39  DB3

192.168.148.27  DB4

192.168.148.253 VIP(一个尚未占用的内网ip即可)

备注:互为主从 DB 3/DB 4:该部分参考:

备注:当然不互为主从也不影响该篇文章对于 keepalived 的研究效果

【2】keepalived 安装配置

(2.1)操作系统环境配置

#(1)添加非本机IP绑定支持
echo "net.ipv4.ip_nonlocal_bind=1" >> /etc/sysctl.conf

#(2)开启路由转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

sysctl -p #(
3)iptables相关 #配置iptables,添加VRRP通讯支持 -A INPUT -d 224.0.0.18 -j ACCEPT #允许组播地址访问本机,组播地址用于keepalived互相检测心跳 -A INPUT -s 192.168.1.0/24 -d 224.0.0.18 -j ACCEPT #允许组播地址通信 -A INPUT -s 192.168.1.0/24 -p vrrp -j ACCEPT #允许VRRP(虚拟路由器冗余协议)通信 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCPET #开发mysql3306端口

(2.2)安装与查阅

方法一:yum安装:

yum install-y keepalived 

如何找到 keepalived 安装到哪里了呢?

rpm -qal|grep keepalived

很明显,相关配置文件在 /etc/keepalived/keepalived.conf 

方法二:二进制包安装

#(1)下载
官网:https://www.keepalived.org/download.html
wget https://www.keepalived.org/software/keepalived-1.3.3.tar.gz

#(2)安装前置依赖包
mount /dev/cdrom /mnt #加载本地源,有网络直接配置也可(参考:yum源配置、epel源配置)
yum install kernel-devel openssl-devel popt-devel -y

#(3)安装
cd /soft/
tar -zxvf keepalived-1.3.3.tar.gz
cd keepalived-1.3.4
./configure --prefix=/usr/local/keepalived/
make && make install

(2.3)修改配置文件

主从配置文件都一样~

! Configuration File for keepalived

global_defs {
   notification_email {
     guochaoqun@bianfeng.com
     815202984@qq.com
   }
   notification_email_from dbmoniter@bianfeng.com
   smtp_server 60.191.38.219
   smtp_connect_timeout 30
   router_id mysql_ha
   vrrp_skip_check_adv_addr
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_script check_run {
script "/etc/keepalived/mysql_check.sh"
interval 60
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        check_run
    }
    virtual_ipaddress {
        192.168.148.253
    }
}

/etc/keepalived/mysql_check.sh 的作用是为了每分钟判断一次mysql服务是否存活

记得加权限  chmod +x /etc/keepalived/mysql_check.sh,否则会报错:

因为我这里在配置文件里就写了密码,所以我这里 mysql -e  就没写账户密码

#!/bin/bash
source /etc/profile
count=1

while true
do
mysql -e "show status;" > /dev/null 2>&1
i=$?
ps aux | grep mysqld | grep -v grep > /dev/null 2>&1
j=$?
if [ $i = 0 ] && [ $j = 0 ]
then
   exit 0
else
   if [ $i = 1 ] && [ $j = 0 ]
   then
       exit 0
   else
        if [ $count -gt 5 ]
        then
              break
        fi
   count=$((${count}+1))
   continue
   fi
fi

done
systemctl stop keepalived

(2.4)启动 keepalived ,核验

我们在 192.168.148.39  DB3  上启动 keepalived

如下,成功

 另外一台机器

  192.168.148.27  DB4

也启动:

(2.5)故障转移测试,飘VIP测试

当前VIP 拥有者 192.168.148.39 ,关闭 mysql 服务

  [root@DB3 keepalived]# systemctl stop mysql

 如上图,我们立即查看 keepalived 是正常的;

 等一个我们60秒的check间隔,再去查看 keepalived 的情况,发现其在 15.08分还是在启动状态的,在15.11分关闭了

然后我们查看另外一个机器,VIP 已经飘过来了;

   

我们再重新启动

  192.168.148.39 DB3机器的 Mysql 和 keepalived;

  发现其 VIP 也没有自动飘回来;这是因为 我们都 keepalived 配置文件中  设置的  state BACKUP ,且权重参数都是100 一样的,所以不会出现抢占情况(具体原理见参考文件中的 mysql keepalived 双主更全面详细的)

(2.6)mysql持续连接视角(再飘一下VIP)

那我们在2个机器上都新建了 账户

create user ruser@'192.168.148.%' identified by 'a123456!';

根据上面的操作,我们当前VIP 是在 

  192.168.148.27 DB4 上

我们用另外一个机器DB5去连接

 然后我们在DB4上关闭mysql;

 在VIP切换的过程中,我们的查询一直是 丢失连接,无法连接的;等VIP彻底切到 DB3 之后,我们的查询就好了;这个过程对于程序是完全透明的,程序只需要连这个VIP 等待它恢复即可;

【故障处理】

(1)vrrp_script 定义的脚本不执行

需要加权限 chmod +x  脚本名

(2)vip无法ping通,无法访问端口

#vrrp_strict

  keepalived.conf中vip配置好后,通过ip addr可以看到vip已经顺利挂载,但是无法ping通,并且防火墙都已关闭;

  原因是keepalived.conf配置中默认vrrp_strict打开了,需要把它注释掉。重启keepalived即可ping通。

【参考文档】

超详细keepalived 配置文件参数:https://blog.csdn.net/mofiu/article/details/76644012

mysql keepalived 双主更全面详细的:https://www.cnblogs.com/gered/p/12328155.html#autoid-2-0-0

相关