mysql双主模式下基于keepalived的虚拟ip实现高可用模式搭建

发布于:2025-06-01 ⋅ 阅读:(25) ⋅ 点赞:(0)

数据库安装和升级和双主配置的操作可以参考我的另一篇文章:
数据库安装和升级和双主配置

1、在两台服务器都下载和安装keepalived

下载:
yumdownloader --resolve keepalived
下载后得到:

[root@localhost keepalivedRpm]# ll
总用量 1896
-rw-r--r--. 1 root root  39568 8月  23 2019 ipset-7.1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  65112 8月  23 2019 ipset-libs-7.1-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 339840 10月 15 2020 keepalived-1.3.5-19.el7.x86_64.rpm
-rw-r--r--. 1 root root 723960 1月  26 2024 net-snmp-agent-libs-5.7.2-49.el7_9.4.x86_64.rpm
-rw-r--r--. 1 root root 770000 1月  26 2024 net-snmp-libs-5.7.2-49.el7_9.4.x86_64.rpm

安装:
rpm -ivh keepalived*
遇到报错后,提示哪个就先安装哪个。

安装完成后,查看版本:
rpm -qa | grep keepalived # 应输出 keepalived 版本号

2、配置keepalived

第一台:
vi /etc/keepalived/keepalived.conf

global_defs {
   router_id MYSQL_MASTER1  # 唯一标识符
}

vrrp_script chk_mysql {
   script "/etc/keepalived/check_mysql.sh"  # 检查 MySQL 进程是否存在
   user root   # 确保使用 root 用户或存在的用户
#   weight -20  # 失败后降低的优先级
    interval 2                                # 每3秒检测一次
    timeout 2                                 # 超时时间
    fall 1                                    # 失败x次则切换
    rise 1                                    # 成功x次认为恢复
}

vrrp_instance VI_1 {
   state MASTER          # 从库设为 BACKUP
   interface enp0s3        # 替换为你的网卡名称(如 ens192)
   virtual_router_id 51   # 与集群内其他节点一致
   priority 100          # 主库优先级高于从库(如 100,从库设为 90)
   advert_int 1         # 心跳间隔(秒)

   authentication {
       auth_type PASS
       auth_pass 1111    # 集群内节点密码一致
   }

   virtual_ipaddress {
       192.168.0.233/24  # 你的 VIP 地址
   }

   track_script {
       chk_mysql
   }
}

第二台:

global_defs {
   router_id MYSQL_MASTER2  # 唯一标识符
}

vrrp_script chk_mysql {
   script "/etc/keepalived/check_mysql.sh"  # 检查 MySQL 进程是否存在
   user root   # 确保使用 root 用户或存在的用户
#   weight -20  # 失败后降低的优先级
    interval 2                                # 每3秒检测一次
    timeout 2                                 # 超时时间
    fall 1                                    # 失败3次则切换
    rise 1                                    # 成功2次认为恢复
}

vrrp_instance VI_1 {
   state BACKUP          # 初始状态为BACKUP
   interface enp0s3        # 替换为你的网卡名称(如 ens192)
   virtual_router_id 51  # 与集群内其他节点一致
   priority 90          # 主库优先级高于从库(如 100,从库设为 90)
   advert_int 1        # VRRP通告间隔

   authentication {
       auth_type PASS
       auth_pass 1111    # 集群内节点密码一致
   }

   virtual_ipaddress {
       192.168.0.233/24  # 你的 VIP 地址
   }

   track_script {
       chk_mysql
   }
}

chk_mysql脚本如下:
vi /etc/keepalived/check_mysql.sh

#!/bin/bash
# 检查MySQL服务是否运行
if ! pgrep -x "mysqld" > /dev/null; then
    echo 1
    exit 1
fi
echo 0
exit 0

赋予执行权限:
chmod +x /etc/keepalived/check_mysql.sh

3、启动keepalived

两台服务器都启动:

systemctl start keepalived
systemctl enable keepalived

查看 VIP 是否生效:
ip addr show

4、测试vip的自动切换

连接虚拟ip,然后停止一台mysql
systemctl stop mysqld
经过实测,停止后切换的时候可能会连接失败一次,然后就恢复正常。


网站公告

今日签到

点亮在社区的每一天
去签到