数据库与缓存--MySQL 高可用架构设计

系列导读:本篇将深入讲解 MySQL 高可用架构的设计方案与最佳实践。


文章目录

    • 一、高可用概述
      • [1.1 高可用指标](#1.1 高可用指标)
      • [1.2 高可用架构对比](#1.2 高可用架构对比)
    • 二、主从复制
      • [2.1 复制原理](#2.1 复制原理)
      • [2.2 配置步骤](#2.2 配置步骤)
    • 三、读写分离
      • [3.1 架构图](#3.1 架构图)
      • [3.2 ShardingSphere 配置](#3.2 ShardingSphere 配置)
    • [四、MHA 架构](#四、MHA 架构)
      • [4.1 MHA 组件](#4.1 MHA 组件)
      • [4.2 配置示例](#4.2 配置示例)
    • [五、MGR 架构](#五、MGR 架构)
      • [5.1 MGR 特点](#5.1 MGR 特点)
      • [5.2 配置示例](#5.2 配置示例)
    • 总结

一、高可用概述

1.1 高可用指标

指标 可用性 年停机时间
2个9 99% 87.6小时
3个9 99.9% 8.76小时
4个9 99.99% 52.6分钟
5个9 99.999% 5.26分钟

1.2 高可用架构对比

方案 优点 缺点
主从复制 简单、成本低 手动切换
MHA 自动切换 需要额外组件
MGR 原生支持、自动选主 性能有损耗
MySQL Cluster 高可用、高性能 架构复杂

二、主从复制

2.1 复制原理

复制代码
┌─────────┐    Binlog    ┌─────────┐   Relay Log   ┌─────────┐
│  Master │ ──────────►  │   I/O   │ ────────────► │  Slave  │
│         │              │  Thread │               │  Thread │
└─────────┘              └─────────┘               └─────────┘

2.2 配置步骤

ini 复制代码
# Master 配置 (my.cnf)
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
gtid-mode = ON
enforce-gtid-consistency = ON

# Slave 配置 (my.cnf)
[mysqld]
server-id = 2
relay-log = relay-bin
read-only = ON
sql 复制代码
-- Master 创建复制用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

-- Slave 配置复制
CHANGE MASTER TO
    MASTER_HOST='192.168.1.100',
    MASTER_USER='repl',
    MASTER_PASSWORD='password',
    MASTER_AUTO_POSITION=1;

START SLAVE;

三、读写分离

3.1 架构图

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    应用层                                   │
└─────────────────────────────────────────────────────────────┘
                              │
                              ▼
┌─────────────────────────────────────────────────────────────┐
│                  中间件层 (ShardingSphere)                  │
└─────────────────────────────────────────────────────────────┘
                    │                   │
                    ▼                   ▼
              ┌─────────┐         ┌─────────┐
              │ Master  │         │  Slave  │
              │  (写)   │         │  (读)   │
              └─────────┘         └─────────┘

3.2 ShardingSphere 配置

yaml 复制代码
# application.yml
spring:
  shardingsphere:
    datasource:
      names: master,slave
      master:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://192.168.1.100:3306/mydb
        username: root
        password: root
      slave:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://192.168.1.101:3306/mydb
        username: root
        password: root
    
    rules:
      readwrite-splitting:
        data-sources:
          myds:
            write-data-source-name: master
            read-data-source-names: slave
            load-balancer-name: round_robin
        load-balancers:
          round_robin:
            type: ROUND_ROBIN

四、MHA 架构

4.1 MHA 组件

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    MHA Manager                              │
│                  (监控 + 故障切换)                           │
└─────────────────────────────────────────────────────────────┘
         │              │              │
         ▼              ▼              ▼
    ┌─────────┐   ┌─────────┐   ┌─────────┐
    │ Master  │   │ Slave1  │   │ Slave2  │
    └─────────┘   └─────────┘   └─────────┘

4.2 配置示例

ini 复制代码
# /etc/masterha/app1.cnf
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
user=mha
password=mha
repl_user=repl
repl_password=repl
ssh_user=root

[server1]
hostname=192.168.1.100
candidate_master=1

[server2]
hostname=192.168.1.101
candidate_master=1

[server3]
hostname=192.168.1.102
no_master=1

五、MGR 架构

5.1 MGR 特点

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    MGR 特点                                 │
├─────────────────────────────────────────────────────────────┤
│  ✅ 原生支持:MySQL 5.7.17+ 内置                            │
│  ✅ 自动选主:主节点故障自动选举新主                          │
│  ✅ 数据一致:基于 Paxos 协议                                │
│  ✅ 读写分离:支持单主和多主模式                              │
└─────────────────────────────────────────────────────────────┘

5.2 配置示例

ini 复制代码
# my.cnf
[mysqld]
server-id = 1
gtid_mode = ON
enforce_gtid_consistency = ON
binlog_format = ROW
log_bin = mysql-bin
log_slave_updates = ON

# MGR 配置
plugin_load_add = 'group_replication.so'
group_replication_group_name = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_start_on_boot = ON
group_replication_local_address = "192.168.1.100:33061"
group_replication_group_seeds = "192.168.1.100:33061,192.168.1.101:33061"
group_replication_single_primary_mode = ON
sql 复制代码
-- 启动 MGR
CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION;

总结

高可用概述 :可用性指标、架构对比

主从复制 :原理、配置

读写分离 :中间件配置

MHA 架构 :自动故障切换

MGR 架构:MySQL 原生高可用

下篇预告分库分表实战指南


作者 :刘~浪地球
系列 :数据库与缓存(一)
更新时间:2026-04-10

相关推荐
Bioinfo Guy1 小时前
高分Panel复现系列|转录因子网络太乱?用模块框把重点圈出来
数据库·生物信息学·生信可视化
ltl3 小时前
Disaggregated DB 合集:Socrates、PolarDB、Taurus 的共同模式
数据库
Blossom i5 小时前
大数据预处理与采集实验一:使用Python操作MySQL数据库
数据库·mysql
InfinitePlus5 小时前
Docker MySQL搭建一主一从
mysql·docker
雾时之林6 小时前
Linux--软件管理、源码包安装
linux·服务器·数据库
thesky1234566 小时前
智能体面试准备(二十六):Agent 成本工程——模型路由、缓存、预算控制与大小模型分工
缓存·llmops·智能体·模型路由·成本工程·预算控制·小模型分工
老纪的技术唠嗑局7 小时前
超级干货分享:中小企业使用 OceanBase 实践经验汇总
数据库
坐吃山猪8 小时前
Docker07-MySQL
mysql·docker·容器
CLOUD ACE8 小时前
谷歌云代理|零售商Target 如何利用 Spanner Graph 提升零售发现体验并将数据库维护成本降低 50%
数据库·零售
AI大模型-小雄8 小时前
Codex写分页接口为什么越翻越慢?用Cursor Pagination解决重复与漏数据
大数据·数据库·elasticsearch·搜索引擎·chatgpt·后端开发·codex