如何配置虚拟机双机热备实现高可用性?
- 内容介绍
- 文章标签
- 相关推荐
一、 :为何必须实现虚拟机双机热备?
在金融、医疗、电商等对业务连续性要求极高的领域,一次程序故障就可能导致巨额损失、客户流失甚至合规风险。双机热备通过两台主机实时互为备份。实现故障自动切换,从而保障业务零宕机。
二、使用者痛点直击
- 配置复杂、文档分散:很多公司在搭建双机热备时需要同时处理网络、存储、心跳还有虚拟化网站的多套参数,容易出现遗漏。
- 故障切换不可靠:心跳链路不稳定或VIP配置错误,会导致主备切换失败业务仍然中断。其实,
- 运维成本高:缺乏统一监控和自动化脚本。使得日常维护需要大量人工介入。
- 升级风险大:程序升级或补丁更新后往往会破坏已有的高可用配置,需要反复调试。
三、双机热备概述
1. 双机热备的工作原理
两台服务器到故障。备用节点立即接管虚拟IP并启动相同的业务实例,实现无感知切换。
2. 关键技术组件
-
keepalived—— 基于VRRP实现心跳与VIP漂移。按理说, -
VMware vSphere HA—— ESXi 集群层面的自动重启与资源调度。 -
LVS/NGINX/HAPROXY—— 前端负载均衡与双机热备结合使用。 -
CARP / pfsense—— 防火墙层面的冗余方案。按理说,
四、环境准备与硬件规划
a. 虚拟化网站选择
推荐使用 VMware vSphere 6.x/7.x 或者开源 KVM。确保网站支持 HA 集群功能 并已启用 DRS。
b. 网络设计要点
- L1 心跳网卡:专用网卡或 VLAN。用于 keepalived 心跳通信,避免业务流量干扰。
- L2 公网/业务网卡:PING 可达且绑定 VIP 的网络段。
- L3 存储网络:NFS/iSCSI 共享磁盘,用于 VM 的数据盘。
b. 共享存储准备
- 创建一个容量足够的共享磁盘,挂载到两台 ESXi 主机;- 在 VMware 中将该磁盘标记为“独占”或“多写”,视业务需求而定。不过,
五、软件层面详细配置步骤
在 CentOS 7 虚拟机上安装 keepalived 并编写 VRRP 配置文件
# 安装 keepalived
yum install -y keepalived
# 编辑 /etc/keepalived/keepalived.conf
cat> /etc/keepalived/keepalived.conf <'EOF'
global_defs {
router_id LVS_DEVEL
smtp_server 192.168.200.1
smtp_connect_timeout 30
notification_email {
}
notification_email_from
}
vrrp_instance VI_1 {
state MASTER # 主节点写 MASTER,备用写 BACKUP
interface eth0 # 心跳网卡名称
virtual_router_id 51 # VRRP 实例 ID,保持唯一
priority 150 # 主节点> 备用节点
advert_int 1 # 心跳间隔秒
auntication {
auth_type PASS
auth_pass mysecurepass
}
virtual_ipaddress {
192.168.10.101/24 dev eth0 label eth0:vip # VIP 地址。
可定义多个
}
track_script {
chk_nginx # 健康检查脚本,可自行
}
}
EOF
# 添加健康检查脚本
cat> /etc/keepalived/check_nginx.sh <'EOS'
#!/bin/bash
if systemctl is-active --quiet nginx; n exit 0; else exit 1; fi
EOS
chmod +x /etc/keepalived/check_nginx.sh
# 启动并设置开机自启
systemctl enable keepalived && systemctl start keepalived
在 VMware vSphere 中开启 HA 并添加容错规则
- 登录 vCenter Web Client → "集群"
- Select your cluster → “Configure” → “vSphere HA”。勾选 “Turn ON vSphere HA”。
- "Admission Control" 建议使用 “Host failures tolerance = 1”。
- "Advanced Options" 中将 “Isolation Response” 设置为 “Power off” 或 “Shutdown”。
- "VM Overrides" 为关键业务 VM 勾选 “Restart Priority = High”。
- "Save" 完成后vCenter 会自动在每台 ESXi 主机上部署 HA Agent。
将 VIP 与 VM 网络适配器关联
- 在 VM 的网络适配器属性中添加第二块 NIC,连接到 Heartbeat VLAN。- 在 ESXi 上创建一个 Port Group。将其绑定至同一 VLAN,并在 Keepalived 配置中指定该接口名称。
验证主备切换
-
A 节点正常运行时通过
alert ping 192.168.10.101确认 VIP 可达。 - A 节点强制关机,观察 B 节点日志是否出现 “Entering BACKUP state” 并接管 VIP。
- B 节点成功接管后 启动 A 节点,确认它回到 MASTER 状态并抢回 VIP。
六、常见问题与痛点对应方法
| 痛点描述 | 可能原因 | 解决办法 |
|---|---|---|
| *心跳丢包导致误判* | - Heartbeat 网卡与业务网卡共用同一物理链路 - VLAN 配置错误或 MTU 不匹配 - 防火墙拦截 VRRP 包 | - 为 Heartbeat 单独划分 VLAN - 确保 MTU 一致且关闭防火墙对 VRRP 的过滤 - 使用 `tcpdump -i ethX -nnvvv 'proto vrrp'` 排查数据包流向 |
| *VIP 被两台机器同时持有* | - 两台机器 priority 相同 - Keepalivered 服务未同步启动顺序 - 多播路由阻塞导致 VRRP 广播不被接收 | - 明确设定 `priority` 值 - 确保所有节点在同一时间启动 keepalive 服务 - 检查交换机 IGMP Snooping 设置是否放行 VRRP 多播 |
| *ESXi 主机宕机后 VM 未自动重启* | - 集群未开启 HA 或 Admission Control 阈值过低 - 虚拟机未标记为“受保护” - 存储不可用导致 VM 无法启动 | - 在集群设置里打开 vSphere HA。并设置容忍故障数 - 对关键 VM 设置 Restart Priority=High - 确认共享存储已被所有 ESXi 正常挂载 |
| *升级补丁后 Keepalived 不再工作*- 新内核改动了网络接口命名规则 - SELinux 策略阻止了 VRRP 包发送 - Keepalive 包版本不兼容新程序库 | - 检查 `/etc/sysconfig/network-scripts/ifcfg-*` 是否仍然对应原接口名 - 临时关闭 SELinux 验证是否是策略问题 - 使用官方仓库提供的最新 Keepalive RPM 或自行编译源码 |
七、常用方法建议
- SLA‑Driven Design:先明确业务 RTO/RPO,接下来决定“双活”还是“单活+热备”。
- #Automation:Terraform + Ansible 脚本化创建 ESXi 集群、网络 Port‑Group 与 Keepalived 配置,实现“一键部署”。
- #监控告警:Zabbix/Nagios 对以下指标设置阈值告警:VRRP 状态变化、VIP Ping 丢失、ESXi 主机关机事件。
- #定期演练:每季度进行一次“主备切换演练”,记录恢复时间并调整脚本。
- #文档统一管理:采用 Confluence 或 GitBook 将网络拓扑图、IP 分配表还有 Keepalive 配置统一归档,降低交接风险。
八、迈向真正的高可用之路 🚀
演练和运维自动化。解决了配置复杂、切换不可靠和运维成本高等痛点**,帮助公司实现真正意义上的零停摆**。
还在为程序宕机担忧吗?怎么说呢,立即动手部署双机热备,让您的业务稳如磐石!📈💪
一、 :为何必须实现虚拟机双机热备?
在金融、医疗、电商等对业务连续性要求极高的领域,一次程序故障就可能导致巨额损失、客户流失甚至合规风险。双机热备通过两台主机实时互为备份。实现故障自动切换,从而保障业务零宕机。
二、使用者痛点直击
- 配置复杂、文档分散:很多公司在搭建双机热备时需要同时处理网络、存储、心跳还有虚拟化网站的多套参数,容易出现遗漏。
- 故障切换不可靠:心跳链路不稳定或VIP配置错误,会导致主备切换失败业务仍然中断。其实,
- 运维成本高:缺乏统一监控和自动化脚本。使得日常维护需要大量人工介入。
- 升级风险大:程序升级或补丁更新后往往会破坏已有的高可用配置,需要反复调试。
三、双机热备概述
1. 双机热备的工作原理
两台服务器到故障。备用节点立即接管虚拟IP并启动相同的业务实例,实现无感知切换。
2. 关键技术组件
-
keepalived—— 基于VRRP实现心跳与VIP漂移。按理说, -
VMware vSphere HA—— ESXi 集群层面的自动重启与资源调度。 -
LVS/NGINX/HAPROXY—— 前端负载均衡与双机热备结合使用。 -
CARP / pfsense—— 防火墙层面的冗余方案。按理说,
四、环境准备与硬件规划
a. 虚拟化网站选择
推荐使用 VMware vSphere 6.x/7.x 或者开源 KVM。确保网站支持 HA 集群功能 并已启用 DRS。
b. 网络设计要点
- L1 心跳网卡:专用网卡或 VLAN。用于 keepalived 心跳通信,避免业务流量干扰。
- L2 公网/业务网卡:PING 可达且绑定 VIP 的网络段。
- L3 存储网络:NFS/iSCSI 共享磁盘,用于 VM 的数据盘。
b. 共享存储准备
- 创建一个容量足够的共享磁盘,挂载到两台 ESXi 主机;- 在 VMware 中将该磁盘标记为“独占”或“多写”,视业务需求而定。不过,
五、软件层面详细配置步骤
在 CentOS 7 虚拟机上安装 keepalived 并编写 VRRP 配置文件
# 安装 keepalived
yum install -y keepalived
# 编辑 /etc/keepalived/keepalived.conf
cat> /etc/keepalived/keepalived.conf <'EOF'
global_defs {
router_id LVS_DEVEL
smtp_server 192.168.200.1
smtp_connect_timeout 30
notification_email {
}
notification_email_from
}
vrrp_instance VI_1 {
state MASTER # 主节点写 MASTER,备用写 BACKUP
interface eth0 # 心跳网卡名称
virtual_router_id 51 # VRRP 实例 ID,保持唯一
priority 150 # 主节点> 备用节点
advert_int 1 # 心跳间隔秒
auntication {
auth_type PASS
auth_pass mysecurepass
}
virtual_ipaddress {
192.168.10.101/24 dev eth0 label eth0:vip # VIP 地址。
可定义多个
}
track_script {
chk_nginx # 健康检查脚本,可自行
}
}
EOF
# 添加健康检查脚本
cat> /etc/keepalived/check_nginx.sh <'EOS'
#!/bin/bash
if systemctl is-active --quiet nginx; n exit 0; else exit 1; fi
EOS
chmod +x /etc/keepalived/check_nginx.sh
# 启动并设置开机自启
systemctl enable keepalived && systemctl start keepalived
在 VMware vSphere 中开启 HA 并添加容错规则
- 登录 vCenter Web Client → "集群"
- Select your cluster → “Configure” → “vSphere HA”。勾选 “Turn ON vSphere HA”。
- "Admission Control" 建议使用 “Host failures tolerance = 1”。
- "Advanced Options" 中将 “Isolation Response” 设置为 “Power off” 或 “Shutdown”。
- "VM Overrides" 为关键业务 VM 勾选 “Restart Priority = High”。
- "Save" 完成后vCenter 会自动在每台 ESXi 主机上部署 HA Agent。
将 VIP 与 VM 网络适配器关联
- 在 VM 的网络适配器属性中添加第二块 NIC,连接到 Heartbeat VLAN。- 在 ESXi 上创建一个 Port Group。将其绑定至同一 VLAN,并在 Keepalived 配置中指定该接口名称。
验证主备切换
-
A 节点正常运行时通过
alert ping 192.168.10.101确认 VIP 可达。 - A 节点强制关机,观察 B 节点日志是否出现 “Entering BACKUP state” 并接管 VIP。
- B 节点成功接管后 启动 A 节点,确认它回到 MASTER 状态并抢回 VIP。
六、常见问题与痛点对应方法
| 痛点描述 | 可能原因 | 解决办法 |
|---|---|---|
| *心跳丢包导致误判* | - Heartbeat 网卡与业务网卡共用同一物理链路 - VLAN 配置错误或 MTU 不匹配 - 防火墙拦截 VRRP 包 | - 为 Heartbeat 单独划分 VLAN - 确保 MTU 一致且关闭防火墙对 VRRP 的过滤 - 使用 `tcpdump -i ethX -nnvvv 'proto vrrp'` 排查数据包流向 |
| *VIP 被两台机器同时持有* | - 两台机器 priority 相同 - Keepalivered 服务未同步启动顺序 - 多播路由阻塞导致 VRRP 广播不被接收 | - 明确设定 `priority` 值 - 确保所有节点在同一时间启动 keepalive 服务 - 检查交换机 IGMP Snooping 设置是否放行 VRRP 多播 |
| *ESXi 主机宕机后 VM 未自动重启* | - 集群未开启 HA 或 Admission Control 阈值过低 - 虚拟机未标记为“受保护” - 存储不可用导致 VM 无法启动 | - 在集群设置里打开 vSphere HA。并设置容忍故障数 - 对关键 VM 设置 Restart Priority=High - 确认共享存储已被所有 ESXi 正常挂载 |
| *升级补丁后 Keepalived 不再工作*- 新内核改动了网络接口命名规则 - SELinux 策略阻止了 VRRP 包发送 - Keepalive 包版本不兼容新程序库 | - 检查 `/etc/sysconfig/network-scripts/ifcfg-*` 是否仍然对应原接口名 - 临时关闭 SELinux 验证是否是策略问题 - 使用官方仓库提供的最新 Keepalive RPM 或自行编译源码 |
七、常用方法建议
- SLA‑Driven Design:先明确业务 RTO/RPO,接下来决定“双活”还是“单活+热备”。
- #Automation:Terraform + Ansible 脚本化创建 ESXi 集群、网络 Port‑Group 与 Keepalived 配置,实现“一键部署”。
- #监控告警:Zabbix/Nagios 对以下指标设置阈值告警:VRRP 状态变化、VIP Ping 丢失、ESXi 主机关机事件。
- #定期演练:每季度进行一次“主备切换演练”,记录恢复时间并调整脚本。
- #文档统一管理:采用 Confluence 或 GitBook 将网络拓扑图、IP 分配表还有 Keepalive 配置统一归档,降低交接风险。
八、迈向真正的高可用之路 🚀
演练和运维自动化。解决了配置复杂、切换不可靠和运维成本高等痛点**,帮助公司实现真正意义上的零停摆**。
还在为程序宕机担忧吗?怎么说呢,立即动手部署双机热备,让您的业务稳如磐石!📈💪

