在Linux系统中配置高可用虚拟化环境,核心是通过集群管理工具配合虚拟化组件,实现虚拟机故障时自动迁移、资源自动恢复,避免单点故障影响业务运行。常用的方案是采用KVM作为虚拟化层,搭配Corosync实现集群成员管理,Pacemaker实现资源调度与高可用规则配置。
环境准备
本次配置需要两台配置相近的Linux服务器,系统推荐使用CentOS 7或Rocky Linux 8,同时需要共享存储用于存放虚拟机磁盘文件,保证两台节点都能访问到相同的虚拟机数据。另外需要确保两台服务器网络互通,且配置好主机名解析,避免集群通信出现问题。
基础环境配置
首先在两台节点上关闭防火墙和SELinux,避免规则拦截集群通信和虚拟化服务。执行以下命令完成基础配置:
# 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 配置主机名解析,假设节点1为node1,节点2为node2,IP分别为192.168.0.10和192.168.0.11 echo "192.168.0.10 node1" >> /etc/hosts echo "192.168.0.11 node2" >> /etc/hosts
安装虚拟化与集群组件
两台节点都需要安装KVM虚拟化相关组件和集群管理工具,执行以下命令完成安装:
# 安装KVM及管理工具 yum install -y qemu-kvm libvirt virt-install bridge-utils # 安装Corosync和Pacemaker集群组件 yum install -y corosync pacemaker pcs # 启动libvirt服务并设置开机自启 systemctl start libvirtd systemctl enable libvirtd
配置集群认证
安装完成后需要配置集群节点的认证密码,方便后续统一管理。在两台节点上执行以下命令设置hacluster用户的密码:
passwd hacluster # 输入两次相同的密码完成设置
然后在任意一台节点上启动pcsd服务并设置为开机自启,同时认证集群节点:
# 启动pcsd服务 systemctl start pcsd systemctl enable pcsd # 认证集群节点,输入之前设置的hacluster用户密码 pcs cluster auth node1 node2 -u hacluster -p 你的密码
创建并配置集群
初始化集群
在节点1上执行以下命令初始化集群,创建名为virt_cluster的集群:
pcs cluster setup --name virt_cluster node1 node2
初始化完成后启动集群服务:
pcs cluster start --all pcs cluster enable --all
配置Corosync通信
集群启动后需要检查Corosync的通信状态,确保两个节点之间的成员通信正常:
# 查看集群状态 pcs status corosync # 查看集群整体状态 pcs status cluster
如果输出中显示两个节点都处于Online状态,说明集群基础通信配置正常。
配置虚拟机高可用资源
创建测试虚拟机
首先在共享存储上创建虚拟机的磁盘文件,然后通过virt-install命令创建测试虚拟机,注意虚拟机的磁盘和配置都要存放在共享存储路径下,保证两个节点都能访问:
# 创建共享存储路径,假设共享存储挂载到/shared目录 mkdir -p /shared/vm_disks # 创建虚拟机磁盘 qemu-img create -f qcow2 /shared/vm_disks/test_vm.qcow2 20G # 安装测试虚拟机,系统以CentOS 7为例 virt-install --name test_vm --ram 2048 --vcpus 2 --disk path=/shared/vm_disks/test_vm.qcow2,format=qcow2 --os-type linux --os-variant centos7 --network bridge=br0 --cdrom /shared/iso/CentOS-7-x86_64-Minimal.iso --graphics vnc,listen=0.0.0.0 --noautoconsole
配置虚拟机资源与约束
接下来在Pacemaker中配置虚拟机资源,设置高可用规则。首先创建虚拟机资源,指定虚拟机的名称和启动参数:
# 创建虚拟机资源,资源名为vm_test pcs resource create vm_test ocf:heartbeat:VirtualDomain hypervisor="qemu:///system" config="/shared/vm_config/test_vm.xml" migration_transport="ssh" op start timeout=60s op stop timeout=60s op monitor timeout=30s interval=10s
其中/shared/vm_config/test_vm.xml是虚拟机的配置文件,可以通过virsh dumpxml test_vm > /shared/vm_config/test_vm.xml命令导出。
然后配置资源约束,确保虚拟机优先在节点1运行,当节点1故障时自动迁移到节点2:
# 创建位置约束,设置虚拟机优先运行在node1 pcs constraint location vm_test prefers node1=100 # 创建顺序约束,确保共享存储先挂载再启动虚拟机,这里如果共享存储是自动挂载可以省略 # pcs constraint order start shared_storage then start vm_test
验证高可用效果
配置完成后可以查看资源状态,确认虚拟机已经在节点1上运行:
pcs status resources
此时可以模拟节点1故障,比如关闭节点1的电源或者执行pcs cluster stop node1命令,等待一段时间后查看集群状态,会发现虚拟机自动迁移到节点2上运行,业务不会中断。当节点1恢复后,虚拟机可以根据约束规则选择是否回迁到节点1。
注意事项
- 共享存储的稳定性直接影响高可用效果,建议使用可靠的存储方案,比如iSCSI、NFS或者分布式存储。
- 虚拟机的配置文件中不要包含节点特有的路径或参数,避免迁移后无法启动。
- 定期测试集群的故障迁移能力,确保高可用规则符合实际业务需求。
- 集群节点的时间需要保持同步,建议配置NTP服务,避免时间偏差导致集群通信异常。