LVS+Keepalived+Nginx 高可用架构揭秘

在互联网行业,"业务不中断"是底线要求。一次服务器宕机可能导致百万级损失,而单点故障正是业务中断的头号元凶。

这套架构兼具高性能负载均衡与故障自动切换能力,既能扛住百万级并发请求,又能在节点故障时无缝衔接,成为企业级应用的"稳定性基石"。今天就从原理到实操,带你彻底搞懂这套大厂都在用的高可用方案!

一、3个核心组件,撑起高可用架构

一套靠谱的高可用架构,离不开"负载分发+故障兜底+应用适配"的三重保障。LVSKeepalivedNginx 各司其职,却又无缝协同:

(一)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 集群的入口流量分发,作为边缘层的负载均衡方案,为容器集群提供高性能、高可靠的流量接入能力。

技术选型的核心,从来不是追新,而是匹配业务需求。适合自己的,才是最好的。

相关推荐
加洛斯12 小时前
SpringSecurity入门篇(1)
后端·架构
lhrimperial12 小时前
系统架构设计实战:从单体到微服务的演进之路
微服务·架构·系统架构
京东零售技术12 小时前
Apache Hudi 在京东的最新架构演进
架构
撩得Android一次心动12 小时前
Android 架构模式的演变(MVC、MVP、MVVM、MVI)
android·架构·mvc·mvvm·mvp
笑笑�12 小时前
OpenResty + nginx_upstream_check_module 构建主动健康检查模块
运维·nginx·负载均衡·openresty
狗哥哥12 小时前
企业级 Vue3 + Element Plus 主题定制架构:从“能用”到“好用”的进阶之路
前端·css·架构
梦想画家13 小时前
Rust模块化开发从入门到精通:用mod搭建高可维护项目架构
架构·rust·模块化开发
缘友一世13 小时前
区块链原理与体系架构
架构·区块链
切糕师学AI13 小时前
MIPS架构是什么?
架构·处理器架构
无忧智库13 小时前
深度解读|某县域“十五五”数字农业示范区与高标准农田物联网建设方案(附技术架构、风险防控与实施路径)
物联网·架构