Skip to content

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

褚成志的云与计算笔记