百万并发实战:Nginx +LVS+ Keepalived架构方案!

高并发是大型架构的核心,下面我重点详解百万并发实战方案@mikechen

百万高并发

在互联网服务日益增长的今天,高并发、大流量场景已成为大型网站与分布式应用必须面对的挑战。

为了保证服务的高可用性、可扩展性与性能,常见的架构方案是将负载均衡与反向代理相结合。

百万并发实战中,Nginx + LVS + Keepalived 架构是一种常见的高并发、高可用解决方案。

百万并发实战:Nginx +LVS+ Keepalived架构方案!-mikechen

其主要思路是利用LVS(Linux Virtual Server)做四层负载均衡,Keepalived负责LVS的高可用管理(比如VIP漂移)。

而Nginx作为七层负载均衡和反向代理,处理具体的HTTP/HTTPS请求和业务逻辑。

 

LVS负载入口

第一层 (负载均衡入口):LVS 集群 + Keepalived。

百万并发实战:Nginx +LVS+ Keepalived架构方案!-mikechen

对外暴露 VIP,将请求分发到 Nginx 集群。

# IPVS virtual service for HTTP
virtual_server 10.0.0.100 80 {
    delay_loop 5
    lb_algo rr            # rr | lc | wlc | dh | sh | sed | nq
    lb_kind DR            # DR (DIRECT), NAT, TUN
    persistence_timeout 300
    protocol TCP

    real_server 10.0.0.11 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            connect_port 80
        }
    }

    real_server 10.0.0.12 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            connect_port 80
        }
    }
}

由于LVS,工作在第 4 层(传输层),通过 IPVS 内核模块实现转发。

具备极高的吞吐与低延迟,适合作为集群入口来承载海量并发连接。

 

Keepalived(高可用与健康检查)

Keepalived 是一个基于 VRRP (Virtual Router Redundancy Protocol), 协议的开源软件。

它通过选举机制在多台服务器中,指定一个 Master (主) 节点、和多个 Backup (备) 节点。

Keepalived 会为 Master 节点绑定一个虚拟 IP 地址,所有外部请求都通过这个 VIP 访问。

如下图所示:

百万并发实战:Nginx +LVS+ Keepalived架构方案!-mikechen

# 检查 Nginx 状态的脚本
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight -20 # 如果 Nginx 宕机,降低优先级
}

Master 、和 Backup 节点之间,会不断发送 VRRP 协议的心跳包。

如果 Master 节点宕机,Backup 节点将检测不到心跳。

此时,它会接管 VRRP IP,自动成为新的 Master,继续提供服务。

整个过程对用户是透明的,实现了服务的无缝切换。

 

Nginx(七层反向代理与应用交付)

Nginx 部署在多台服务器上,作为反向代理服务器接收外部请求。

并根据预设的负载均衡算法(如轮询、加权轮询、IP Hash 等),将请求分发到后端的应用服务器集群。

百万并发实战:Nginx +LVS+ Keepalived架构方案!-mikechen

http {
    upstream backend_servers {
        server 192.168.1.100 weight=5; # 后端服务器1
        server 192.168.1.101 weight=5; # 后端服务器2
        server 192.168.1.102 weight=5; # 后端服务器3
    }

    server {
        listen 80;
        server_name your_domain.com;
    }
}

这不仅能分散请求压力,还能隐藏后端服务器的真实 IP 地址,提升安全性。

评论交流
    说说你的看法