百万级并发架构设计:LVS+Nginx+Keepalived 方案详解!

随着互联网和移动应用的快速发展,应用的并发量不断增加,传统单机架构已无法满足大规模的高并发需求。

为了应对百万级并发访问,现代化的架构设计需要具备高可用性、负载均衡能力和弹性伸缩特性。

LVS(Linux Virtual Server)、Nginx 和 Keepalived ,通过它们的有机结合,可以有效地应对高并发压力。

如何实现百万级负载架构

整体架构,如下图所示:

百万级并发架构设计:LVS+Nginx+Keepalived 方案详解!-mikechen

整体架构,分工如下:

LVS:前端四层负载均衡,将流量分发到 Nginx;

Nginx:中间七层负载均衡,反向代理到后端应用;

Keepalived:监控 LVS 和 Nginx,提供 VIP 漂移;

后端应用:业务服务器(如 Tomcat、Spring Boot)。

 

Nginx

Nginx:作为反向代理和负载均衡器,在 Web 服务器前提供请求转发、缓存和 SSL 协议处理等功能。

Nginx 可以作为前端的负载均衡器,利用轮询、最少连接等策略将流量均衡分发到后端 Web 服务器。

百万级并发架构设计:LVS+Nginx+Keepalived 方案详解!-mikechen

Upstream 配置:通过 upstream 配置,Nginx 可以管理一组服务器,并对其进行负载均衡。

upstream backend_servers {
    # 负载均衡算法
    # least_conn;
    # ip_hash;
    server <app_server_ip_1>:<app_port> weight=5;
    server <app_server_ip_2>:<app_port> weight=5;
    # ... 添加更多应用服务器
}

server {
    listen <PORT>;
    server_name <your_domain_or_VIP>;

    location / {
        proxy_pass http://backend_servers;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 其他 proxy 配置
    }
    # 其他 server 配置
}

Nginx 可以和 LVS 一起工作,提供七层负载均衡和高级流量管理。

 

LVS

LVS (Linux Virtual Server):提供四层负载均衡服务,负责将请求流量分发到多个后端 Web 服务器。

百万级并发架构设计:LVS+Nginx+Keepalived 方案详解!-mikechen

LVS 是内核级别的负载均衡,支持对 TCP 和 UDP 流量的高效转发。

它工作在操作系统的网络层,主要负责流量的分发和转发。

LVS工作原理

LVS 通过将客户端请求转发到多个真实服务器(Real Servers,简称 RS),实现负载均衡。

LVS 负责在请求和响应之间进行网络层的转发,通常采用轮询、最少连接、加权轮询等调度算法。

常用的调度算法:

  • 轮询(Round Robin,RR):请求平均分配给所有服务器。

  • 最少连接(Least Connections,LC):选择连接数最少的服务器。

  • 加权轮询(Weighted Round Robin,WRR):根据权重分配请求。

LVS 提供了多种工作模式:

  • NAT(Network Address Translation)模式:LVS 修改请求包和响应包的源 IP 和目标 IP,适用于内网小型集群。

  • DR(Direct Routing)模式:LVS 只修改目标 MAC 地址,后端服务器直接向客户端响应,性能最好,适用于同网段部署。

  • TUN(IP Tunnel)模式:LVS 使用 IP 隧道将流量传输给后端服务器,适用于跨网段部署。

LVS 作为负载均衡器,需要和 Keepalived 配合使用,以保证虚拟 IP 地址的高可用性。

Keepalived

Keepalived 是一款高可用性管理工具,使用 VRRP 协议实现主备 LVS 节点的 VIP 漂移。

当主节点故障时,VIP 会自动漂移到备节点,确保系统的高可用性。

百万级并发架构设计:LVS+Nginx+Keepalived 方案详解!-mikechen

Keepalived 通过 VRRP 协议在主备节点间共享虚拟 IP 地址。

主节点通过一定的优先级和健康检查机制,决定是否保持 VIP。

如果主节点失效,备节点会通过 Keepalived 获取 VIP,接管流量。

配置 Keepalived 时,需要为主备 LVS 服务器配置相同的 VIP 地址。

Keepalived 会定期检查 LVS 节点的健康状况,如果主节点出现故障,VIP 会迅速漂移到备节点。

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.1.100
    }
}

最后,整体如下:

+--------------------------+      +-------------------+       +------------------+
|    LVS Load Balancer     | ---- |   Nginx Frontend  | ----- |   Web Servers    |
|  (Virtual IP Address)     |      |  (Proxy & Cache)  |       |   (Application)  |
+--------------------------+      +-------------------+       +------------------+
        |                         |                        |
        +--------------------+    +--------------------+  +-----------------+
                            |    |                    |  |                 |
                       +----------+            +----------+                 |
                       | Keepalived|            | Keepalived|         +-----------+
                       | (Failover)|            | (Failover)|         |   Database|
                       +----------+            +----------+         +-----------+

通过 Keepalived 实现 LVS 和 Nginx 的主备切换,保障系统的高可用性。

通过 LVS 和 Nginx 提供四层和七层的流量分发,确保流量均衡地分配到各个 Web 服务器。

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复架构即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法