数据库安装和升级和双主配置的操作可以参考我的另一篇文章:
数据库安装和升级和双主配置
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
经过实测,停止后切换的时候可能会连接失败一次,然后就恢复正常。