总体思路
在 KVM 场景中,高可用需要同时保障存储、网络与计算节点的冗余与快速恢复,并通过自动故障检测与迁移将停机时间降到最低。实践中通常采用共享存储或分布式存储承载虚拟机磁盘,结合libvirt/virsh进行生命周期管理,利用热迁移做计划内维护,借助故障迁移在节点异常时自动拉起实例,同时以网卡绑定/双网口与STP等手段提升网络可用性。
关键架构组件
- 虚拟化与管理栈:以 KVM(内核模块)+ QEMU(I/O 设备模拟)+ libvirt(管理接口) 为核心,配合 virsh 进行虚拟机定义、启动、迁移等操作,便于标准化与自动化。
- 存储层高可用:优先使用共享/分布式存储(如 Ceph、GlusterFS),将虚拟机磁盘与配置置于共享位置,避免单点故障,并为热迁移/故障迁移提供数据一致性基础。
- 网络层高可用:采用多网卡聚合(bond)+ 双网口与STP等机制实现链路冗余与环路防护,生产业务优先使用桥接网络以获得与物理网络同网段的直连能力。
实现路径
- 共享存储 + 主机集群 + 自动故障转移
- 将虚拟机磁盘放入共享存储(如 Ceph/GlusterFS),配置文件集中管理;在多个计算节点上运行 libvirt/virsh,通过集群管理工具(如 Pacemaker/Corosync)对虚拟机实例做资源代理与监控。
- 故障检测可采用“主机 Ping 不可达”与“管控 Agent 上报超时”等策略触发故障迁移;迁移时将实例在目标宿主机上拉起,并同步更新路由/安全组,必要时隔离原故障主机网络,避免“脑裂”。
- 无共享存储的本地盘场景
- 无法做真正的“自动故障迁移”,可采用“冷迁移”作为兜底:关机后迁移磁盘与 XML 配置至新宿主机并重新定义启动;为降低停机窗口,可先将磁盘转换为 qcow2 再传输(显著减小空镜像传输体积)。
- 计划内维护与负载均衡
- 通过 virsh 热迁移在业务低峰将虚拟机从一台宿主机平滑迁移至另一台,实现零或近零停机的维护窗口;前端结合 HAProxy/Nginx 等做业务层负载均衡与健康检查,配合自动重连与重试策略提升端到端可用性。
落地步骤与配置要点
- 基础环境
- 确认 CPU 支持虚拟化(如 Intel VT‑x/AMD‑V),加载 kvm/kvm_intel/kvm_amd 模块;安装 qemu-kvm、libvirt、virt-install、bridge-utils 等组件,启动 libvirtd 服务并验证环境可用性(如 virsh list --all)。
- 存储配置
- 部署 Ceph/GlusterFS 集群并创建卷;在宿主机上将卷挂载到统一目录(如 /kvmdata),使用挂载点作为虚拟机磁盘路径创建/迁移实例,确保多节点可读写与一致性。
- 网络配置
- 生产环境优先使用桥接网络(br0)接入业务网;配置 bond0(多网卡聚合)+ STP 提升链路冗余与稳定性,避免单链路失效导致业务中断。
- 迁移与演练
- 计划内维护:执行 virsh migrate --persistent --undefinesource
- 故障演练:隔离/宕机一台宿主机,验证集群是否能按策略在另一节点自动拉起实例,并检查网络与安全策略是否同步生效。
常见陷阱与优化建议
- 避免单点:本地盘无法做自动故障迁移,关键业务务必使用共享/分布式存储;必要时引入数据库/配置中心管理实例元数据与网络策略。
- 迁移效率:大容量 raw 镜像跨网络迁移代价高,优先使用 qcow2 或增量迁移手段;迁移前清理无用快照与临时文件。
- 网络可靠性:优先 bond+STP,并规划管理网/业务网/存储网三网隔离;变更前评估环路与广播风险。
- 监控与演练:对Ping 不可达、Agent 超时、存储时延/亚健康等设定合理阈值与告警;定期进行故障迁移演练与备份恢复演练,验证 SLA 可达性。