高可用架构 学习笔记(第 2 部分)
2.1 本地高可用
2.1.1 故障类型
生产环境内部故障:
code
本地高可用故障类型:
硬件层面
├── 服务器故障(主板、CPU、内存)
├── 硬盘故障(坏道、损坏)
├── 网络适配器故障
└── 电源故障
网络层面
├── 交换机故障
├── 路由器故障
└── 网线断裂
存储层面
├── 存储阵列故障
├── SAN 故障
└── NAS 故障2.1.2 故障特点
| 特点 | 说明 | 示例 |
|---|---|---|
| 恢复快 | 可快速恢复 | 磁盘RAID阵列,单盘故障不影响系统 |
| 实施简单 | 单点故障易更换 | 更换故障硬件 |
| 影响范围小 | 仅局部受影响 | 单个服务节点故障 |
2.1.3 典型技术方案
1. 磁盘阵列(RAID)
javascript
// RAID 级别对比
const raidLevels = {
// RAID 0: 条带化(无冗余)
raid0: {
name: 'RAID 0',
minDisks: 2,
capacity: 'n × 单盘容量',
reliability: '低(任一盘故障,数据全丢)',
performance: '读/写性能最高',
useCase: '临时数据、缓存'
},
// RAID 1: 镜像
raid1: {
name: 'RAID 1',
minDisks: 2,
capacity: '单盘容量',
reliability: '高(允许1盘故障)',
performance: '读性能提升,写性能略降',
useCase: '操作系统盘、重要数据'
},
// RAID 5: 分布式奇偶校验
raid5: {
name: 'RAID 5',
minDisks: 3,
capacity: '(n-1) × 单盘容量',
reliability: '较高(允许1盘故障)',
performance: '读写性能均衡',
useCase: '数据库、文件服务器'
},
// RAID 10: RAID 1 + RAID 0
raid10: {
name: 'RAID 10',
minDisks: 4,
capacity: 'n/2 × 单盘容量',
reliability: '高(允许每组1盘故障)',
performance: '读/写性能高',
useCase: '数据库、高I/O应用'
}
}RAID 10 实现示例:
code
RAID 10 架构:
数据写入
↓
┌───────┴───────┐
│ RAID 0 条带化 │
└───────┬───────┘
│
┌───────┴───────┐
│ │
┌───┴───┐ ┌───┴───┐
│RAID 1 │ │RAID 1 │
│ 镜像1 │ │ 镜像2 │
└───┬───┘ └───┬───┘
│ │
┌───┴───┐ ┌───┴───┐
│磁盘1 │ │磁盘3 │
│磁盘2 │ │磁盘4 │
└───────┘ └───────┘
特点:
- 磁盘1和磁盘2互为镜像
- 磁盘3和磁盘4互为镜像
- 允许每组镜像中1块磁盘故障
- 读性能提升,写性能略降2. 网络冗余
code
网络冗余架构:
互联网
↓
┌───────┴───────┐
│ 主路由器 A │
└───────┬───────┘
│ HSRP/VRRP
┌───────┴───────┐
│ 备路由器 B │
└───────┬───────┘
↓
┌───────┴───────┐
│ 核心交换机 │
└───────┬───────┘
│
┌───────┴───────┐
│ │
┌───────┴───────┐ ┌───┴───────┐
│ 服务器集群 │ │ 服务器集群 │
└───────────────┘ └───────────┘
关键技术:
- HSRP (Hot Standby Router Protocol)
- VRRP (Virtual Router Redundancy Protocol)
- 链路聚合 (LACP)3. 电源冗余
code
电源冗余方案:
主电源 ──────┐
├──→ 服务器(双电源模块)
备用电源 ─────┘
UPS(不间断电源)
├── 稳压
├── 停电后持续供电
└── 给发电机启动预留时间
发电机
└── 长时间停电时供电