Appearance
Hello LVS
LVS(Linux Virtual Server)本身是 Linux 内核中的一个负载均衡模块,而 ipvsadm 和 Keepalived 是用户态的管理工具,它们分别以不同的方式管理和配置 LVS。本文关于 LVS 的配置是基于 Keepalived 的。
LVS 提供了多种负载均衡模式,其中 NAT 模式(Network Address Translation)和 DR 模式(Direct Routing)是两种最常用的实现方式。它们在工作原理、性能和适用场景上有显著差异。以下是对这两种模式的详细介绍和对比:
1. LVS NAT 模式
1.1. 工作原理
NAT 模式基于网络地址转换(Network Address Translation)。客户端发送请求到 LVS 的虚拟 IP(VIP),LVS 负载均衡器接收请求后,根据调度算法选择一个后端真实服务器(Real Server)。LVS 修改数据包的目标地址(DNAT),将请求转发给选中的 Real Server。Real Server 处理请求后,将响应返回给 LVS,LVS 再通过源地址转换(SNAT)将响应发回客户端。
数据流向:客户端 → LVS → Real Server → LVS → 客户端。
1.2. 特点
- 双向流量经过 LVS:请求和响应都必须经过负载均衡器;
- 后端服务器无需特殊配置:Real Server 的网关需指向 LVS,LVS 负责处理所有流量;
- 地址转换:LVS 修改数据包的 IP 地址(目标 IP 和源 IP);
1.3. 配置示例
1.3.1. Director
配置双网卡
Bashallow-hotplug ens33 iface ens33 inet static address 10.10.0.11 # 外网 IP netmask 255.255.255.0 gateway 10.10.0.1 dns-nameservers 218.85.152.99 allow-hotplug ens36 iface ens36 inet static address 192.168.0.11 # 内网 IP netmask 255.255.255.0假设 Director 外网 VIP 为
10.10.0.10。/etc/keepalived/keepalived.conf配置:Nginx... virtual_server 10.10.0.10 80 { # Director 外网 VIP delay_loop 6 lb_algo rr # 轮询算法 lb_kind NAT # NAT 模式 protocol TCP real_server 192.168.0.12 80 { # Real Server 1 IP weight 1 } real_server 192.168.0.13 80 { # Real Server 2 IP weight 1 } } ...启用 IP 转发:
Bashecho "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.confBashsudo sysctl -p
1.3.2. Real Server
Real Server 1 为例:
将网关设置为 Director 的内网 IP 地址:
INIallow-hotplug ens36 iface ens36 inet static address 192.168.0.12 netmask 255.255.255.0 gateway 192.168.0.11 # Director 内网 IP1
2
3
4
5
1.4. 优点
- 安全性高:Real Server 不直接暴露给客户端,LVS 充当防火墙角色;
- 支持端口映射:可以将 VIP 的端口映射到 Real Server 的不同端口;
1.5. 缺点
- 性能瓶颈:请求和响应都经过 LVS,LVS 成为性能瓶颈,尤其在高流量场景下;
- 带宽限制:LVS 需要处理双向流量,对带宽要求较高;
- 扩展性差:LVS 的处理能力限制了集群规模;
2. LVS DR 模式
2.1. 工作原理
DR 模式基于直接路由(Direct Routing)。客户端发送请求到 LVS 的虚拟 IP(VIP),LVS 根据调度算法选择一个 Real Server。LVS 修改数据包的 MAC 地址,将请求直接转发给选中的 Real Server(不修改 IP 地址)。Real Server 接收到请求后,直接将响应发回客户端(绕过 LVS)。
数据流向:客户端 → LVS → Real Server → 客户端。
2.2. 特点
- 单向流量经过 LVS:只有请求经过负载均衡器,响应直接由 Real Server 返回客户端;
- 后端服务器需配置 VIP:所有 Real Server 必须绑定 VIP(通常通过环回接口
lo),并抑制 ARP 响应; - MAC 地址转发:LVS 只修改数据链路层的 MAC 地址,IP 层保持不变;
2.3. 配置示例
2.3.1. Director
/etc/keepalived/keepalived.conf配置:Nginx... virtual_server 10.10.0.10 80 { # Director 外网 VIP delay_loop 6 lb_algo rr # 轮询算法 lb_kind DR # DR 模式 protocol TCP real_server 192.168.0.12 80 { # Real Server 1 IP weight 1 } real_server 192.168.0.13 80 { # Real Server 2 IP weight 1 } } ...差异对比
diffvirtual_server 10.10.0.10 80 { # Director 外网 VIP delay_loop 6 lb_algo rr # 轮询算法 - lb_kind NAT # NAT 模式 + lb_kind DR # DR 模式 protocol TCP real_server 192.168.0.12 80 { # Real Server 1 IP weight 1 ...
2.3.2. Real Server
在 Real Server 上绑定 Director VIP 到环回接口
Bashsudo ip addr add 10.10.0.10/32 dev lo抑制 ARP 响应
Bashcat << EOF | sudo tee -a /etc/sysctl.conf net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 EOFBashsudo sysctl -p
2.4. 优点
- 高性能:响应流量不经过 LVS,减轻负载均衡器压力,吞吐量更高;
- 扩展性强:LVS 只处理请求转发,适合大规模集群;
- 低延迟:数据路径更短,响应速度快;
2.5. 缺点
- 网络要求:LVS 和 Real Server 必须在同一物理网络(同一二层网络),不支持跨网段;
- 安全性较低:Real Server 直接响应客户端,暴露在外部网络中;
3. 详细对比
| 特性 | NAT 模式 | DR 模式 |
|---|---|---|
| 工作层级 | IP 层(L3),地址转换 | 数据链路层(L2),MAC 地址转发 |
| 网络要求 | LVS 和 Real Server 可不同网段 | 必须在同一二层网络 |
| 流量路径 | 请求和响应都经过 LVS | 仅请求经过 LVS,响应直达客户端 |
| 端口映射 | 支持 | 不支持 |
| 性能 | 较低(LVS 为瓶颈) | 较高(LVS 负载低) |
| 安全性 | 高(Real Server 不暴露) | 低(Real Server 直接响应客户端) |
| 后端配置 | 只需设置网关指向 LVS | 需绑定 VIP 并抑制 ARP |
| 适用规模 | 小型集群 | 大型集群 |