lvs_support并非Keepalived合法配置参数,属误传概念;其功能实为编译期决定、运行期自动启用,需通过ipvsadm -Ln验证LVS是否生效。

lvs_support 并不是 Keepalived 配置文件中的合法参数,官方文档和源码中均不存在 lvs_support 这一配置项。它属于常见误传或混淆概念——可能源于对 Keepalived 与 LVS 协同机制的误解,或是将旧版(如 v1.2.x 之前)中某些内部编译宏、调试开关或第三方补丁的命名错误地当作配置参数使用。
实际部署中,Keepalived 对 LVS 的支持是编译期决定、运行期自动启用的,无需、也无法通过配置文件中的某个开关来“开启/关闭 LVS 支持”。
正确理解 Keepalived 与 LVS 的兼容逻辑
Keepalived 自 v1.2.0 起已深度集成 IPVS 模块管理能力,其行为取决于:
- ✅ 是否启用
--with-linux-kernel-dir编译选项(历史版本需显式指定内核头文件路径) - ✅ 运行时系统是否加载了
ip_vs及相关模块(如ip_vs_rr,ip_vs_wrr,ip_vs_sh) - ✅ Keepalived 启动时能否访问
/proc/net/ip_vs和/dev/kmsg等内核接口
⚠️ 若在旧版内核(如 CentOS 6 / kernel 2.6.32)上部署失败,问题通常出在模块缺失、权限限制或内核配置项未启用,而非配置参数缺失。
兼容旧内核的关键调优动作
1. 确保内核支持 IPVS
检查并加载必要模块:
modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh lsmod | grep ^ip_vs
若报错 Module not found,需确认内核已编译 IPVS 支持(CONFIG_IP_VS=y/m),或安装对应内核-devel 包后重新编译 keepalived。
2. 使用兼容性更强的 Keepalived 版本
- kernel 2.6.32(CentOS 6)→ 推荐 keepalived-1.2.24 或 1.3.5(经广泛验证)
- kernel 3.10(CentOS 7 初期)→ keepalived-1.3.9+ 更稳妥
避免使用 v2.0+(依赖较新 netlink 接口,旧内核不兼容)
3. 关键配置项替代“lvs_support”的真实作用点
虽然没有 lvs_support,但以下配置直接影响 LVS 功能可用性:
-
virtual_server块必须存在且语法正确(含delay_loop、lb_algo、lb_kind、real_server) -
lb_kind DR/NAT/TUN必须与网络拓扑匹配(DR 模式最常用,也最易因 ARP 设置失败而“看似不工作”) -
persistence_timeout和protocol TCP/UDP需明确指定,否则默认值可能触发旧内核兼容问题
示例(DR 模式最小可行配置):
virtual_server 192.168.10.100 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 192.168.10.101 80 {
weight 1
TCP_CHECK { connect_timeout 3 }
}
}4. 内核参数适配(尤其针对 DR 模式)
旧内核对 ARP 行为更敏感,必须设置:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
并写入 /etc/sysctl.conf 持久化,防止重启失效。
验证是否真正启用 LVS 功能
不要依赖日志中是否有“lvs_support: yes”类字样(该字样不存在)。应检查:
-
ipvsadm -Ln是否列出虚拟服务和真实服务器 -
/proc/net/ip_vs文件是否存在且非空 -
systemctl status keepalived中无IPVS initialization failed报错 -
journalctl -u keepalived | grep -i "ipvs\|virtual_server"查看加载详情
不复杂但容易忽略:所谓“调优 lvs_support”,本质是确保编译、内核、配置、权限四者闭环就绪。删掉任何臆想参数,盯住 ipvsadm -Ln 的输出,就是最真实的兼容性标尺。

















