在互联网架构中,负载均衡器(如 Nginx、HAProxy)是流量入口的核心组件,一旦单点故障将导致整个服务不可用。Keepalived基于VRRP(虚拟路由冗余协议)实现节点高可用,可与Nginx/HAProxy结合,构建负载均衡 + 故障自动切换的高可用架构。
前言
在互联网架构中,负载均衡器(如 Nginx、HAProxy)是流量入口的核心组件,一旦单点故障将导致整个服务不可用。Keepalived基于VRRP(虚拟路由冗余协议)实现节点高可用,可与Nginx/HAProxy结合,构建负载均衡 + 故障自动切换的高可用架构。
核心概念
| 组件 | 核心作用 |
| Keepalived | 基于 VRRP 协议,实现主备节点的 “虚拟 IP(VIP)” 漂移,完成故障自动切换 |
| Nginx | 七层(HTTP/HTTPS)负载均衡器,支持反向代理、静态资源缓存、SSL 终止等功能 |
| HAProxy | 四层(TCP)/ 七层负载均衡器,支持会话保持、健康检查、高并发场景,性能更优 |
| VIP(虚拟 IP) | 对外提供服务的统一 IP 地址,主节点故障时自动切换到备节点,对业务无感知 |
VRRP 协议工作原理

VRRP 协议通过主备节点选举实现IP冗余:
- 主节点(
Master):正常情况下持有VIP,对外提供服务,并定期向备节点发送VRRP通告报文(默认每1秒一次),告知自身状态; - 备节点(
Backup):监听主节点的通告报文,若超时(默认3秒)未收到,则认为主节点故障,自动升级为新主节点,抢占VIP; - 故障恢复:原主节点恢复后,根据优先级(默认主节点优先级更高)重新抢占
VIP,恢复主节点身份(可配置非抢占模式避免频繁切换)。
部署配置
以一主一备架构为例(生产环境推荐2节点以上),拓扑如下:
[客户端] → [VIP: 192.168.1.100]
↓(自动切换)
┌──────────────┐ ┌──────────────┐
│ 主节点(Master) │ │ 备节点(Backup) │
│ IP: 192.168.1.11 │ │ IP: 192.168.1.12 │
│ Keepalived + Nginx/HAProxy │ │ Keepalived + Nginx/HAProxy │
└──────────────┘ └──────────────┘
↓(负载均衡)
┌──────────────┐ ┌──────────────┐
│ 后端 Web 节点1 │ │ 后端 Web 节点2 │
│ IP: 192.168.1.21 │ │ IP: 192.168.1.22 │
└──────────────┘ └──────────────┘
- 正常状态:主节点持有
VIP,客户端流量通过VIP进入主节点的Nginx/HAProxy,再转发到后端Web节点; - 故障状态:主节点宕机或负载均衡服务异常,备节点抢占
VIP,流量自动切换到备节点,业务无感知。
准备与规划
| 节点角色 | IP 地址 | 安装软件 |
| 主节点(Master) | 192.168.1.11 | Keepalived + Nginx/HAProxy |
| 备节点(Backup) | 192.168.1.12 | Keepalived + Nginx/HAProxy |
| 虚拟 IP(VIP) | 192.168.1.100 | |
| 后端 Web 节点 1 | 192.168.1.21 | Nginx/Apache |
| 后端 Web 节点 2 | 192.168.1.22 | Nginx/Apache |
前置操作(所有节点)
# 关闭防火墙(CentOS 7)
systemctl stop firewalld && systemctl disable firewalld
# 关闭 SELINUX
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
Keepalived +Nginx/HAProxy安装过程略,下面只进行配置讲解
配置主节点(Master)Keepalived
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER # 节点标识,主备需不同(如备节点设为 LVS_BACKUP)
}
# 健康检查脚本:检测 Nginx/HAProxy 是否存活,若服务停则触发切换
vrrp_script check_lb {
script "/etc/keepalived/check_lb.sh"# 健康检查脚本路径
interval 2 # 检查间隔(秒)
weight -20 # 若脚本返回失败,节点优先级降低 20(确保备节点抢占)
}
vrrp_instance VI_1 {
state MASTER # 节点角色:MASTER(主)/BACKUP(备)
interface eth0 # 绑定 VIP 的网卡(需与实际网卡一致,用 ip addr 查看)
virtual_router_id 51 # 虚拟路由 ID,主备必须相同(0-255)
priority 100 # 优先级:主节点 > 备节点(如备节点设为 90)
advert_int 1 # VRRP 通告间隔(秒),主备需一致
# 认证配置:主备必须相同,防止非法节点接入
authentication {
auth_type PASS
auth_pass 1111 # 密码(1-8 位)
}
# 虚拟 IP(VIP):可配置多个,用空格分隔
virtual_ipaddress {
192.168.1.100/24 dev eth0 label eth0:0 # 网卡别名,便于识别
}
# 调用健康检查脚本
track_script {
check_lb
}
}
配置备节点(Backup)Keepalived
备节点配置与主节点类似,仅需修改3处参数:
global_defs {
router_id LVS_BACKUP # 与主节点不同
}
vrrp_instance VI_1 {
state BACKUP # 角色为备节点
priority 90 # 优先级低于主节点(100)
# 其他参数(virtual_router_id、auth_pass、VIP 等)与主节点完全一致
}
编写健康检查脚本
检测负载均衡服务(以Nginx为例,HAProxy只需替换服务名):
#!/bin/bash
# 检查 Nginx 进程是否存在
if ! ps aux | grep nginx | grep -v grep > /dev/null; then
# 尝试重启 Nginx(若重启失败则触发切换)
systemctl start nginx
sleep 2
# 再次检查,若仍失败则停止 Keepalived(释放 VIP)
if ! ps aux | grep nginx | grep -v grep > /dev/null; then
systemctl stop keepalived
fi
fi
配置 Nginx 反向代理
# 定义后端 Web 节点池(weight 为权重,值越大分配到的流量越多)
upstream web_servers {
server 192.168.1.21:80 weight=1;
server 192.168.1.22:80 weight=1;
# 可选配置:故障重试、超时时间
keepalive 32; # 长连接数
proxy_next_upstream error timeout invalid_header;
}
# 配置反向代理
server {
listen 80;
server_name localhost; # 若有域名,可替换为实际域名(如 www.example.com)
location / {
proxy_pass http://web_servers; # 转发到后端节点池
# 传递客户端真实 IP 及请求头
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
配置 HAProxy 四层负载均衡(以 TCP 为例)
global
log 127.0.0.1 local2 # 日志配置
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000 # 最大并发连接数
user haproxy
group haproxy
daemon # 后台运行
defaults
mode tcp # 模式:tcp(四层)/http(七层)
log global
option tcplog
option dontlognull
retries 3 # 故障重试次数
timeout connect 5000ms # 连接超时
timeout client 50000ms # 客户端超时
timeout server 50000ms # 服务端超时
# 前端监听配置(监听 VIP 的 80 端口)
frontend http_front
bind *:80
default_backend http_back # 转发到后端节点池
# 后端节点池配置
backend http_back
balance roundrobin # 负载均衡算法:轮询(roundrobin)/权重(static-rr)
server web1 192.168.1.21:80 check inter 2000 rise 2 fall 3 # check 启用健康检查
server web2 192.168.1.22:80 check inter 2000 rise 2 fall 3
主节点故障切换测试
- 模拟主节点服务故障:在主节点(
192.168.1.11)停止Nginx/HAProxy服务 - 观察
VIP漂移:在备节点(192.168.1.12)执行ip addr show eth0,若出现192.168.1.100(VIP),说明漂移成功; - 验证业务连续性:客户端再次访问
192.168.1.100,若仍能正常访问,说明故障切换生效(业务无感知)。
补充说明
virtual_server
virtual_server是Keepalived中LVS模块的核心配置项,它的作用是:
- 在
Keepalived节点上直接实现 四层(TCP/UDP)负载均衡,将客户端请求通过VIP转发到后端真实服务器(Real Server),无需依赖Nginx/HAProxy等第三方负载均衡软件。
! 基于 Keepalived + LVS 的配置(无需 Nginx/HAProxy)
global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24 dev eth0 label eth0:0 # VIP
}
}
# 关键:配置 virtual_server(LVS 负载均衡规则)
virtual_server 192.168.1.100 80 { # VIP + 监听端口(80 端口)
delay_loop 6 # 健康检查间隔(秒)
lb_algo rr # 负载均衡算法:rr(轮询)、wrr(权重轮询)等
lb_kind DR # LVS 模式:DR(直接路由)、NAT、TUN(隧道)
persistence_timeout 50 # 会话保持时间(秒)
# 后端真实服务器(Real Server)
real_server 192.168.1.21 80 {
weight 1 # 权重
TCP_CHECK { # 健康检查(TCP 端口检测)
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.1.22 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
AI大模型学习福利
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取
二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量
Keepalived+Nginx高可用部署指南
1076

被折叠的 条评论
为什么被折叠?



