系列导读:本篇将深入讲解 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