在互联网行业,"业务不中断"是底线要求。一次服务器宕机可能导致百万级损失,而单点故障正是业务中断的头号元凶。
这套架构兼具高性能负载均衡与故障自动切换能力,既能扛住百万级并发请求,又能在节点故障时无缝衔接,成为企业级应用的"稳定性基石"。今天就从原理到实操,带你彻底搞懂这套大厂都在用的高可用方案!
一、3个核心组件,撑起高可用架构
一套靠谱的高可用架构,离不开"负载分发+故障兜底+应用适配"的三重保障。LVS、Keepalived、Nginx 各司其职,却又无缝协同:
(一)Keepalived:高可用的"守护者"
如果说集群是一支军队,Keepalived 就是"指挥官",核心职责是避免单点故障。它基于 VRRP 协议(虚拟路由冗余协议)工作,简单理解就是"主备双机+心跳检测":
-
主服务器(
Master)对外提供统一入口------虚拟IP(VIP),并定期发送"心跳包"告知备用服务器(Backup)"我还活着"; -
备用服务器实时监听心跳,一旦长时间收不到信号,立刻判定主服务器故障,自动升级为主服务器并接管VIP;
-
整个切换过程耗时毫秒级,用户完全无感知,实现"业务不中断"。
除此之外,Keepalived 还自带健康检查功能,能通过 TCP、HTTP 等方式监控后端服务器状态,故障节点自动剔除,恢复后自动归队,避免请求流向"死机"的服务器。
(二)LVS:负载均衡的"流量调度员"
面对百万级并发请求,单台服务器扛不住怎么办?LVS 作为 Linux 内核级负载均衡器,就是负责"分流"的专家。
它的优势在于性能极强------工作在内核态,不占用用户态资源,能轻松处理数十万并发连接,支持三种转发模式,其中 DR 模式(直接路由)因转发效率最高,成为 Web 服务的首选。
LVS 会根据预设规则(如轮询、加权轮询),将客户端请求均匀分发到多台后端服务器,避免单台服务器过载,同时提升整体集群的并发处理能力。
(三)Nginx:应用层的"灵活执行者"
如果说 LVS 是"粗粒度"的流量调度,Nginx 就是"细粒度"的应用适配专家。它擅长处理 HTTP 协议、静态资源缓存、反向代理,还能实现更灵活的负载均衡策略(如按 URL 分发、会话保持)。
在 LVS+Keepalived+Nginx 架构中,Nginx 作为后端 Web 节点,接收 LVS 分发的请求后,再根据后端应用服务器状态进一步转发,既减轻了应用服务器压力,又提升了服务灵活性。
三者协同逻辑很简单:客户端请求先到 VIP → LVS 分发到 Nginx 节点 → Nginx 转发到应用服务器 ;若主 LVS 故障,Keepalived 自动切换到备 LVS,全程无中断。
二、大厂都在用的核心优势
为什么这套架构能成为大厂标配?关键在于它解决了企业最关心的3个问题:
1. 性能拉满,扛住高并发
LVS 内核级转发+Nginx 高效处理,让集群能轻松应对数十万甚至百万级并发。对比单纯使用 Nginx 负载均衡,LVS 分担了大部分TCP连接压力,避免 Nginx 成为性能瓶颈,尤其适合流量峰值高的业务场景(如电商大促、直播带货)。
2. 高可用兜底,零中断保障
通过 Keepalived 主备切换机制,彻底解决单点故障问题。无论是负载调度器故障,还是后端 Web 节点故障,都能自动切换或剔除,保障服务可用性达到99.99%以上,这是大厂业务连续性的核心要求。
3. 灵活扩展,适配复杂场景
架构可根据业务规模横向扩展:业务增长时,只需新增 Nginx 节点或应用服务器,无需重构整体架构;同时支持多种负载均衡算法、会话保持、健康检查策略,能适配 Web 服务、数据库、API 接口等多种场景。
4. 稳定可靠,运维成本低
三者均为开源软件,成熟度高、社区活跃,几乎无bug;配置一旦落地,长期稳定运行,后续只需常规监控维护,大大降低了运维成本------这对大厂大规模集群管理至关重要。
三、从0到1搭建,实操步骤详解
理论懂了,实操才是关键。下面以"2台负载调度器+2台 Nginx 节点"为例,带你一步步搭建集群(附关键配置代码,直接复制可用)。
(一)环境准备
先明确集群角色与IP分配,所有服务器统一使用 CentOS 7 系统:
| 角色 | IP 地址 | 核心软件 | 虚拟IP(VIP) |
|---|---|---|---|
| 主负载调度器(Master) | 192.168.10.110 | ipvsadm、Keepalived | 192.168.10.180 |
| 备负载调度器(Backup) | 192.168.10.119 | ipvsadm、Keepalived | 192.168.10.180 |
| Nginx 节点1 | 192.168.10.120 | Nginx | 192.168.10.180(lo:0接口) |
| Nginx 节点2 | 192.168.10.123 | Nginx | 192.168.10.180(lo:0接口) |
| 客户端 | 192.168.10.2 | - | - |
基础环境配置(所有服务器都要执行):
# 关闭防火墙与SELinux(避免端口拦截)
#(生产环境需要开启防火墙,定义内部互通策略)
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 安装依赖工具
yum -y install wget gcc gcc-c++ make
(二)负载调度器配置(主备节点)
1. 安装核心软件
yum -y install ipvsadm keepalived
# 加载IPVS内核模块
modprobe ip_vs
# 验证模块是否加载成功
cat /proc/net/ip_vs
2. 配置 Keepalived(核心步骤)
备份默认配置文件,主备节点仅3个参数不同,其余一致:
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
主节点配置文件(备节点修改标注部分):
global_defs {
smtp_server 127.0.0.1
router_id LVS_01 # 备节点改为 LVS_02
}
vrrp_instance VI_1 {
state MASTER # 备节点改为 BACKUP
interface ens33 # 绑定实际网卡(用ifconfig查看)
virtual_router_id 10 # 主备必须一致
priority 100 # 备节点改为 90(主优先级更高)
advert_int 1 # 心跳间隔1秒
authentication {
auth_type PASS
auth_pass abc123 # 主备认证密码一致
}
virtual_ipaddress {
192.168.10.180 # VIP地址
}
}
# LVS负载均衡规则
virtual_server 192.168.10.180 80 {
delay_loop 6 # 健康检查间隔6秒
lb_algo rr # 轮询算法(可改wrr加权轮询)
lb_kind DR # 直接路由模式
persistence_timeout 50 # 会话保持50秒
# 后端Nginx节点1
real_server 192.168.10.120 80 {
weight 1 # 权重(数值越大,分配请求越多)
TCP_CHECK {
connect_port 80
connect_timeout 3 # 连接超时3秒
nb_get_retry 3 # 重试3次
delay_before_retry 3 # 重试间隔3秒
}
}
# 后端Nginx节点2
real_server 192.168.10.123 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3. 绑定 VIP 接口
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
添加以下内容:
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
重启网络并激活接口:
systemctl restart network
ifup ens33:0
# 验证VIP是否生效
ifconfig ens33:0
4. 优化内核参数
vim /etc/sysctl.conf
添加以下内容:
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
应用配置:
sysctl -p
5. 启动服务
systemctl start keepalived
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
# 查看LVS规则
ipvsadm -ln
(三)Nginx 节点配置
1. 安装并启动 Nginx
yum -y install nginx
systemctl start nginx && systemctl enable nginx
2. 配置测试页面(区分两台节点)
-
Nginx 节点1(192.168.10.120):
echo "
这是 Nginx 节点1(192.168.10.120)
" > /usr/share/nginx/html/index.html -
Nginx 节点2(192.168.10.123):
echo "
这是 Nginx 节点2(192.168.10.123)
" > /usr/share/nginx/html/index.html
3. 绑定 VIP 到回环接口
DR 模式必须配置,避免 ARP 冲突:
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
添加以下内容:
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
重启网络并添加路由:
systemctl restart network
ifup lo:0
route add -host 192.168.10.180 dev lo:0
4. 优化 ARP 参数
vim /etc/sysctl.conf
添加以下内容:
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
应用配置:
sysctl -p
四、3分钟验证集群效果
搭建完成后,通过3个测试验证架构是否生效,新手也能轻松操作:
1. 负载均衡测试
客户端浏览器访问 VIP:http://192.168.10.180,多次刷新页面,会交替显示两台 Nginx 节点的测试页面,说明 LVS 分流成功。
2. 故障切换测试
-
停止主负载调度器的 Keepalived 服务:
systemctl stop keepalived; -
在备调度器执行
ip addr show,能看到 VIP(192.168.10.180)已漂移过来; -
客户端继续访问 VIP,服务正常,无中断------高可用生效!
3. 健康检查测试
-
停止其中一台 Nginx 服务:
systemctl stop nginx; -
客户端访问 VIP,只会显示正常的 Nginx 节点页面,故障节点被自动剔除;
-
重启 Nginx 服务后,节点自动归队,负载均衡恢复正常。
五、大厂避坑指南:这些问题一定要注意
1. 脑裂问题(高可用集群头号杀手)
现象 :主备节点同时认为自己是主节点,导致 VIP 冲突,服务不稳定。
原因 :心跳线故障、防火墙拦截 VRRP 流量、配置参数不一致。
解决方案:
-
双心跳线冗余:部署两条独立心跳链路;
-
仲裁机制:配置网关 IP 为仲裁节点,心跳中断时,无法 Ping 通仲裁 IP 的节点主动放弃主节点竞争;
-
监控报警:部署脚本检测到脑裂时,立刻发送告警。
2. ARP 缓存冲突
现象 :客户端访问 VIP 时,偶尔出现无法访问或访问异常。
解决方案 :严格按照步骤配置 Nginx 节点的 ARP 参数和回环接口,定期清理客户端 ARP 缓存(arp -d 192.168.10.180)。
3. 内核参数配置错误
现象 :LVS 转发失败,或 Keepalived 切换异常。
解决方案 :务必执行内核参数优化步骤,执行 sysctl -p 确保参数生效,避免路由转发冲突。
六、总结
LVS+Keepalived+Nginx 架构之所以成为大厂标配,核心在于它用"简单组合"实现了"高性能+高可用+高灵活"的三重目标:
-
性能上,LVS 内核级转发扛住高并发;
-
可用性上,Keepalived 主备切换避免单点故障;
-
灵活性上,Nginx 适配复杂应用场景。
这套架构不仅适用于 Web 服务,还能扩展到数据库、API 网关等场景,是企业从"能用"到"好用"的关键一步。
肯定有人想说:"这套架构是不是有点老了?现在都流行K8s、容器化部署了。"
其实,技术没有绝对的"新"与"旧",只有"合适"与"不合适"。
K8s 固然强大,能实现容器编排、自动扩缩容等高级功能,但它的学习成本高、运维复杂度大,对于中小团队或者流量规模适中的业务而言,LVS+Keepalived+Nginx 这套组合拳更轻量、更稳定、更易落地------不需要复杂的集群管理,几台服务器就能搭建起高可用架构,运维成本直接减半。
即便是在大厂的混合云架构中,这套方案也从未被淘汰:它常常被用于 K8s 集群的入口流量分发,作为边缘层的负载均衡方案,为容器集群提供高性能、高可靠的流量接入能力。
技术选型的核心,从来不是追新,而是匹配业务需求。适合自己的,才是最好的。