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

相关推荐
Miss roro3 小时前
企业合同管理系统选型的核心维度:功能完整性、协作效率与安全合规
java·数据库·安全·法律科技
Irene19913 小时前
数据库锁机制:表锁、行锁(Oracle 默认)、共享锁、排他锁、乐观锁、悲观锁、死锁、Hive 中的锁
数据库
东风破1373 小时前
DM达梦数据库安全、审计功能学习记录
数据库·学习·oracle·dm达梦数据库
JAVA学习通3 小时前
《大营销平台系统设计实现》 - 营销服务 第10节:不超卖库存规则实现
java·数据库·oracle·责任链模式·codex
ZC跨境爬虫3 小时前
跟着 MDN 学CSS day_7:(层叠优先级与继承)
前端·css·数据库·ui·html
YOU OU3 小时前
MyBatis 操作数据库(入门)
数据库·mybatis
电商API_180079052473 小时前
反向海淘是什么?现状如何?未来趋势如何?
数据库·人工智能·笔记·性能优化·数据挖掘·网络爬虫
MRSM_013 小时前
Redis 缓存、队列、排行榜的核心用法
数据库·redis·缓存
唐青枫3 小时前
别让 NULL 拖垮结果:MySQL COALESCE 空值兜底实战详解
sql·mysql
Trouvaille ~3 小时前
【Redis篇】Redis 安装与启动:快速搭建一个 Redis 环境
数据库·redis·后端·ubuntu·缓存·环境搭建·安装教程