Skip to content

高可用与迁移

虚拟机高可用(VM HA)

HA 工作原理

正常状态:
  宿主机1(Active):VM1、VM2、VM3
  宿主机2(Active):VM4、VM5、VM6

宿主机1 故障:
  1. 心跳检测失败(默认 30 秒超时)
  2. HA 控制器触发故障转移
  3. VM1、VM2、VM3 在宿主机2/3 上重启
  4. 总恢复时间:约 2-5 分钟(含 VM 启动时间)

HA 前提条件

  • 所有宿主机使用共享存储(Ceph/FC SAN/NFS)
  • 宿主机之间网络互通(心跳网络)
  • 共享存储上有足够空间

HA 配置

CVM 控制台 → 集群管理 → 高可用设置

配置项:
- 启用 HA:✅
- 心跳超时:30 秒(建议)
- 故障转移策略:
  - 自动(推荐):故障后自动迁移
  - 手动:需人工确认后迁移
- 预留资源:20%(确保有足够资源接收迁移的 VM)

热迁移(Live Migration)

热迁移允许 VM 在不停机的情况下从一台宿主机迁移到另一台。

热迁移原理

迁移过程(以 32GB 内存 VM 为例):

阶段1:预复制(Pre-copy)
  源宿主机 → 传输内存页 → 目标宿主机
  同时:VM 继续运行,脏页持续产生

阶段2:迭代复制
  继续传输脏页,直到脏页数量足够少

阶段3:停机切换(Stop-and-copy)
  暂停 VM(< 100ms)
  传输最后的脏页和 CPU 状态
  在目标宿主机恢复 VM

总停机时间:通常 < 100ms(用户几乎无感知)
总迁移时间:取决于内存大小和网络带宽
  32GB 内存 + 10GbE 网络 ≈ 3-5 分钟

热迁移条件

条件说明
共享存储VM 磁盘必须在共享存储上
网络互通源和目标宿主机网络互通
CPU 兼容目标宿主机 CPU 型号兼容(或开启 CPU 兼容模式)
资源充足目标宿主机有足够 CPU/内存

执行热迁移

bash
# 通过 virsh 命令热迁移
virsh migrate --live <vm-name> \
  qemu+ssh://target-host/system \
  --verbose \
  --bandwidth 1000  # 限速 1Gbps,避免影响业务

# 通过 OpenStack API
openstack server migrate --live-migration \
  --host target-compute-node \
  <vm-id>

批量迁移(主机维护)

bash
# 将宿主机设为维护模式(自动迁移所有 VM)
openstack compute service set --disable \
  --disable-reason "scheduled maintenance" \
  <host> nova-compute

# 触发批量迁移
nova host-evacuate-live <host>

# 维护完成后恢复
openstack compute service set --enable <host> nova-compute

冷迁移(Cold Migration)

冷迁移需要先关闭 VM,适用于:

  • 跨存储迁移(从 NFS 迁移到 Ceph)
  • 目标宿主机 CPU 不兼容
  • 需要修改 VM 配置
bash
# 冷迁移
openstack server migrate <vm-id>

# 确认迁移
openstack server migrate confirm <vm-id>

# 回滚迁移
openstack server migrate revert <vm-id>

快照与备份

VM 快照

bash
# 创建内存快照(含内存状态,VM 继续运行)
virsh snapshot-create-as <vm-name> snap-20240101 \
  --description "升级前快照" \
  --memspec snapshot=internal

# 列出快照
virsh snapshot-list <vm-name>

# 回滚到快照
virsh snapshot-revert <vm-name> snap-20240101

# 删除快照
virsh snapshot-delete <vm-name> snap-20240101

磁盘备份策略

全量备份(每周日凌晨 2:00):
  1. 创建 Ceph RBD 快照
  2. 导出快照到备份存储
  3. 保留最近 4 个全量备份

增量备份(每天凌晨 2:00):
  1. 基于上次快照创建增量快照
  2. 只传输变化的数据块
  3. 保留最近 7 天增量备份

恢复流程:
  1. 选择恢复点(全量 + 增量)
  2. 恢复到原 VM 或新 VM
  3. 验证数据完整性

容灾方案

同城双活

数据中心A(主)          数据中心B(备)
  CAS 集群A    ←→ 同步  CAS 集群B
  Ceph 存储A   ←→ 复制  Ceph 存储B
  
  延迟要求:< 5ms(同城专线)
  RPO:0(同步复制)
  RTO:< 5 分钟

异地灾备

主数据中心(北京)        灾备数据中心(上海)
  CAS 集群     → 异步 →  CAS 集群
  Ceph 存储    → 复制 →  Ceph 存储
  
  延迟:20-50ms(跨城专线)
  RPO:< 15 分钟(异步复制间隔)
  RTO:< 30 分钟

灾备切换演练

建议每季度进行一次灾备切换演练:

演练步骤:
1. 通知相关团队,确认演练时间窗口
2. 停止主站点到灾备站点的数据复制
3. 在灾备站点启动 VM
4. 验证业务可用性(功能测试)
5. 记录 RTO 实际值
6. 演练完成后,重新同步数据
7. 输出演练报告

褚成志的云与计算笔记