ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

网关架构:十万QPS网关接入层LVS+Keepalived(DR模式)架构

网关架构:十万QPS网关接入层LVS+Keepalived(DR模式)架构

十万QPS网关接入层:LVS+Keepalived(DR模式)架构

当业务量达到 10Wqps 时,单个 Nginx 已经很难稳定承接全部流量。接入层通常采用 LVS 作为前置四层负载均衡,Nginx 或其他网关作为后端 Real Server。这样既利用 LVS 的高吞吐能力,又保留 Nginx 对七层请求的处理能力。

接入层要同时解决三件事:负载均衡、故障隔离、失败切换。LVS 负责转发,ldirectord 或 Keepalived 负责健康检查和主备切换。

一、为什么需要 LVS

LVS 工作在内核态四层,请求只经过转发,不需要完整解析应用层协议,因此吞吐远高于 Nginx。Nginx 集群规模变大后,不能再让一个 Nginx 作为所有 Nginx 的前置调度器,否则它自己会成为瓶颈。

客户端

VIP

LVS Master

LVS Backup

Nginx / Gateway 1

Nginx / Gateway 2

LVS 的三种工作模式:

模式特点适用场景
NAT请求与响应都经过调度器小规模、内外网隔离
TUN隧道封装,响应不经过调度器跨机房、节点要求网卡
DR直接路由,修改 MAC 不修改 IP,响应直接回客户端生产环境最常用

二、LVS DR 的数据流

DR 模式下,Director Server 与 Real Server 必须处于同一物理网络。请求报文由调度器改写 MAC 地址后转发给 Real Server,响应报文则直接从 Real Server 回到客户端。

Real ServerDirector ServerClientReal ServerDirector ServerClient请求:CIP ->> VIP改写目标 MAC 为 Real Server响应:VIP ->> CIP,直接返回

这里会带来两个典型问题:

  1. Director 和 Real Server 同时配置 VIP,ARP 广播可能被多个节点响应;
  2. Real Server 使用 VIP 发出 ARP 请求时,路由器可能把 VIP 的 MAC 更新到 Real Server,导致后续请求绕过 Director。

解决办法是:

  • 将 VIP 配置在lo:0上,对外隐藏;
  • 设置arp_ignore = 1;
  • 设置arp_announce = 2。
net.ipv4.conf.all.arp_ignore=1net.ipv4.conf.all.arp_announce=2net.ipv4.conf.default.arp_ignore=1net.ipv4.conf.default.arp_announce=2net.ipv4.conf.lo.arp_ignore=1net.ipv4.conf.lo.arp_announce=2

三、配置负载调度器

实验环境如下:

主机IP
Director Server192.168.61.44
Web Server 1192.168.61.22
Web Server 2192.168.61.33
VIP192.168.61.45

Director 上的核心配置:

# 关闭防火墙systemctl stop firewalld.service setenforce0# 安装 ipvsadmyuminstallipvsadm.x86_64-y# 配置虚拟 IPcd/etc/sysconfig/network-scripts/cpifcfg-ens33 ifcfg-ens33:0vimifcfg-ens33:0# 删除 UUID、DNS 与网关,注意子网NAME=ens33:0DEVICE=ens33:0IPADDR=192.168.61.45NETMASK=255.255.255.255# 重启网络systemctl restart networkifupifcfg-ens33:0# 关闭重定向vi/etc/sysctl.conf net.ipv4.ip_forward=0net.ipv4.conf.all.send_redirects=0net.ipv4.conf.default.send_redirects=0net.ipv4.conf.ens33.send_redirects=0sysctl-pmodprobe ip_vs# 配置轮询调度ipvsadm-Cipvsadm-A-t192.168.61.45:80-srr ipvsadm-a-t192.168.61.45:80-r192.168.61.22:80-gipvsadm-a-t192.168.61.45:80-r192.168.61.33:80-gipvsadm-save>/etc/sysconfig/ipvsadm

四、配置 Real Server

Real Server 上安装 Web 服务,并将 VIP 配置到回环接口:

# 关闭防火墙systemctl stop firewalld.service setenforce0# 安装并启动 httpdyuminstallhttpd-ysystemctl start httpd# 创建测试页面vim/var/www/html/index.html this is192.168.61.22# 配置回环 VIPcd/etc/sysconfig/network-scripts/cpifcfg-lo ifcfg-lo:0vimifcfg-lo:0DEVICE=lo:0IPADDR=192.168.61.45NETMASK=255.255.255.255NETWORK=127.0.0.0 systemctl restart network# 添加主机路由routeadd-host192.168.61.45 dev lo:0# 调整 ARP 行为vim/etc/sysctl.conf net.ipv4.conf.all.arp_ignore=1net.ipv4.conf.all.arp_announce=2net.ipv4.conf.default.arp_ignore=1net.ipv4.conf.default.arp_announce=2net.ipv4.conf.lo.arp_ignore=1net.ipv4.conf.lo.arp_announce=2sysctl-p

第二台 Real Server 只改测试页内容和真实 IP 即可。

五、故障隔离:ldirectord

纯 LVS 不会主动探测 Real Server 是否存活。ldirectord 通过周期性请求检测节点状态,节点异常时从 IPVS 表中移除,恢复后重新加入。

checktimeout=20 checkinterval=10 fallback=127.0.0.1:80 autoreload=yes logfile="/var/log/ldirectord.log" quiescent=no virtual=192.168.60.200:80 real=192.168.60.132:80 gate real=192.168.60.144:80 gate fallback=127.0.0.1:80 gate service=http request="index.html" receive="Test Page" scheduler=rr protocol=tcp checktype=negotiate checkport=80 persistence=360 virtualhost=www.gaojf.com

quiescent=no表示节点失效时直接删除;quiescent=yes则把权重设为 0,保留连接跟踪记录。

六、失败切换:Keepalived + LVS

Keepalived 通过 VRRP 在主备 Director 之间切换 VIP,同时可以直接管理 LVS 的节点健康检查。

Keepalived Master
priority 100

VIP

Keepalived Backup
priority 50

Real Server 1

Real Server 2

Master 配置:

global_defs { router_id LVS_MASTER } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.10.10.100 } } virtual_server 10.10.10.100 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 10.10.10.12 80 { weight 1 TCP_CHECK { connect_timeout 3 retry 3 delay_before_retry 3 connect_port 80 } } }

Backup 配置只需将state改为BACKUP,priority降低,router_id修改为不同名称。

七、总结

高可用接入层的核心不是某个单一软件,而是职责组合:LVS 负责高速四层转发,ARP 参数保证 DR 模式正确工作,ldirectord 或 Keepalived 负责节点健康检查,VRRP 负责 Director 主备切换。理解 DR 的 MAC 改写和 ARP 抑制,是排查这类架构问题的基础。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进