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

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示例):

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

    • 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. 节点基础配置:

  2. 时间同步 (关键!):

    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
    • 创建虚拟机网络 (桥接模式):

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

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

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

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

0