预算有限下的KVM高可用实战KeepalivedDRBD黄金组合详解在资源受限的环境中构建高可用性HA解决方案一直是技术团队面临的挑战。当企业没有预算购置昂贵的共享存储设备仅有两台老旧服务器时如何确保关键业务虚拟机VM的持续运行本文将深入探讨如何利用Keepalived和DRBD这两款开源工具打造一套经济高效的KVM高可用方案。1. 方案架构与核心原理这套平民高可用组合拳的核心思想是将网络层和存储层的冗余机制巧妙结合。Keepalived负责虚拟IPVIP的自动漂移确保客户端始终能够访问服务DRBD则实现块设备级别的数据同步保证主备节点间的数据一致性。架构示意图[客户端] -- [VIP: 192.168.1.100] | -------------- | | [主节点] [备节点] (DRBD Primary) (DRBD Secondary) [运行VM] [待命]工作流程正常情况下主节点持有VIP并运行关键VMDRBD实时将主节点的存储变更同步到备节点当主节点故障时Keepalived检测到心跳丢失备节点接管VIP备节点将DRBD设备提升为Primary状态在备节点启动相同的VM服务恢复时间通常在30秒内完成这套方案的最大优势在于零共享存储依赖利用服务器本地磁盘通过DRBD实现镜像极低成本完全基于开源软件无需额外硬件投入自动化故障转移从网络到存储的全栈HA保障2. 环境准备与基础配置2.1 硬件与网络要求实施前需确保满足以下基本条件要求项详细说明服务器至少两台x86服务器建议配置相同或相近的CPU和内存存储每台服务器需有相同容量的独立磁盘或分区供DRBD使用网络1Gbps及以上网络连接建议为DRBD同步配置独立网络或VLAN操作系统推荐CentOS/RHEL 7或Ubuntu LTS已安装KVM/libvirt环境网络拓扑建议管理网络用于SSH管理和Keepalived心跳数据同步网络专用于DRBD数据同步可选但强烈推荐业务网络承载VIP和VM流量2.2 系统基础配置在两台节点上执行以下准备工作# 禁用SELinux或配置适当策略 setenforce 0 sed -i s/^SELINUX.*/SELINUXpermissive/ /etc/selinux/config # 配置主机名解析 echo 192.168.1.101 node1 /etc/hosts echo 192.168.1.102 node2 /etc/hosts # 安装基础工具 yum install -y vim wget net-tools epel-release提示生产环境中建议配置SSH密钥互信便于后续管理操作。3. DRBD存储层配置DRBD将在两台服务器间建立块设备级别的实时镜像为虚拟机提供高可用存储。3.1 DRBD安装与内核模块在两台节点上安装DRBD软件包# CentOS/RHEL yum install -y drbd kmod-drbd90 drbd-utils # Ubuntu apt install -y drbd8-utils加载DRBD内核模块modprobe drbd echo drbd /etc/modules-load.d/drbd.conf3.2 创建DRBD资源假设我们使用/dev/sdb1作为后端设备配置步骤如下在两台节点上准备分区fdisk /dev/sdb # 创建sdb1分区创建DRBD配置文件/etc/drbd.d/kvm.resresource kvm { protocol C; # 同步复制模式确保数据强一致 startup { become-primary-on node1; # 初始主节点 } net { cram-hmac-alg sha1; shared-secret your-secret-key; } on node1 { device /dev/drbd0; disk /dev/sdb1; address 192.168.2.101:7788; # 使用专用同步网络 meta-disk internal; } on node2 { device /dev/drbd0; disk /dev/sdb1; address 192.168.2.102:7788; meta-disk internal; } }初始化并启动DRBD# 在两台节点执行 drbdadm create-md kvm drbdadm up kvm # 在主节点(node1)执行 drbdadm primary --force kvm # 查看同步状态 cat /proc/drbdDRBD状态监测关键指标指标健康状态说明cs:Connected节点间连接正常ro:Primary/Secondary主备角色正确ds:UpToDate/UpToDate数据完全同步同步进度百分比初始同步时应监控直至达到100%4. Keepalived网络层配置Keepalived将管理虚拟IP的漂移并在故障时触发DRBD角色切换。4.1 安装与基础配置在两台节点上安装Keepalivedyum install -y keepalived配置主节点(node1)的/etc/keepalived/keepalived.confvrrp_script chk_drbd { script /usr/local/bin/check_drbd.sh interval 2 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 # 主节点优先级更高 advert_int 1 authentication { auth_type PASS auth_pass yourpassword } virtual_ipaddress { 192.168.1.100/24 } track_script { chk_drbd } notify_master /usr/local/bin/notify_master.sh }备节点(node2)配置基本相同只需修改state BACKUP priority 1004.2 健康检查与状态切换脚本创建DRBD健康检查脚本/usr/local/bin/check_drbd.sh#!/bin/bash # 检查DRBD连接状态 if ! drbdadm status kvm | grep -q Connected; then exit 1 fi # 检查本地DRBD角色 if [ $(drbdadm role kvm) ! Primary ]; then exit 1 fi exit 0创建主节点切换脚本/usr/local/bin/notify_master.sh#!/bin/bash TYPE$1 NAME$2 STATE$3 case $STATE in MASTER) # 提升DRBD为主角色 drbdadm primary kvm # 启动虚拟机 virsh start vm1 ;; BACKUP) # 停止虚拟机 virsh destroy vm1 # 降级DRBD drbdadm secondary kvm ;; *) echo 未知状态 exit 1 ;; esac设置脚本可执行权限chmod x /usr/local/bin/*.sh5. KVM虚拟机配置与集成5.1 创建虚拟机存储在DRBD设备上创建文件系统并准备虚拟机磁盘# 在主节点执行 mkfs.ext4 /dev/drbd0 mount /dev/drbd0 /mnt/kvm # 创建虚拟机磁盘 qemu-img create -f qcow2 /mnt/kvm/vm1.qcow2 20G5.2 定义虚拟机创建虚拟机XML定义文件/etc/libvirt/qemu/vm1.xmldomain typekvm namevm1/name memory unitKiB2097152/memory vcpu placementstatic2/vcpu os type archx86_64hvm/type boot devhd/ /os devices disk typefile devicedisk driver nameqemu typeqcow2/ source file/mnt/kvm/vm1.qcow2/ target devvda busvirtio/ /disk interface typebridge source bridgebr0/ model typevirtio/ /interface /devices /domain定义虚拟机virsh define /etc/libvirt/qemu/vm1.xml注意虚拟机应配置为自动启动但不要立即启动由Keepalived脚本控制启停。6. 故障转移测试与优化6.1 完整测试流程初始状态验证VIP在主节点DRBD主角色在主节点虚拟机在主节点运行模拟主节点故障# 在主节点执行 systemctl stop keepalived观察故障转移备节点应在10秒内检测到心跳丢失VIP漂移到备节点备节点自动提升DRBD为主角色虚拟机在备节点启动恢复测试# 在原主节点恢复服务 systemctl start keepalived根据配置VIP可能自动切回或保持现状6.2 性能优化建议DRBD调优参数resource kvm { net { max-buffers 8000; max-epoch-size 8000; sndbuf-size 512k; } disk { c-plan-ahead 20; c-fill-target 24M; c-max-rate 100M; } }Keepalived优化vrrp_instance VI_1 { advert_int 1; # 心跳间隔 preempt_delay 300; # 抢占延迟(秒) garp_master_refresh 60; # 主节点ARP刷新 }7. 生产环境注意事项在实际部署中还需要考虑以下关键因素监控与告警实现DRBD同步状态的实时监控配置Keepalived切换告警监控虚拟机运行状态定期演练每月执行计划内故障转移测试验证备份恢复流程扩展考虑多VIP支持多个关键服务结合备份方案增强数据保护考虑加入第三节点作为仲裁这套KeepalivedDRBD组合方案已经在多个中小型环境中验证其可靠性。某电商企业在两台五年前的服务器上部署此方案成功将数据库服务的可用性从99.5%提升到99.95%而硬件投入几乎为零。