目录
前言
一、架构原理
Keepalived 作用
MySQL 主从复制
二、环境准备
服务器要求:
安装基础软件
三、配置 MySQL 主从复制
四、配置 Keepalived
主节点配置(/etc/keepalived/keepalived.conf)
从节点配置
五、启动与验证
六、注意事项
前言
使用 Keepalived 实现 MySQL 高可用(HA)的核心是通过 虚拟 IP(VIP)漂移 在主节点故障时自动切换流量到备用节点,结合 MySQL 主从复制保证数据一致性。以下是详细步骤和配置说明:
一、架构原理
-
Keepalived 作用
- 基于 VRRP 协议管理 VIP,主节点正常时持有 VIP。
- 通过健康检查脚本监控 MySQL 服务状态,若主节点故障,VIP 漂移到备用节点。
- 客户端通过 VIP 访问 MySQL,无需感知后端节点切换
-
MySQL 主从复制
- 主节点(Master)处理写请求,从节点(Slave)同步数据。
- 故障切换后,原从节点提升为新主节点(需配合复制配置或工具)
二、环境准备
-
服务器要求:
- 两台 Linux 服务器(如 CentOS 7+),分别部署 MySQL 主从复制。
- 示例 IP:
- 主节点:192.168.71.177
- 从节点:192.168.71.169
- 虚拟 IP(VIP):192.168.71.100
安装基础软件
# 在两台服务器上安装 MySQL 和 Keepalived
yum install -y mysql-server keepalived
systemctl enable mysqld keepalived
三、配置 MySQL 主从复制
创建了一个测试用的数据库
主节点配置(my.cnf):
[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = your_database # 需同步的数据库
从节点配置(my.cnf)
[mysqld]
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin
启动复制
-- 在主节点创建复制用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';-- 在从节点配置主库信息
CHANGE MASTER TO
MASTER_HOST='192.168.71.177',
MASTER_USER='repl',
MASTER_PASSWORD='password';
START SLAVE;
验证同步:SHOW SLAVE STATUS\G
检查 Slave_IO_Running: Yes
四、配置 Keepalived
主节点配置(/etc/keepalived/keepalived.conf
)
global_defs {router_id mysql_master # 唯一标识,建议用主机名
}vrrp_script chk_mysql {script "/usr/bin/mysqladmin ping" # MySQL 健康检查命令interval 2 # 每 2 秒检查一次weight 2 # 检查失败时降低优先级
}vrrp_instance VI_1 {state MASTERinterface eth0 # 绑定 VIP 的网卡virtual_router_id 51 # 集群 ID,主从必须一致priority 100 # 主节点优先级更高(范围 1-254)advert_int 1 # 心跳间隔authentication {auth_type PASSauth_pass 1111 # 主从密码需相同}virtual_ipaddress {192.168.71.100/24 dev eth0 # VIP 配置}track_script {chk_mysql # 引用健康检查脚本}notify_master "/path/to/promote_script.sh" # 切换为主时执行的脚本(可选)
}
从节点配置
五、启动与验证
启动服务:
主
从
故障转移测试:
模拟主节点故障
观察 VIP 漂移:
在从节点执行 ip addr
,应看到 VIP 绑定到从节点网卡。
主:
从:
客户端连接测试:
恢复主节点:
- 重启主节点 MySQL 后,若需切回 VIP,可手动重启主节点 Keepalived(或通过优先级调整)
此时从节点无法登录
六、注意事项
- 数据一致性风险:
- 主从复制延迟可能导致数据丢失。建议启用半同步复制(Semi-Sync Replication)或 GTID
- 脑裂问题:
- 确保
virtual_router_id
唯一,避免多个集群冲突
- 确保
- 自动切换限制:
- Keepalived 仅负责 VIP 漂移,不会自动切换 MySQL 主从角色。需配合脚本或工具(如 MHA、Orchestrator)实现完整故障转移
- 监控与告警:
- 配置 Keepalived 邮件通知(
global_defs
区块),实时感知切换事件
- 配置 Keepalived 邮件通知(