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

相关推荐
leo__5202 分钟前
IEC 104 协议 C 语言实现
c语言·数据库
摇滚侠3 分钟前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
若兰幽竹26 分钟前
【从零开始编写数据库系统:架构设计与实现】第5章:查询执行引擎与火山模型
数据库·架构·数据库内核·toydb
天空属于哈夫克31 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
东风破1371 小时前
DM8达梦数据库备份、恢复原理介绍
数据库·oracle·dm达梦数据库
鹏子训1 小时前
AI记忆新思路:用SQLite替代向量数据库,去EMBEDDINGS化,谷歌开源Google Always On Memory Agent
数据库·人工智能·sqlite·embedding
Frank_refuel2 小时前
终端环境下:Ubuntu 22.04.1 安装 MySQL 数据库
数据库·mysql·ubuntu
虹科网络安全3 小时前
艾体宝产品|深度解读 Redis 8.4 新增功能:原子化 Slot 迁移(下)
数据库·redis·bootstrap
有味道的男人4 小时前
对接亚马逊平台接口,商品全量信息一键抓取
数据库
Web极客码4 小时前
2026年Linux VPS安全加固清单:SSH、防火墙与审计就绪配置
运维·服务器·数据库