技能目标
- 掌握 Keepalived 双机热备的原理与部署流程
- 熟练搭建基于 Keepalived 的双机热备系统
- 完成 LVS+Keepalived 高可用负载均衡集群的构建与验证
前言
在高度信息化的 IT 时代,企业的生产系统、业务运营、销售支撑与日常管理,都深度依赖计算机信息服务。高可用(HA)技术作为保障业务连续性的核心,其应用需求持续提升,要求系统能够提供持续、不间断的计算服务与网络服务。
本章将系统讲解如何使用 Keepalived 实现双机热备,包括虚拟 IP(VIP)的故障自动切换,以及 Keepalived 在 LVS 高可用集群中的深度应用,帮助学习者构建企业级高可用架构。
一、Keepalived 双机热备核心基础
1.1 Keepalived 概述与核心原理
Keepalived 是一款专为 LVS 设计的开源高可用辅助工具,核心能力包括:
- 故障自动切换(Failover):当主节点(Master)故障时,自动将服务切换到备节点(Backup),保障业务不中断
- 健康检查(Health Checking):实时监控 LVS 负载调度器、后端真实服务器的可用性,自动剔除故障节点
- 服务自动恢复:主节点故障恢复后,自动将其重新加入集群,业务流量切回主节点
Keepalived 基于 **VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)** 实现热备:
- 多台路由器组成一个热备组,共享同一个虚拟 IP(VIP)对外提供服务
- 同一时刻热备组内只有一台主路由器提供服务,其余为备份状态
- 当主路由器故障时,备路由器按优先级自动接管 VIP,继续提供服务,整个过程对用户透明
- VIP 漂移由 Keepalived 自动完成,无需手动配置网卡,仅需通过配置文件定义
1.2 Keepalived 安装与服务管理
(1)环境准备与安装
在 openEuler 24 系统中,通过 DNF 方式安装 Keepalived,同时安装 ipvsadm(LVS 管理工具)与 nginx(测试服务):
bash
运行
[root@localhost ~]# yum install -y keepalived ipvsadm nginx
(2)服务自启动配置
安装完成后,将 Keepalived 设置为开机自启动:
bash
运行
[root@localhost ~]# systemctl enable keepalived
# 同步服务文件
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.
二、Keepalived 双机热备实战
2.1 实验环境规划
表格
| 主机角色 | 操作系统 | IP 地址 | 部署服务 |
|---|---|---|---|
| 主服务器(Master) | openEuler 24 | 192.168.10.101 | Keepalived + Nginx |
| 备服务器(Backup) | openEuler 24 | 192.168.10.102 | Keepalived + Nginx |
| 虚拟 IP(VIP) | - | 192.168.10.100/24 | 业务统一访问入口 |
2.2 主服务器配置
Keepalived 主配置文件位于/etc/keepalived/keepalived.conf,先关闭防火墙与 SELinux:
bash
运行
[root@localhost ~]# systemctl stop firewalld && setenforce 0
[root@localhost ~]# cd /etc/keepalived/
# 备份模板配置
[root@localhost keepalived]# cp keepalived.conf.sample keepalived.conf
[root@localhost keepalived]# vi keepalived.conf
主服务器核心配置:
ini
global_defs {
router_id HA_TEST_R1 # 本路由器(服务器)的唯一标识
}
vrrp_instance VI_1 {
state MASTER # 热备状态:MASTER表示主服务器
interface ens33 # 承载VIP的物理网卡
virtual_router_id 1 # 虚拟路由ID,热备组内所有节点必须一致
priority 100 # 优先级,数值越大优先级越高(主节点设为最高)
advert_int 1 # 通告间隔(心跳频率,单位:秒)
authentication { # 认证信息,热备组内所有节点必须一致
auth_type PASS
auth_pass 123456
}
virtual_ipaddress { # 指定漂移的虚拟IP(VIP),可配置多个
192.168.10.100
}
}
启动服务与验证
bash
运行
[root@localhost keepalived]# systemctl start keepalived
# 查看网卡信息,VIP已自动绑定到ens33(ifconfig无法查看,需用ip命令)
[root@localhost keepalived]# ip addr show dev ens33
2.3 备服务器配置
备服务器配置与主服务器基本一致,仅需修改router_id、state、priority三个参数:
ini
global_defs {
router_id HA_TEST_R2 # 唯一标识,与主节点区分
}
vrrp_instance VI_1 {
state BACKUP # 热备状态:BACKUP表示备服务器
interface ens33
virtual_router_id 1 # 与主节点保持一致
priority 99 # 优先级低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.10.100
}
}
启动服务
bash
运行
[root@localhost keepalived]# systemctl start keepalived
备节点启动后不会绑定 VIP,VIP 由主节点持有,仅当主节点故障时自动接管。
2.4 双机热备功能验证
(1)连通性测试
在客户端执行持续 ping 命令,测试 VIP 可用性:
bash
运行
ping -t 192.168.10.100
- 停止主节点 Keepalived 服务:
systemctl stop keepalived,ping 仅中断 1-2 个包后恢复,说明备节点已接管 VIP - 重启主节点 Keepalived 服务,ping 再次中断 1-2 个包后恢复,说明主节点重新夺回 VIP 控制权
(2)Web 服务访问测试
在两台服务器启动 Nginx,写入不同测试页面:
bash
运行
# 主节点
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# echo "web01" > /usr/share/nginx/html/index.html
# 备节点
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# echo "web02" > /usr/share/nginx/html/index.html
- 客户端访问
http://192.168.10.100,显示主节点页面 - 停止主节点 Keepalived,刷新页面显示备节点内容,说明 VIP 已切换
- 重启主节点 Keepalived,页面恢复为主节点内容,验证故障自动恢复
(3)日志排查
Keepalived 日志保存在/var/log/messages,可通过日志跟踪状态切换:
bash
运行
[root@localhost ~]# tail -f /var/log/messages
- 主节点故障时,日志显示
MASTER→STOP,移除 VIP - 备节点日志显示
BACKUP→MASTER,接管 VIP,完成故障切换
三、LVS + Keepalived 高可用负载均衡集群
3.1 架构概述
Keepalived 的核心设计目标是为 LVS 负载均衡集群提供高可用,通过调用 ipvsadm 工具管理虚拟服务器与服务池,实现:
- 主 / 备调度器的故障自动切换,避免 LVS 单点故障
- 后端真实服务器的健康检查,自动剔除故障节点
- 故障节点恢复后自动重新加入集群,实现负载均衡与高可用的结合
本方案基于LVS-DR(直接路由)模式,搭建主 / 备两台调度器,结合 Keepalived 实现热备,后端多台 Web 服务器提供服务,架构如图 3.3 所示。
3.2 实验环境规划
表格
| 主机角色 | 操作系统 | IP 地址 | 部署服务 |
|---|---|---|---|
| 主调度器(Master) | openEuler 24 | 192.168.10.101 | Keepalived + ipvsadm |
| 备调度器(Backup) | openEuler 24 | 192.168.10.102 | Keepalived + ipvsadm |
| Web 节点 1 | openEuler 24 | 192.168.10.103 | Nginx |
| Web 节点 2 | openEuler 24 | 192.168.10.104 | Nginx |
| 虚拟 IP(VIP) | - | 192.168.10.100/24 | 集群统一访问入口 |
3.3 基础环境配置(所有节点执行)
bash
运行
# 关闭防火墙与SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# 加载ip_vs模块
modprobe ip_vs
cat /proc/net/ip_vs # 查看版本信息
# 安装依赖
yum install ipvsadm keepalived -y
# 备份配置文件
cp /etc/keepalived/keepalived.conf{,.bak}
3.4 主调度器配置
编辑/etc/keepalived/keepalived.conf,包含全局配置、热备配置与虚拟服务器配置:
ini
global_defs {
router_id LVS_HA_R1 # 调度器唯一标识
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100
}
}
# 虚拟服务器配置(LVS-DR模式)
virtual_server 192.168.10.100 80 {
delay_loop 15 # 健康检查间隔(秒)
lb_algo rr # 负载调度算法:轮询(rr)
lb_kind DR # LVS工作模式:直接路由(DR)
persistence_timeout 60 # 持久连接时间(秒)
protocol TCP # 协议类型:TCP
# 后端真实服务器1
real_server 192.168.10.103 80 {
weight 1 # 权重
TCP_CHECK { # TCP健康检查
connect_timeout 10 # 连接超时(秒)
retry 3 # 重试次数
delay_before_retry 3 # 重试间隔(秒)
connect_port 80 # 检查端口
}
}
# 后端真实服务器2
real_server 192.168.10.104 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
}
3.5 备调度器配置
备调度器配置与主调度器几乎一致,仅修改router_id、state、priority:
ini
global_defs {
router_id LVS_HA_R2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 1
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100
}
}
# 虚拟服务器配置与主调度器完全一致
virtual_server 192.168.10.100 80 {
delay_loop 15
lb_algo rr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.10.103 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.10.104 80 {
weight 1
TCP_CHECK {
connect_timeout 10
retry 3
delay_before_retry 3
connect_port 80
}
}
}
3.6 启动服务
bash
运行
# 主、备调度器分别启动Keepalived
[root@localhost ~]# systemctl restart keepalived
3.7 Web 节点服务器配置(DR 模式)
DR 模式下,Web 节点需要配置 VIP 到本地回环接口,并添加 ARP 抑制规则,脚本示例:
bash
运行
#!/bin/bash
# 配置VIP到lo:0接口
vip=192.168.207.200
case "$1" in
start)
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/default/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/default/arp_announce
# 临时添加VIP
/sbin/ip addr add $vip/32 dev lo label lo:0
/sbin/ip route add local $vip/32 dev lo
;;
stop)
echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/default/arp_ignore
echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
echo "0" > /proc/sys/net/ipv4/conf/default/arp_announce
# 移除VIP
/sbin/ip addr del $vip/32 dev lo label lo:0
/sbin/ip route del local $vip/32 dev lo
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
bash
运行
# 启动脚本
chmod +x /etc/init.d/lvs_dr
/etc/init.d/lvs_dr start
3.8 集群功能验证
- 访问测试:客户端通过 VIP(192.168.10.100)访问 Web 服务,轮询显示两台 Web 节点的页面
- 故障切换测试:停止主调度器 Keepalived,服务正常访问,备调度器自动接管
- 负载均衡测试 :通过
ipvsadm -ln查看调度器连接状态,验证轮询算法生效 - 健康检查测试:停止一台 Web 节点的 Nginx,调度器自动剔除该节点,流量仅分发至正常节点
总结
在互联网业务高并发、高可用的核心需求下,单点故障与性能瓶颈是系统稳定性的最大挑战。Keepalived 凭借轻量级、开源、灵活的特性,成为解决这类问题的核心工具。
本章围绕 Keepalived 的两大核心能力展开:
- 双机热备:基于 VRRP 协议实现虚拟 IP 的自动漂移,保障服务持续在线,彻底避免单点故障
- LVS 高可用集群:结合 LVS-DR 模式,实现负载均衡与故障自动切换,构建高可用、高性能的分布式服务架构
通过从原理到实操的全流程讲解,涵盖架构设计、参数调优、故障排查等关键环节,帮助学习者掌握构建企业级高可用系统的核心技能,为业务的稳定运行提供坚实保障。