数据库集群系列(五)使用Keepalived实现MySQL数据库的故障转移与自动切换

艺帆风顺 发布于 2025-04-02 30 次阅读


一、基本概念

    Keepalived 是一个用于实现高可用性和负载均衡的开源软件。它主要通过 IP 虚拟服务器(Virtual Server,简称 VRRP)和健康检查来实现故障切换和负载均衡。 

   Keepalived的原理是基于TCP/IP参考模型的第三、第四层和第五层交换机制来检测每个服务节点的状态。当某个服务器节点出现异常或工作出现故障时,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除。这些工作全部是自动完成的,不需要人工干涉。需要人工完成的只是修复出现故障的服务节点。

Keepalived 的工作原理:

  1. VRRP 协议:

  • Keepalived 使用 VRRP 协议来实现高可用性。VRRP 允许多个服务器共享一个虚拟 IP 地址和一个虚拟 MAC 地址,其中一个服务器是主服务器,负责处理流量,其他服务器是备份服务器,处于热备状态。

  • 所有服务器通过 VRRP 协议定期发送心跳包,主服务器发送广播通知其他备份服务器自己仍然处于活动状态。如果主服务器发生故障或无法通信,备份服务器中的一个将会接管虚拟 IP 地址,确保服务的可用性。

  • 健康检查:

    • Keepalived 通过定期的健康检查来确保服务器的可用性。可以配置不同的检查方式,比如 TCP 检查、HTTP 检查、脚本检查等。

    • 如果服务器在检查中被标记为不可用,Keepalived 将触发故障转移,将虚拟 IP 地址从故障的服务器迁移到备份服务器。

  • 故障切换:

    • 当主服务器发生故障或不可用时,Keepalived 会自动将虚拟 IP 地址迁移到一个备份服务器。这确保了服务的持续可用性。

    • 一旦主服务器恢复,Keepalived 会自动将虚拟 IP 地址迁回主服务器,实现了故障的自动恢复。

    二、Master-1配置

    1、安装keepalived

    yum install keepalived -y

    2、配置keepalived


      vim /etc/keepalived/keepalived.conf# 配置通知的emailglobal_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.51.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr # 注释掉vrrp_strict,开启会导致其他机器无法访问虚拟IP # vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0}# 检查mysql脚本,定时执行vrrp_script check_run { script "/usr/check_run.sh" interval 3}# 设置虚拟ipvrrp_instance VI_1 { # 当前节点的状态MASTER、BACKUP state MASTER # 当前服务器使用的网卡名称,使用ifconfig查看 interface ens33 #VRRP组名,两个节点的设置必须一样 virtual_router_id 51 #主节点的优先级(1-254之间) priority 100 #组播信息发送间隔,两个节点设置必须一样 advert_int 1 #设置验证信息,两个节点必须一致 authentication { auth_type PASS auth_pass 1111 } #虚拟IP,对外提供MySQL服务的IP地址 virtual_ipaddress { 192.168.1.111 }}
      # master2# 配置通知的emailglobal_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.51.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr # 注释掉vrrp_strict,开启会导致其他机器无法访问虚拟IP # vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0}# 检查mysql脚本,定时执行vrrp_script check_run { script "/usr/check_run.sh" interval 3}# 设置虚拟ipvrrp_instance VI_1 { # 当前节点的状态MASTER、BACKUP state BACKUP # 当前服务器使用的网卡名称,使用ifconfig查看 interface ens33 #VRRP组名,两个节点的设置必须一样 virtual_router_id 51 #主节点的优先级(1-254之间) priority 100 #组播信息发送间隔,两个节点设置必须一样 advert_int 1 #设置验证信息,两个节点必须一致 authentication { auth_type PASS auth_pass 1111 } #虚拟IP,对外提供MySQL服务的IP地址 virtual_ipaddress { 192.168.1.111 }}

      3、配置check脚本

          vim  /usr/check_run.sh

        #!/bin/bash./root/.bashrccount=1while truedo mysql -uroot -proot -S /tmp/mysql.sock -e "select now();" > /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 let count++ continue fi fidone

            chmod 755 /usr/check_run.sh

        4、启动keepalived

          systemctl start keepalived.service #启动systemctl stop keepalived.service #停止systemctl status keepalived.service #状态systemctl restart keepalived.service #重启systemctl enable keepalived.service #设置开机重启

          5、查看虚拟IP

          三、Master-2配置

              同Master-1的配置,不再赘述。

          四、模拟故障切换测试

              1、宕掉master-1,通过虚拟IP依然可以连接

                  修改数据测试

            2、开启master-1,检查数据,发现数据已同步。

          结论:通过keepalived实现MySQL的故障切换,可以正常运行。

            本文教程参考以下链接实现,感谢原作者:不吃小龙虾哦的创作。https://blog.csdn.net/shuo_house/article/details/127727769