跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

MySQL 高可用集群搭建实战:双主双活 + Keepalived

MySQL 双主双活架构结合 Keepalived 实现高可用。通过配置两台 MySQL 互为 Master-Slave 实现数据双向同步,利用 Keepalived 管理虚拟 IP(VIP)。当主节点故障时,VIP 自动漂移至备用节点,应用无需修改配置即可继续访问,有效避免单点故障导致的业务中断。教程涵盖环境准备、MySQL 主从配置、Keepalived 编译安装与健康检查脚本编写,以及故障切换验证全流程。

安卓系统发布于 2025/2/4更新于 2026/6/1224 浏览
MySQL 高可用集群搭建实战:双主双活 + Keepalived

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;
show master status;

记录输出的 File 和 Position 值。

2. 在 mysql-2 上配置指向 mysql-1
change master to 
    master_host='192.168.1.128',
    master_port=3306,
    master_user='slavebak',
    master_password='slavebak',
    master_log_file='mysql-bin.000002',
    master_log_pos=1287;
start slave;

检查状态确保 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes。

3. 在 mysql-2 上创建同步账号并查看状态

重复步骤 1,记录新的 File 和 Position 值。

4. 在 mysql-1 上配置指向 mysql-2
change master to 
    master_host='192.168.1.129',
    master_port=3306,
    master_user='slavebak',
    master_password='slavebak',
    master_log_file='mysql-bin.000002',
    master_log_pos=848;
start slave;

同样检查状态确保同步正常。

至此,双主双从的数据同步链路已打通。

五、数据同步测试

  1. 写入测试:在 mysql-1 创建 test_db 库及 t_test 表,插入一条数据(id=1, name='zhangsan')。
  2. 验证同步:登录 mysql-2,确认 test_db 库和表已存在,且数据已同步。随后在 mysql-2 插入第二条数据(id=2, name='lisi')。
  3. 回查:再次登录 mysql-1,查询 t_test 表,应能看到两条数据。这证明双向同步工作正常。

六、安装与配置 Keepalived

1. 编译安装

在两台服务器上执行以下操作:

yum -y install gcc openssl-devel popt-devel psmisc
wget https://www.keepalived.org/software/keepalived-2.2.7.tar.gz
tar -zxvf keepalived-2.2.7.tar.gz
cd keepalived-2.2.7
./configure --prefix=/opt/keepalived-2.2.7
make && make install
2. 文件部署

将二进制文件和配置文件复制到系统目录:

mkdir /etc/keepalived
cp etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf
cp keepalived/etc/init.d/keepalived /etc/init.d/
cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp sbin/keepalived /usr/sbin/
3. 编写健康检查脚本

创建 /etc/keepalived/shutdown.sh,用于检测 MySQL 异常时停止 Keepalived,触发 VIP 漂移:

#!/bin/bash
killall keepalived

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

4. 配置 Keepalived

获取本机网卡名称(例如 ens33),然后编辑 /etc/keepalived/keepalived.conf。

mysql-1 配置示例:

global_defs {
   router_id LVS_MASTER
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       192.168.1.130
    }
}

virtual_server 192.168.1.130 3306 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    protocol TCP
    real_server 192.168.1.128 3306 {
        notify_down /etc/keepalived/shutdown.sh
        TCP_CHECK {
            connect_ip 192.168.1.128
            connect_port 3306
            connect_timeout 3
        }
    }
}

mysql-2 配置示例: 主要区别在于 state BACKUP,priority 90,以及 real_server IP 指向 192.168.1.129。

5. 启动服务
systemctl enable keepalived
systemctl start keepalived
systemctl status keepalived

七、高可用整体测试

  1. 初始连接:使用客户端连接 VIP 192.168.1.130,确认能正常访问数据库。
  2. 模拟故障:手动停止 mysql-1 上的 MySQL 服务 (systemctl stop mysqld)。
  3. 观察漂移:Keepalived 检测到端口不可达后,会执行 shutdown.sh 脚本,自身退出,VIP 自动漂移到 mysql-2。
  4. 验证切换:再次连接 VIP,此时流量由 mysql-2 承载。在 VIP 上插入新数据,并在 mysql-2 本地验证数据存在,同时检查 mysql-1 重启后数据是否同步回来。

若 VIP 未漂移,请检查同网段内 virtual_router_id 是否冲突,可使用 tcpdump 抓包排查 VRRP 协议报文。

通过以上步骤,我们完成了 MySQL 双主双活架构与 Keepalived 高可用方案的完整部署与验证。

目录

  1. MySQL 高可用集群 - 双主双活 - mysql+keepalived
  2. 一、背景与方案
  3. 二、环境准备
  4. 三、安装 MySQL
  5. 1. 基础安装
  6. 2. 配置文件调整
  7. 主从同步配置
  8. 3. 启动服务
  9. 四、配置双主双从同步
  10. 1. 在 mysql-1 上创建同步账号并查看状态
  11. 2. 在 mysql-2 上配置指向 mysql-1
  12. 3. 在 mysql-2 上创建同步账号并查看状态
  13. 4. 在 mysql-1 上配置指向 mysql-2
  14. 五、数据同步测试
  15. 六、安装与配置 Keepalived
  16. 1. 编译安装
  17. 2. 文件部署
  18. 3. 编写健康检查脚本
  19. 4. 配置 Keepalived
  20. 5. 启动服务
  21. 七、高可用整体测试
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • VS Code 配置 GitHub Copilot 使用第三方模型 API
  • Python IGRF 库本地环境配置与使用指南
  • iTerm2 Snazzy 主题安装与自定义配色指南
  • 前端高频面试题:TypeScript 篇
  • CSS 基础语法与选择器实战指南
  • Spring Boot 实战:从零设计短链系统(附代码与数据库设计)
  • AI 写作辅助平台评测:炼字工坊与蛙蛙写作深度解析
  • Stack-Chan 机器人快速入门指南
  • 大模型什么时候应该进行微调
  • VS Code 中 GitHub Copilot 使用与代理功能指南
  • C++11 列表初始化、新式声明、范围 for 与 STL 变化
  • ComfyUI 整合包部署实战:模型管理与工作流配置
  • Instagram 自动化工具常见问题解决:从依赖安装到运行错误排查
  • SeaweedFS 轻量分布式存储:中小规模 LoRA 训练部署方案
  • C++ string 类模拟实现
  • OpenClaw 开源 AI 助手中文发行版部署指南:一键脚本/Docker/npm 安装
  • 大模型 LLM 合成训练样本的数据分布问题
  • 使用 CopilotKit 快速为前端集成 AI 助手实战指南
  • STM32 温度采样定时器触发配置示例
  • 使用 LangSmith 加速 LangChain 开发与调试

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online