当数据库发生宕机的情况,如果配置了数据库主从同步模式或主主同步模式,则可以从从库中获取数据。
当数据库发生宕机的情况,要求应用系统实现高可用,应用系统不会受到影响,需要对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无法自动切换回来。



















