MySQL 高可用集群 - 双主双活 - mysql+keepalived
本文基于 CentOS 7 系统环境进行部署测试,旨在通过 MySQL 原生主从复制功能结合 Keepalived 实现双主双活的高可用架构。
一、背景与方案
痛点场景: 在应用开发中,数据库连接信息往往硬编码在配置里。一旦主库(如 mysql-1)发生故障,运维人员需要手动停止服务、修改连接指向备用库(mysql-2)、再重启服务。这个过程不仅繁琐,还会导致业务中断,故障恢复时间较长,严重时可能引发灾难性后果。
解决方案: 采用 MySQL 双主互备模式配合 Keepalived 实现 VIP 漂移。两台 MySQL 服务器互为 Master 和 Slave,数据双向同步。Keepalived 通过虚拟一个 VIP(例如 mysql-3),代理后端数据库服务。当主节点宕机时,VIP 会自动漂移到备用节点,无需人工干预修改应用配置,实现业务无感知的故障切换。
二、环境准备
需要准备两台 CentOS 7 Linux 服务器:
- 节点 1 (mysql-1):192.168.1.128
- 节点 2 (mysql-2):192.168.1.129
软件版本建议:
- MySQL:5.7.36 (tar.gz)
- Keepalived:2.2.7 (tar.gz)
三、安装 MySQL
1. 基础安装
在两台服务器上分别按照标准流程安装 MySQL 5.7。
2. 配置文件调整
修改 mysql-1 (192.168.1.128) 的 /etc/my.cnf:
[client]
port=3306
socket=/opt/mysql/5.7.36/log/mysql.sock
default-character-set=utf8
[mysqld]
port=3306
basedir=/opt/mysql/5.7.36/
datadir=/opt/mysql/5.7.36/data
socket=/opt/mysql/5.7.36/log/mysql.sock
log-error=/opt/mysql/5.7.36/log/mysql.log
pid-file=/opt/mysql/5.7.36/log/mysql.pid
# 主从同步配置
server-id=1
log-bin=mysql-bin
binlog_do_db=test_db
binlog_format=row
character-set-server=utf8
!includedir /etc/my.cnf.d
修改 mysql-2 (192.168.1.129) 的 /etc/my.cnf,主要区别在于 server-id 设为 2:
...
server-id=2
...
3. 启动服务
重启两台服务器的 MySQL 服务:
systemctl stop mysqld
systemctl start mysqld
四、配置双主双从同步
1. 在 mysql-1 上创建同步账号并查看状态
grant replication slave on *.* to 'slavebak'@'%' identified by 'slavebak';
flush privileges;
master status;


