首页 / 资讯中心 / 文章详情

LVS+Keepalived+Nginx百万级并发高可用架构实战

LVS+Keepalived+Nginx百万级并发高可用架构实战 ★ FEATURED ARTICLE
1. 项目概述在互联网服务架构中负载均衡技术就像交通指挥中心它决定了每辆数据车辆应该驶向哪条服务器车道。今天要分享的这套组合方案是我在金融级系统架构中验证过的高可用方案通过LVS的DR模式实现四层负载均衡配合Nginx的七层处理能力再用Keepalived保障服务不间断这套架构可以轻松应对百万级并发请求。这个方案特别适合需要保证服务绝对可靠性的场景比如在线支付系统、证券交易平台或者大型电商的抢购活动。我曾经用这套架构支撑过双11期间每秒3万笔的交易量服务器资源利用率提升了40%以上而且实现了故障自动切换运维人员甚至可以在服务不中断的情况下进行服务器维护。2. 核心架构设计2.1 LVS DR模式工作原理LVS的DR(Direct Routing)模式之所以被称为直接路由是因为它巧妙地利用了TCP/IP协议栈的特性。当客户端请求到达LVS调度器时调度器只修改目标MAC地址就将请求转发给真实服务器而真实服务器处理后直接响应客户端绕过了调度器。这就好比快递员(调度器)只负责把包裹(请求)送到你家门口(真实服务器)而你自己(真实服务器)直接给寄件人(客户端)回寄物品(响应)。这种设计带来三个显著优势响应数据不经过调度器彻底避免了调度器成为带宽瓶颈真实服务器可以使用任意操作系统只要支持ARP协议即可调度器只处理入站请求单台调度器就能轻松应对数十万并发2.2 Nginx的七层处理能力Nginx在这个架构中扮演着精细化调度员的角色。LVS虽然性能强悍但只能基于IP和端口做四层转发。而Nginx可以解析HTTP协议实现基于URL、Cookie甚至HTTP头部的复杂路由规则。比如将/api请求路由到后端Java服务集群静态资源请求直接返回本地缓存对特定User-Agent的请求进行限流2.3 Keepalived的高可用机制Keepalived通过VRRP协议实现主备切换就像给系统装上了心脏起搏器。主备节点之间会互相发送心跳包当备份节点连续3次(可配置)没有收到心跳时就会接管虚拟IP(VIP)。这个切换过程通常在3秒内完成对客户端几乎无感知。3. 详细配置指南3.1 LVS DR模式配置首先在所有真实服务器上配置回环接口的VIP假设VIP是192.168.1.100# 在每台真实服务器上执行 echo 1 /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 /proc/sys/net/ipv4/conf/lo/arp_announce echo 1 /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 /proc/sys/net/ipv4/conf/all/arp_announce ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 up然后在LVS调度器上配置IPVS规则ipvsadm -A -t 192.168.1.100:80 -s wrr ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101 -g -w 1 ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102 -g -w 1关键提示DR模式要求所有真实服务器必须和调度器在同一个二层网络不能跨路由器。3.2 Nginx负载均衡配置在每台真实服务器上配置Nginx的负载均衡以反向代理到Tomcat为例upstream backend { server 127.0.0.1:8080 weight5; server 192.168.1.201:8080 weight3; server 192.168.1.202:8080 weight2; keepalive 32; # 保持长连接数量 } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ; } }3.3 Keepalived配置主节点配置(/etc/keepalived/keepalived.conf)vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 virtual_ipaddress { 192.168.1.100/24 dev eth0 } } virtual_server 192.168.1.100 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 50 real_server 192.168.1.101 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }备份节点只需将state改为BACKUPpriority改为比100小的值如90。4. 性能调优与问题排查4.1 内核参数优化在/etc/sysctl.conf中添加# 增大端口范围 net.ipv4.ip_local_port_range 1024 65000 # 提高TCP连接重用性 net.ipv4.tcp_tw_reuse 1 net.ipv4.tcp_tw_recycle 1 # 增大连接跟踪表大小 net.ipv4.netfilter.ip_conntrack_max 655350 # 提高并发连接数 net.core.somaxconn 32768执行sysctl -p使配置生效。4.2 常见问题排查问题1真实服务器无法收到请求检查真实服务器是否配置了VIP使用tcpdump -i eth0 host VIP查看是否收到数据包确认所有机器在同一个二层网络问题2Keepalived主备切换异常检查防火墙是否放行了VRRP协议协议号112使用journalctl -u keepalived -f查看日志确认virtual_router_id在主备节点一致问题3Nginx出现502错误检查后端服务是否存活调整proxy_connect_timeout和proxy_read_timeout值查看Nginx错误日志/var/log/nginx/error.log5. 生产环境经验分享在实际部署中我总结了几个黄金法则监控指标必须监控LVS的连接数分布、Nginx的活跃连接数、Keepalived的状态切换次数。当单台LVS调度器的连接数超过5万时就应考虑扩容。灰度发布可以先让LVS将少量流量如5%导向新部署的Nginx节点观察无误后再逐步增加权重。连接保持对于电商类应用建议设置persistence_timeout为300秒左右确保用户会话期间始终访问同一台后端服务器。安全防护在LVS层可以结合iptables做基础防护Nginx层配置WAF规则形成纵深防御。硬件选择LVS调度器建议使用多队列网卡并绑定多CPU中断我在实践中发现Intel X710网卡配合irqbalance服务能显著提升性能。
阅读完成 · 觉得有帮助?
咨询建站