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