当数据库发生宕机的情况,如果配置了数据库主从同步模式或主主同步模式,则可以从从库中获取数据。
当数据库发生宕机的情况,要求应用系统实现高可用,应用系统不会受到影响,需要对mysql进行双机热备实现数据库的高可用。
实现双机热备的方式有Mycat组件方式、canel组件方式、keepalived组件方式,下面对keepalived实现mysql双机热备进行简单的分析。
1、mysql主主同步模式
主从同步模式是一个是主库,另一个是从库,现在都是主库,互为主从,mysql主主同步搭建配置具体参加大佬博文,此处不再描述;
2、keepalived配置
准备2个物理机器,分别安装mysql,并进行主主同步配置;分别安装keepalived服务,并进行双机热备配置;
keepalived的安装参考上篇博文:https://blog.csdn.net/leijie0322/article/details/129002892?spm=1001.2014.3001.5501
注:采用keepalived作为高可用方案时,两个节点最好都设置成BACKUP模式,避免因为意外情况下(比如脑裂)相互抢占导致往两个节点写入相同数据而引发冲突;
2.1、配置主节点
vim /etc/keepalived/keepalived.conf
! Configuration File forkeepalived
global_defs {
router_id MYSQL_HA #当前节点名
}
vrrp_instance VI_1 {
state BACKUP #两台都设置BACKUP
interface eth0 #绑定虚拟IP的网络接口
virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
priority 101 #节点的优先级,另一台优先级改低一点
advert_int 1 #组播信息发送间隔,两个节点设置必须一样
nopreempt #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
authentication { #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 123456
}
virtual_ipaddress { #指定虚拟IP,两个节点设置必须一样
192.168.100.100
}
}
virtual_server 192.168.100.100 3306 { #linux虚拟服务器(LVS)配置
delay_loop 2 #每个2秒检查一次real_server状态
lb_algo wrr #LVS调度算法,rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #LVS集群模式 ,NAT|DR|TUN
persistence_timeout 60 #会话保持时间
protocol TCP #使用的协议是TCP还是UDP
real_server 192.168.100.2 3306 {
weight 3 #权重
notify_down /usr/local/bin/mysql.sh #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 3306 #健康检查端口
}
}
}
2.1、配置从节点
vim /etc/keepalived/keepalived.conf
! Configuration File forkeepalived
global_defs {
router_id MYSQL_HA #当前节点名
}
vrrp_instance VI_1 {
state BACKUP #两台都设置BACKUP
interface eth0 #绑定虚拟IP的网络接口
virtual_router_id 51 #VRRP组名,两个节点的设置必须一样,以指明各个节点属于同一VRRP组
priority 100 #节点的优先级,另一台优先级改低一点
advert_int 1 #组播信息发送间隔,两个节点设置必须一样
nopreempt #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置
authentication { #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 123456
}
virtual_ipaddress { #指定虚拟IP,两个节点设置必须一样
192.168.100.100
}
}
virtual_server 192.168.100.100 3306 { #linux虚拟服务器(LVS)配置
delay_loop 2 #每个2秒检查一次real_server状态
lb_algo wrr #LVS调度算法,rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #LVS集群模式 ,NAT|DR|TUN
persistence_timeout 60 #会话保持时间
protocol TCP #使用的协议是TCP还是UDP
real_server 192.168.100.3 3306 {
weight 3 #权重
notify_down /usr/local/bin/mysql.sh #检测到服务down后执行的脚本
TCP_CHECK {
connect_timeout 10 #连接超时时间
nb_get_retry 3 #重连次数
delay_before_retry 3 #重连间隔时间
connect_port 3306 #健康检查端口
}
}
}
2.3、异常处理脚本
vim /usr/local/bin/mysql.sh
#!/bin/sh
killall keepalived
分配执行权限,如设置755
2.4、查看虚拟IP
输入命令ip addr查看即可,会看到一个虚拟IP。
3、mysql宕机切换测试
通常说的双机热备是指在两台机器都运行,但并不是两台机器都同时在提供服务,当提供服务的一台机器出现故障时,另外一台机器马上自动接管并提供服务,而且切换的时间非常短。
测试工具为Navicat,通过VIP连接,看是否连接成功;
当停止MASTER节点服务时,是否能正常切换过去,可通过ip addr命令来查看VIP在那台机器上。VIP就会自动切换到另一台上,实现主主自动切换,远程连接数据库的虚拟IP是可以连接的,实现应用切换的效率。
注:当机器未重启且宕库恢复的时候,要启动keepalived,否则VIP无法自动切换回来。