HCI 规模扩展方案
扩展策略
同构扩展(推荐)
添加与现有节点相同规格的节点,最简单:
扩展前:3 节点(每节点 6×3.84TB SSD)
扩展后:6 节点(每节点 6×3.84TB SSD)
优势:
- 资源均衡,无性能热点
- 管理简单
- 数据自动均衡
步骤:
1. 新节点上架,连接网络
2. 安装 OS,配置网络
3. 在 CVM 中添加节点
4. 等待 Ceph 数据均衡
5. 验证集群状态异构扩展
添加不同规格节点(如升级存储容量):
场景:现有 3 节点(6×3.84TB SSD),需要增加存储容量
方案:添加 3 个存储型节点(12×16TB HDD)
注意:
- 需要配置 CRUSH Map,区分 SSD 和 HDD 存储池
- 不同类型数据放不同存储池
- 管理复杂度增加大规模 HCI 集群
机架感知(Rack Awareness)
大规模部署时,需要配置机架感知,确保副本分布在不同机架:
CRUSH Map 机架感知配置:
数据中心
├── 机架1
│ ├── 节点1(OSD 0-5)
│ └── 节点2(OSD 6-11)
├── 机架2
│ ├── 节点3(OSD 12-17)
│ └── 节点4(OSD 18-23)
└── 机架3
├── 节点5(OSD 24-29)
└── 节点6(OSD 30-35)
副本规则:3 副本分布在 3 个不同机架
效果:任意一个机架故障,数据不丢失bash
# 配置 CRUSH Map 机架感知
# 编辑 CRUSH Map
ceph osd getcrushmap -o crushmap.bin
crushtool -d crushmap.bin -o crushmap.txt
# 编辑 crushmap.txt,添加机架层级
# rule replicated_rule {
# id 0
# type replicated
# min_size 1
# max_size 10
# step take default
# step chooseleaf firstn 0 type rack # 按机架选择
# step emit
# }
crushtool -c crushmap.txt -o crushmap_new.bin
ceph osd setcrushmap -i crushmap_new.bin多集群联邦
超过 50 节点时,建议拆分为多个 HCI 集群,通过 CVM 统一管理:
CVM 统一管理
├── HCI 集群A(20 节点,生产环境)
├── HCI 集群B(15 节点,测试环境)
└── HCI 集群C(10 节点,开发环境)
优势:
- 故障域隔离(一个集群故障不影响其他)
- 独立升级维护
- 资源隔离更彻底容量规划工具
python
# HCI 容量规划计算器
def hci_capacity_planning(
num_nodes: int,
disks_per_node: int,
disk_capacity_tb: float,
replica_count: int = 3,
usable_ratio: float = 0.7, # 预留 30% 空间
cpu_overcommit: float = 3.0,
memory_overcommit: float = 1.2,
cpu_per_node: int = 64,
memory_per_node_gb: int = 512
):
"""
计算 HCI 集群可用资源
"""
# 存储计算
raw_storage_tb = num_nodes * disks_per_node * disk_capacity_tb
usable_storage_tb = raw_storage_tb / replica_count * usable_ratio
# 计算资源
total_vcpu = num_nodes * cpu_per_node * cpu_overcommit
total_memory_gb = num_nodes * memory_per_node_gb * memory_overcommit
print(f"=== HCI 集群容量规划 ===")
print(f"节点数量:{num_nodes}")
print(f"原始存储:{raw_storage_tb:.1f} TB")
print(f"可用存储:{usable_storage_tb:.1f} TB({replica_count} 副本,{usable_ratio*100:.0f}% 利用率)")
print(f"可用 vCPU:{total_vcpu:.0f} 核(超分比 {cpu_overcommit}:1)")
print(f"可用内存:{total_memory_gb:.0f} GB(超分比 {memory_overcommit}:1)")
# VM 数量估算
vm_4c8g = min(total_vcpu // 4, total_memory_gb // 8)
vm_2c4g = min(total_vcpu // 2, total_memory_gb // 4)
print(f"\n可运行 VM 数量(参考):")
print(f" 4C8G VM:约 {vm_4c8g:.0f} 台")
print(f" 2C4G VM:约 {vm_2c4g:.0f} 台")
# 示例:6 节点 HCI
hci_capacity_planning(
num_nodes=6,
disks_per_node=6,
disk_capacity_tb=3.84,
cpu_per_node=64,
memory_per_node_gb=512
)升级与维护
滚动升级
HCI 支持不停机滚动升级:
升级流程(逐节点升级):
节点1升级:
1. 将节点1上的 VM 热迁移到其他节点
2. 将节点1的 OSD 标记为 noout(防止数据重建)
3. 升级节点1的 OS/软件
4. 重启节点1
5. 验证节点1恢复正常
6. 取消 noout 标记
7. 等待 Ceph 状态恢复 HEALTH_OK
重复以上步骤,逐节点升级
注意:
- 每次只升级一个节点
- 等待集群完全恢复后再升级下一个节点
- 升级期间集群处于 degraded 状态,性能略有下降bash
# 升级前准备
# 1. 设置 noout 标志(防止升级期间触发数据重建)
ceph osd set noout
# 2. 迁移 VM
openstack server migrate --live-migration --host <target-host> <vm-id>
# 3. 升级完成后取消 noout
ceph osd unset noout
# 4. 验证集群状态
ceph health detail