如何通过调优 Keepalived 的 lvs_method 优化四层负载均衡转发性能

雨敏吖_5677

雨敏吖_5677

2026-05-24

777人浏览

原创

Keepalived的lvs_method应优先选DR模式,因其性能最优;次选NAT(需优化conntrack);TUN仅作兜底。三者分别对应IPVS的DR、NAT、TUN模型,差异在于转发路径、网络约束与开销。

如何通过调优 keepalived 的 lvs_method 优化四层负载均衡转发性能

Keepalived 本身不直接处理四层流量转发,真正执行 LVS 转发的是 Linux 内核的 IPVS 模块;lvs_method 是 Keepalived 配置中用于指定 IPVS 工作模式的关键参数,它的选择直接影响转发路径长度、连接保持能力、NAT 开销和后端服务器网络拓扑适配性。调优它不是“改个值就变快”,而是根据实际网络结构和业务特征匹配最轻量、最直接的转发路径。

明确 lvs_method 的三种取值与核心差异

Keepalived 的 lvs_method 实际对应 IPVS 的三种工作模型:DR(Direct Routing)、NAT(Network Address Translation)、TUN(IP Tunneling)。它们在数据包处理层面有本质区别:

  • DR 模式:负载均衡器仅修改请求报文的目标 MAC 地址为真实服务器的 MAC,IP 不变;响应由真实服务器直接返回客户端(绕过负载均衡器)。性能最高,但要求所有节点在同一物理网段,且真实服务器需配置 VIP 的 lo 接口并禁用 ARP 响应。
  • NAT 模式:负载均衡器同时修改请求报文的目标 IP 和端口(DNAT),并将响应报文的源 IP 和端口做反向转换(SNAT)。所有流量双向经过负载均衡器,适合跨网段部署,但会成为带宽和连接跟踪(conntrack)瓶颈。
  • TUN 模式:负载均衡器将原始 IP 包封装进新的 IP 包(隧道),发往真实服务器;服务器解封装后响应直回客户端。无需同网段,但增加封装/解封装开销,且需内核支持 IPIP 模块,运维复杂度高。

优先选用 DR 模式提升吞吐与并发

在满足前提条件下,DR 是四层转发性能最优解。它避免了 NAT 的地址转换和连接状态维护,内核路径最短,单机可轻松支撑 10 万+ 并发连接。启用前必须确认:

  • 所有 LVS 节点(Master/Backup)与 RealServer 在同一二层广播域(如 VLAN 或物理交换机直连);
  • RealServer 上已配置 VIP 到 loopback 接口(如 ip addr add 192.168.199.119/32 dev lo);
  • RealServer 禁用对 VIP 的 ARP 响应(echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 和 echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce);
  • Keepalived 配置中明确指定 lvs_method DR,并在 virtual_server 块中正确设置 real_server 的 IP 和端口。

慎用 NAT 模式,规避 conntrack 性能陷阱

若网络结构强制使用 NAT(如 RealServer 分布在不同子网),需重点优化内核 conntrack 行为,否则高并发下易出现丢包或新建连接延迟:

  • 增大连接跟踪表上限:net.netfilter.nf_conntrack_max = 655360;
  • 缩短超时时间以快速释放空闲连接:net.netfilter.nf_conntrack_tcp_timeout_established = 300;
  • 关闭对非 SYN 包的连接跟踪(适用于纯转发场景):net.netfilter.nf_conntrack_tcp_be_liberal = 1;
  • 确保负载均衡器 CPU 核心数充足,conntrack 是强 CPU 密集型操作。

避免无谓封装,TUN 模式仅作兜底方案

TUN 模式因额外 IP 封装带来约 20–30μs 延迟,且隧道 MTU 易引发分片,实际生产中极少作为首选。仅在以下情况考虑:

  • RealServer 完全无法调整网络配置(如云厂商托管实例,不允许配置 lo:VIP 或禁用 ARP);
  • DR 和 NAT 均不可行,且对延迟不敏感(如后台批处理接口);
  • 已启用内核 ipip 模块并验证隧道连通性(modprobe ipip + ip tunnel add tunl0 mode ipip remote local )。

选对 lvs_method 是四层性能调优的第一步,它决定了流量是否绕过内核协议栈冗余处理。DR 最快但约束多,NAT 最通用但需防 conntrack 瓶颈,TUN 最灵活但代价明确。没有“万能模式”,只有“最适合当前网络拓扑的模式”。

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

80

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

60

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

200

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

140

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

120

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

80

15

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

2026.10.22

60

10

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

2026.10.22

80

25

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

2026.10.22

40

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习