数据库与缓存--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

相关推荐
captain3766 小时前
MyBatis(入门5)其他查询操作
java·数据库·spring boot·mybatis
小此方7 小时前
Re:Mysql数据库基础篇(八):详细讲解复合查询、多表查询、自连接、多行、多列子查询与合并查询
数据库·mysql
xszivvvv7 小时前
Mariadb数据库frm文件异常,如何恢复数据
数据库·mariadb
smile_life_8 小时前
MySQL 设置 防止账户被暴力破解
数据库·mysql
ShineWinsu8 小时前
对于Qt:QRadioButton常见属性以及QButtonGroup的解析
数据库·c++·qt·microsoft·gui·qradiobutton·qbuttongroup
测试盐9 小时前
oracle数据库卡顿排查
数据库·oracle
滕州市燕猫虎计算机科技工作室个体工商户9 小时前
MySQL、MVCC、多版本并发控制
数据库·mysql·mvcc·数据库事务
明航咨询-陈老师9 小时前
ITSS运行维护服务能力成熟度认证技术纵深:标准模型、等级路径、2026审核趋势与CS/CMMI对比
服务器·数据库·cmmi
缓慢更新10 小时前
AI 辅助生成单测:从接口定义到用例的流水线
java·服务器·前端·网络·数据库·人工智能
AI小百科10 小时前
向量数据库:AI 的「记忆仓库」是怎么工作的
数据库·人工智能·oracle