当前位置:首页 > 物理机 > 正文

3台物理机搭建KVM集群够用吗?

三台物理服务器组成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检测到后,瞬间接管其虚拟机。

部署前关键准备工作

  1. 硬件要求:

    • 3台x86服务器(型号尽量一致)。
    • CPU:支持Intel VT-x/AMD-V虚拟化(grep -E 'vmx|svm' /proc/cpuinfo验证)。
    • 内存:≥64GB(根据虚拟机需求叠加)。
    • 网络:至少2个千兆/万兆网口。
    • 存储:本地系统盘 + 共享存储空间(建议SSD)。
  2. 软件环境统一 (以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
  3. 网络规划:

    • 管理网 (mgmt): Node间通信、SSH(VLAN 10, 如10.10.0/24)。
    • 存储网 (storage): NFS/iSCSI流量(物理隔离或VLAN 20,如168.1.0/24)。
    • 业务网 (vm_network): 虚拟机对外服务(桥接br0)。
  4. 配置共享存储 (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

集群配置深度步骤

  1. 节点基础配置:

    # 所有节点设置唯一主机名
    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
  2. 时间同步 (关键!):

    3台物理机搭建KVM集群够用吗?  第1张

    sudo yum install chrony
    sudo systemctl enable --now chronyd
    sudo chronyc sources # 验证同步状态
  3. 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
  4. 创建虚拟机网络 (桥接模式):

    <!-- 所有节点创建相同桥接网络:/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

虚拟机创建与高可用策略

  1. 创建虚拟机 (磁盘必须在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"
  2. 关键:虚拟机XML存共享存储

    virsh dumpxml prod-web1 > /mnt/nfs_kvm/vm_configs/prod-web1.xml
    virsh undefine prod-web1 # 仅在本地注销定义,XML文件安全保留
  3. 实现高可用 (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: 轻量级方案,简化配置。
  4. 存储高可用:

    • 双网卡绑定(Bonding)连接存储网络。
    • NFS Server自身做HA(如DRBD+pacemaker)。

安全加固与运营关键点

  1. 网络隔离: 严格划分管理、存储、业务VLAN,物理隔离更佳。
  2. 防火墙策略: 仅开放必要端口(SSH, Libvirt TCP, NFS)。
  3. 备份策略:
    • 虚拟机整机备份:virsh dumpxml + 磁盘快照/复制。
    • 增量备份:利用qemu-img创建差异磁盘。
  4. 监控告警: Zabbix/Prometheus + Grafana 监控物理机资源、虚拟机状态、存储性能。
  5. 定期更新: 及时打补丁(KVM, QEMU, 内核)。
  6. SELinux/AppArmor: 保持启用并配置正确策略。

集群验证:模拟故障测试

  1. 节点故障:

    • 在Node1上运行prod-web1
    • 强制关闭Node1电源。
    • 观察Node2/Node3日志:journalctl -f -u libvirtd
    • 验证Node2是否在30秒内启动prod-web1 (virsh list)。
  2. 存储中断:

    • 临时断开Node1的存储网络。
    • 虚拟机应因I/O错误暂停。
    • 恢复网络后,虚拟机应自动恢复(依赖配置)。
  3. 网络隔离:

    • 断开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/

(版权声明:本文为技术分享文档,原创内容,转载请注明来源,文中涉及命令请根据实际环境调整,操作前务必做好备份。)

0