上一篇
3台物理机搭建KVM集群够用吗?
- 物理机
- 2025-06-01
- 2477
三台物理服务器组成KVM虚拟化集群,通过共享存储和集群管理软件实现虚拟机的高可用、负载均衡与集中管理,提升资源利用率和业务连续性。
3台物理机构建高可用KVM虚拟化集群:企业级部署指南
在数字化转型浪潮中,企业IT基础设施的弹性与效率至关重要,使用3台标准物理服务器构建KVM虚拟化集群,能以极致的成本效益实现接近商业解决方案的高可用性(HA),下面将详细拆解这一专业部署过程。
集群核心架构与组件
- KVM (Kernel-based Virtual Machine): Linux内核原生虚拟化模块,提供CPU、内存虚拟化。
- QEMU: 处理I/O设备模拟(磁盘、网卡等),与KVM协同工作。
- Libvirt: 管理工具集(API、守护进程
libvirtd
),核心控制接口。 - Virsh: Libvirt的命令行管理工具。
- 共享存储 (NFS/iSCSI): 集群基石,确保虚拟机磁盘文件(如
vm-disk.qcow2
)被所有物理主机访问。 - 集群逻辑
- 虚拟机定义为XML文件,存放于共享存储路径(如
/nfs/vm_configs/
)。 - 任意物理节点(Node)均可通过Libvirt启动/管理这些虚拟机。
- 当Node1故障,Node2或Node3检测到后,瞬间接管其虚拟机。
- 虚拟机定义为XML文件,存放于共享存储路径(如
部署前关键准备工作
-
硬件要求:
- 3台x86服务器(型号尽量一致)。
- CPU:支持Intel VT-x/AMD-V虚拟化(
grep -E 'vmx|svm' /proc/cpuinfo
验证)。 - 内存:≥64GB(根据虚拟机需求叠加)。
- 网络:至少2个千兆/万兆网口。
- 存储:本地系统盘 + 共享存储空间(建议SSD)。
-
软件环境统一 (以CentOS 7为例):
# 所有节点执行 sudo yum -y update && sudo reboot sudo yum -y install qemu-kvm libvirt virt-install virt-viewer bridge-utils nfs-utils sudo systemctl enable --now libvirtd
-
网络规划:
- 管理网 (mgmt): Node间通信、SSH(VLAN 10, 如
10.10.0/24
)。 - 存储网 (storage): NFS/iSCSI流量(物理隔离或VLAN 20,如
168.1.0/24
)。 - 业务网 (vm_network): 虚拟机对外服务(桥接
br0
)。
- 管理网 (mgmt): Node间通信、SSH(VLAN 10, 如
-
配置共享存储 (NFS示例):
- NFS Server (可复用某物理节点或独立):
sudo yum install nfs-utils sudo mkdir -p /nfs/kvm_storage sudo chown nobody:nobody /nfs/kvm_storage echo "/nfs/kvm_storage 10.10.10.0/24(rw,sync,no_root_squash,no_all_squash)" | sudo tee -a /etc/exports sudo systemctl enable --now nfs-server sudo firewall-cmd --permanent --add-service=nfs && sudo firewall-cmd --reload
- 所有KVM节点 (Client):
sudo mkdir /mnt/nfs_kvm echo "10.10.10.100:/nfs/kvm_storage /mnt/nfs_kvm nfs defaults 0 0" | sudo tee -a /etc/fstab sudo mount -a
- NFS Server (可复用某物理节点或独立):
集群配置深度步骤
-
节点基础配置:
# 所有节点设置唯一主机名 sudo hostnamectl set-hostname nodeX.kvmcluster.lan # X=1,2,3 # 编辑/etc/hosts,确保互相解析 10.10.10.101 node1.kvmcluster.lan node1 10.10.10.102 node2.kvmcluster.lan node2 10.10.10.103 node3.kvmcluster.lan node3
-
时间同步 (关键!):
sudo yum install chrony sudo systemctl enable --now chronyd sudo chronyc sources # 验证同步状态
-
Libvirt高级配置:
- 修改
/etc/libvirt/libvirtd.conf
:listen_tls = 0 listen_tcp = 1 auth_tcp = "none" # 测试环境简化,生产建议SASL tcp_port = "16509"
- 修改
/etc/sysconfig/libvirtd
:LIBVIRTD_ARGS="--listen"
- 重启服务:
sudo systemctl restart libvirtd sudo firewall-cmd --add-port=16509/tcp --permanent && sudo firewall-cmd --reload
- 修改
-
创建虚拟机网络 (桥接模式):
<!-- 所有节点创建相同桥接网络:/etc/libvirt/qemu/networks/vm_br0.xml --> <network> <name>vm_br0</name> <forward mode="bridge"/> <bridge name="br0"/> </network>
virsh net-define vm_br0.xml virsh net-autostart vm_br0 virsh net-start vm_br0
虚拟机创建与高可用策略
-
创建虚拟机 (磁盘必须在NFS上!):
sudo virt-install --name=prod-web1 --ram=4096 --vcpus=2 --disk path=/mnt/nfs_kvm/prod-web1.qcow2,size=40,format=qcow2 --os-type=linux --os-variant=centos7.0 --network network=vm_br0 --graphics none --console pty,target_type=serial --location=/path/to/centos7.iso --extra-args="console=ttyS0,115200n8"
-
关键:虚拟机XML存共享存储
virsh dumpxml prod-web1 > /mnt/nfs_kvm/vm_configs/prod-web1.xml virsh undefine prod-web1 # 仅在本地注销定义,XML文件安全保留
-
实现高可用 (HA):
- 方案1:Libvirt自愈 + 监控脚本
# 所有节点配置:/etc/libvirt/qemu/autostart/ ln -s /mnt/nfs_kvm/vm_configs/prod-web1.xml /etc/libvirt/qemu/autostart/ systemctl restart libvirtd # 添加cron任务,每分钟检测邻居节点存活 */1 * * * * ping -c 3 node1 || ( virsh shutdown prod-web1; virsh create /mnt/nfs_kvm/vm_configs/prod-web1.xml )
- 方案2:专用工具 (适用生产)
- Pacemaker + Corosync: 复杂但健壮,需配置资源代理。
- VirtHA: 轻量级方案,简化配置。
- 方案1:Libvirt自愈 + 监控脚本
-
存储高可用:
- 双网卡绑定(Bonding)连接存储网络。
- NFS Server自身做HA(如DRBD+pacemaker)。
安全加固与运营关键点
- 网络隔离: 严格划分管理、存储、业务VLAN,物理隔离更佳。
- 防火墙策略: 仅开放必要端口(SSH, Libvirt TCP, NFS)。
- 备份策略:
- 虚拟机整机备份:
virsh dumpxml
+ 磁盘快照/复制。 - 增量备份:利用
qemu-img
创建差异磁盘。
- 虚拟机整机备份:
- 监控告警: Zabbix/Prometheus + Grafana 监控物理机资源、虚拟机状态、存储性能。
- 定期更新: 及时打补丁(KVM, QEMU, 内核)。
- SELinux/AppArmor: 保持启用并配置正确策略。
集群验证:模拟故障测试
-
节点故障:
- 在Node1上运行
prod-web1
。 - 强制关闭Node1电源。
- 观察Node2/Node3日志:
journalctl -f -u libvirtd
- 验证Node2是否在30秒内启动
prod-web1
(virsh list
)。
- 在Node1上运行
-
存储中断:
- 临时断开Node1的存储网络。
- 虚拟机应因I/O错误暂停。
- 恢复网络后,虚拟机应自动恢复(依赖配置)。
-
网络隔离:
- 断开Node1管理网口。
- Node2/Node3应通过cron或Pacemaker检测到失联,触发VM迁移。
总结与价值
通过3台物理服务器部署KVM集群,您将获得:
业务高可用性: 物理机故障时虚拟机分钟级恢复。
资源高效利用: 整合工作负载,提升CPU/内存利用率。
成本优化: 基于开源技术,大幅降低许可费用。
灵活扩展: 可平滑添加更多节点或升级硬件。
引用说明:
- Libvirt 官方文档: https://libvirt.org/docs.html
- KVM 社区 Wiki: https://www.linux-kvm.org/page/Main_Page
- Red Hat Virtualization 部署指南: https://access.redhat.com/documentation/en-us/red_hat_virtualization
- Ubuntu KVM 指南: https://ubuntu.com/server/docs/virtualization-introduction
- NFS 最佳实践: https://docs.oracle.com/en/storage/nfs-server/
(版权声明:本文为技术分享文档,原创内容,转载请注明来源,文中涉及命令请根据实际环境调整,操作前务必做好备份。)