本文主要对照 LVS-NAT、DPVS-FullNAT(FNAT)与 ENAT 在报文源/目的地址上的差异,并记录 Keepalived 将详细日志输出到独立文件的配置方式。可与 rp-filter-in-lvs、dpvs-install-toa 等文对照。
背景说明
负载均衡模式不同,RS 是否与 LB 同二层、是否需要 TOA/CTK、回程是否经过 LB 都不同。下面用 CIP/VIP/RIP/LIP 记法描述(客户端 / 虚服务 / 真实服务器 / LB 本地地址)。
LVS-NAT
| 阶段 | 源 → 目的(概要) |
|---|---|
| 客户端 → LB | CIP → VIP |
| LB → RS | CIP → RIP |
| RS → LB | RIP → CIP |
| LB → 客户端 | VIP → CIP |
要点:RS 默认网关通常必须是 LB,回程才能被改写;因此 LB 与 RS 往往同网段/同 VLAN。吞吐受 LB 回程改写能力限制。
DPVS-FullNAT(FNAT)
LB 维护两条连接与 session:
- 外侧:CIP ↔ VIP
- 内侧:LIP ↔ RIP
RS 看到的源地址常为 LIP;若要业务拿到真实 CIP,需在 RS 加载 TOA 等模块。
优点:内侧只需三层可达,便于跨网段。 代价:session 表开销;依赖 TOA 还原客户端地址。
ENAT(简述)
与 FNAT 类似存在 LIP 与 session,但 RS 侧通过 CTK 一类模块在回程直接改写为 VIP→CIP,应答可不回 LB。若 CTK 异常,行为可能退化成仍回 LIP(更接近 FNAT)。细节以实现与厂商文档为准。
模式选择直觉
| 诉求 | 更常考虑 |
|---|---|
| 简单、同网段 | NAT |
| 跨网段、高性能(DPVS) | FNAT + TOA |
| 直回客户端减 LB 压力 | ENAT(实现与运维更复杂) |
Keepalived 日志落盘
在 /etc/sysconfig/keepalived(路径因发行版而异)中常见:
KEEPALIVED_OPTIONS="-D -d -S 0"
-D:详细日志-d:转储配置相关信息-S 0:使用local0facility(示例)
rsyslog 示例:
local0.* /var/log/keepalived.log
然后:
systemctl restart rsyslog
systemctl restart keepalived
验证:tail -f /var/log/keepalived.log 在切换 VIP 时应有 VRRP 相关记录。注意日志磁盘与轮转。
注意事项
- NAT/FNAT/ENAT 名词在不同项目中细节不一,以当前软件版本文档为准。
- 生产修改 Keepalived 选项前先在测试环境确认 facility 不与其它服务冲突。
- 内网主机名与 IP 已脱敏。