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

相关推荐
知识分享小能手2 小时前
MongoDB入门学习教程,从入门到精通,MongoDB的了解应用程序的动态(18)
数据库·学习·mongodb
oradh2 小时前
Oracle数据类型概述(一)
数据库·oracle·oracle基础·oracle入门基础·oracle数据类型
小兜全糖(xdqt)2 小时前
Ubuntu22.04安装最新版本redis
数据库·redis·缓存
运维老郭2 小时前
MySQL 主从延迟根因诊断法:从现象到本质的全链路排查指南
运维·mysql
风曦Kisaki3 小时前
Linux服务Day03:自定义YUM仓库、网络YUM仓库(HTTP/FTP)、MariaDB数据库基础操作
linux·网络·数据库
weixin_704266053 小时前
redis 的集群
java·数据库·redis
正在走向自律3 小时前
企业级数据库行标识技术深度解析:OID与ROWID的双轨架构实战
数据库·oracle·oid·rowid
PD我是你的真爱粉3 小时前
向量数据库原理与检索算法入门:ANN、HNSW、LSH、PQ 与相似度计算
数据库·人工智能·算法
不爱吃大饼3 小时前
redis主从节点
数据库·redis·bootstrap