HCI 架构与原理
分布式存储原理
HCI 的核心是分布式存储,H3C HCI 基于 Ceph 构建:
数据分布机制(CRUSH)
CRUSH(Controlled Replication Under Scalable Hashing)算法:
输入:对象名称(Object ID)
输出:存储该对象的 OSD 列表
计算过程:
1. 对象名 → Hash → PG(Placement Group)编号
2. PG 编号 + CRUSH Map → OSD 列表(3 个)
3. 数据写入这 3 个 OSD
CRUSH Map 示例(3 节点 HCI):
机架1
└── 节点1(OSD 0, 1, 2, 3, 4, 5)
机架2
└── 节点2(OSD 6, 7, 8, 9, 10, 11)
机架3
└── 节点3(OSD 12, 13, 14, 15, 16, 17)
副本分布规则:
3 副本分布在 3 个不同节点
确保任意一个节点故障,数据不丢失写入流程
客户端写入数据:
1. 客户端计算 PG → 找到主 OSD(Primary OSD)
2. 客户端将数据发送给主 OSD
3. 主 OSD 并行写入本地 + 转发给副本 OSD
4. 所有副本写入完成后,主 OSD 返回成功
5. 客户端收到确认
写入延迟 = max(主OSD写入延迟, 副本OSD写入延迟) + 网络延迟读取流程
客户端读取数据:
1. 客户端计算 PG → 找到主 OSD
2. 客户端从主 OSD 读取数据(默认)
3. 主 OSD 返回数据
优化:可配置从最近的 OSD 读取(降低延迟)存储性能分层
HCI 通常采用 NVMe SSD + HDD 混合存储,通过分层提升性能:
存储分层架构:
热数据(频繁访问)→ NVMe SSD 层(高 IOPS,低延迟)
冷数据(不常访问)→ HDD 层(大容量,低成本)
自动分层策略:
数据访问频率 > 阈值 → 提升到 SSD 层
数据访问频率 < 阈值,持续 N 天 → 降级到 HDD 层
Ceph 分层配置:
# 创建 SSD 缓存池
ceph osd pool create ssd-cache 64
ceph osd pool set ssd-cache size 2 # SSD 层 2 副本即可
# 设置缓存层
ceph osd tier add hdd-pool ssd-cache
ceph osd tier cache-mode ssd-cache writeback
ceph osd tier set-overlay hdd-pool ssd-cache
# 配置缓存参数
ceph osd pool set ssd-cache hit_set_type bloom
ceph osd pool set ssd-cache hit_set_count 12
ceph osd pool set ssd-cache hit_set_period 14400 # 4 小时
ceph osd pool set ssd-cache target_max_bytes 1099511627776 # 1TB网络架构
网络分离
HCI 建议将业务网络和存储网络分离:
网络规划:
业务网络(VM 流量):
├── 25GbE × 2(Bond,主备或 LACP)
└── 连接到业务交换机
存储网络(Ceph 复制流量):
├── 25GbE × 2(Bond)
└── 连接到存储交换机(独立)
管理网络(HDM/OS 管理):
└── 1GbE × 1
原因:
Ceph 数据复制会产生大量网络流量
与业务流量混用会相互影响
分离后各自独立,互不干扰网络带宽估算
存储网络带宽需求:
写入带宽 = 业务写入带宽 × 副本数
示例:
业务写入:5 GB/s
3 副本:5 × 3 = 15 GB/s 存储网络带宽
每节点存储网络:15 / 3 = 5 GB/s
需要:25GbE × 2(50Gbps = 6.25 GB/s)✓
重建带宽(节点故障时):
1 个节点故障,需要重建该节点的所有数据
重建速度取决于存储网络带宽
100TB 数据 / 5 GB/s = 约 5.5 小时重建完成故障处理
单 OSD 故障
OSD 故障处理流程:
1. Ceph 检测到 OSD 故障(心跳超时,默认 20 秒)
2. 标记 OSD 为 down
3. 等待 300 秒(mon_osd_down_out_interval)
4. 如果 OSD 仍未恢复,标记为 out
5. 开始数据重建(Backfill)
- 将故障 OSD 上的数据副本重建到其他 OSD
- 重建期间集群状态:HEALTH_WARN(degraded)
6. 重建完成,集群恢复 HEALTH_OK
监控命令:
watch -n 5 ceph status
ceph osd tree # 查看 OSD 状态
ceph pg stat # 查看 PG 状态单节点故障
节点故障(包含多个 OSD):
影响:
该节点上的所有 OSD 同时故障
部分 PG 变为 degraded(降级,只有 2 副本)
处理:
1. 如果节点能快速恢复(< 5 分钟):等待自动恢复
2. 如果节点需要长时间维修:
- 手动将节点 OSD 标记为 out
- 触发数据重建
- 重建完成后,集群恢复 3 副本
注意:
3 节点 HCI 中,1 个节点故障时:
- 数据仍然可访问(2 副本)
- 但此时不能再有第二个节点故障(否则数据丢失)
- 应尽快修复故障节点性能基准
H3C HCI 典型性能(3 节点,全 NVMe SSD):
随机读(4K,QD=32):
单节点:~500,000 IOPS
3 节点聚合:~1,500,000 IOPS
随机写(4K,QD=32):
单节点:~150,000 IOPS(3 副本写放大)
3 节点聚合:~450,000 IOPS
顺序读(1MB):
3 节点聚合:~15 GB/s
顺序写(1MB):
3 节点聚合:~5 GB/s
延迟(4K 随机读):
P50:~200μs
P99:~500μs
P99.9:~1ms