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

2024年 7月 9日 40.4k 0

一、基本概念

    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
        # 配置通知的email
        global_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
        }
        # 设置虚拟ip
        vrrp_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
        # 配置通知的email
        global_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
        }
        # 设置虚拟ip
        vrrp_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/.bashrc
          count=1
          while true
          do
          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
          fi
          done

              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

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

            三、Master-2配置

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

            四、模拟故障切换测试

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

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

                    修改数据测试

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

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

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

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

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

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

              相关文章

              Oracle如何使用授予和撤销权限的语法和示例
              Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
              下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
              社区版oceanbase安装
              Oracle 导出CSV工具-sqluldr2
              ETL数据集成丨快速将MySQL数据迁移至Doris数据库

              发布评论