MySQL5.6+Keepalived 高可用性实战

tech2025-07-26  10

1.Keepalived VRRP 介绍

keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

keepalived工作原理 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。(云服务器不支持VRRP)

虚拟路由冗余协议,可以认为是实现高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

脑裂(裂脑): Keepalived的BACKUP主机在收到不MASTER主机报文后就会切换成为master,如果是它们之间的通信线路出现问题,无法接收到彼此的组播通知,但是两个节点实际都处于正常工作状态,这时两个节点均为master强行绑定虚拟IP,导致不可预料的后果,这就是脑裂。 解决方式: 1、添加更多的检测手段,比如冗余的心跳线(两块网卡做健康监测),ping对方等等。尽量减少"裂脑"发生机会。(指标不治本,只是提高了检测到的概率); 2、做好对裂脑的监控报警(如邮件及手机短信等或值班).在问题发生时人为第一时间介入仲裁,降低损失。例如,百度的监控报警短倍就有上行和下行的区别。报警消息发送到管理员手机上,管理员可以通过手机回复对应数字或简单的字符串操作返回给服务器.让服务器根据指令自动处理相应故障,这样解决故障的时间更短. 3、爆头,将master停掉。然后检查机器之间的防火墙。网络之间的通信

2.项目准备 1、准备三台虚拟机,选择两台mysql作为keepalived(一台master 一台backup),一台做客户端访问用。 2、给两台mysql安装keepalived制作高可用生成VIP

[root@mysql-master ~]# 192.168.13.128 主节点 [root@mysql-backup ~]# 192.168.13.129 备用节点 [root@client ~]# 192.168.13.133 第一台真实服务器 VIP 192.168.13.144

3.mysql + KeepAlived 自动切换

安装keepalived—两台机器都操作

192.168.13.128 [root@mysql-master ~]# yum -y install ipvsadm keepalived [root@mysql-master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak #备份 [root@mysql-master ~]# vim /etc/keepalived/keepalived.conf

keepalived.conf:

! Configuration File for keepalived global_defs { router_id directory1 #只是名字而已,辅节点改为directory2(两个名字一定不能一样) } vrrp_script check_run { script "/etc/keepalived/keepalived_chech_mysql.sh" interval 5 #5秒执行一次脚本 } vrrp_instance VI_1 { state MASTER #定义主还是备,备用的话写backup interface ens33 #VIP绑定接口 virtual_router_id 89 #整个集群的调度器一致(在同一个集群) priority 100 #(优先权)back改为50(50一间隔) advert_int 1 #检查间隔,默认为1s authentication { auth_type PASS #主备节点认证 auth_pass 1111 } virtual_ipaddress { 192.168.13.144/24 #VIP(自己网段的) } track_script { check_run } } [root@mysql-master ~]# vim /etc/keepalived/keepalived_chech_mysql.sh

keepalived_chech_mysql.sh

#!/bin/bash /usr/bin/mysql -uroot -p'你自己的数据库密码' -e "show status" &>/dev/null if [ $? -ne 0 ] ;then # service keepalived stop systemctl stop keepalived fi [root@mysql-master ~]# chmod +x /etc/keepalived/keepalived_chech_mysql.sh 192.168.13.129 [root@mysql-backup ~]# yum install -y ipvsadm keepalived [root@mysql-backup ~]# mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak [root@mysql-backup ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id directory2 } vrrp_script check_run { script "/etc/keepalived/keepalived_check_mysql.sh" interval 5 } vrrp_instance VI_1 { state BACKUP #设置为backup interface ens33 nopreempt #设置到back上面,不抢占资源 virtual_router_id 89 priority 50 #备用改为50 advert_int 1 #检测间隔1s authentication { auth_type PASS auth_pass 1111 #认证类型和密码主备一样,要不然无法互相认证 } virtual_ipaddress { 192.168.13.144/24 #抢占的VIP也一样 } track_script { check_run } } [root@mysql-backup ~]# vim /etc/keepalived/keepalived_chech_mysql.sh

keepalived_chech_mysql.sh

#!/bin/bash /usr/bin/mysql -uroot -p'你自己的数据库密码' -e "show status" &>/dev/null if [ $? -ne 0 ] ;then # service keepalived stop systemctl stop keepalived fi [root@mysql-backup ~]# chmod +x /etc/keepalived/keepalived_chech_mysql.sh

在任意一台机器作为客户端 测试的时候记得检查mysql用户的可不可以远程登录。

192.168.13.133 [root@client ~]# systemctl stop firewalld && setenforce 0 # 关闭防火墙 [root@client ~]# mysql -uroot -p'master虚拟机上mysql密码' -h192.168.13.144 #远程登录VIP,这时候是master
最新回复(0)