高可用与迁移
虚拟机高可用(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. 输出演练报告