1. LVS DR 模式与 NAT 模式核心区别
LVS(Linux Virtual Server)的 DR(Direct Routing)模式和 NAT(Network Address Translation)模式是两种最常用的负载均衡模式,核心差异体现在数据转发方式、网络路径、性能、部署要求等维度,以下是详细对比:
| 对比维度 | DR 模式(直接路由) | NAT 模式(网络地址转换) |
|---|---|---|
| 数据转发原理 | 仅修改数据包的 MAC 地址,IP 头不变;Real Server 直接将响应包发给客户端,不经过 LVS 节点 | 改写数据包的 IP 地址(请求时目标 IP 改为 Real Server,响应时源 IP 改为 VIP);所有请求 / 响应都经过 LVS 节点转发 |
| 网络路径 | 客户端 → LVS(仅改写 MAC)→ Real Server → 客户端(直连) | 客户端 → LVS → Real Server → LVS → 客户端 |
| 端口支持 | 可转发任意端口(无需端口映射) | 需做端口映射(LVS 端口→Real Server 端口),单节点端口数受限 |
| 性能 | 性能极高(LVS 仅处理请求包的 MAC 改写,无 IP 改写 / 转发开销;响应包不回传),支持 10 万 + 并发 | 性能较低(LVS 是所有流量的瓶颈,响应包需二次转发),并发量受 LVS 节点带宽 / 性能限制 |
| Real Server 网络要求 | 1. Real Server 必须与 LVS 节点在同一物理网络(二层可达);2. Real Server 需配置 VIP 的 lo 回环地址(避免 ARP 冲突);3. 关闭 Real Server 的 ARP 响应(防止 VIP 暴露) | 1. Real Server 可与 LVS 节点跨网段(只需路由可达);2. Real Server 的网关必须指向 LVS 节点;3. 无需配置 VIP 到 lo 口 |
| 部署复杂度 | 稍高(需配置 ARP 抑制、lo 口 VIP) | 简单(仅需配置 LVS 转发规则 + Real Server 网关) |
| 扩展性 | 支持大规模 Real Server(无带宽瓶颈) | 扩展性差(LVS 节点是流量瓶颈) |
| 适用场景 | 高并发、大流量场景(如你的 Doris FE 节点负载均衡) | 小规模、Real Server 跨网段、需端口映射的场景 |
2.部署
本文采用DR模式部署
2.1 节点规划
|----------------|-----|------------|-------|-----|
| 主机ip | lvs | keepalived | doris | vip |
| 172.21.241.165 | ⭐ | ⭐ | | |
| 172.21.241.78 | ⭐ | ⭐ | | |
| 172.21.241.133 | | | ⭐ | |
| 172.21.241.54 | | | ⭐ | |
| 172.21.241.120 | | | ⭐ | |
| 172.21.241.188 | | | | ⭐ |
2.2 lvs节点配置
2.2.1 安装 ipvsadm、keepalived
bash
yum install -y ipvsadm keepalived
2.2.2 开启路由转发
bash
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
2.2.3 LVS DR 模式核心配置
(1)配置 VIP(虚拟 IP)
在两台 LVS 节点上绑定 VIP 到 lo:0(DR 模式要求 VIP 仅在 LVS 节点可见,Real Server 需抑制 ARP 响应):
bash
# 绑定VIP到lo:0
ifconfig lo:0 172.21.241.188 netmask 255.255.255.255 broadcast 172.21.241.188 up
# 添加路由(避免VIP路由异常)
route add -host 172.21.241.188 dev lo:0
# 配置开机自启(写入/etc/rc.local)
echo "ifconfig lo:0 172.21.241.188 netmask 255.255.255.255 broadcast 172.21.241.188 up" >> /etc/rc.local
echo "route add -host 172.21.241.188 dev lo:0" >> /etc/rc.local
2.2.4 配置keepalived
(1)主节点
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface eth0 # 替换为实际网卡名(如ens33)
virtual_router_id 51
priority 100 # 主节点优先级更高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.21.241.188 # VIP绑定到网卡
}
}
# 配置ipvsadm规则(与前文一致)
virtual_server 172.21.241.188 9031 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 172.21.241.133 9031 {
weight 1
TCP_CHECK {
connect_port 9031
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.21.241.54 9031 {
weight 1
TCP_CHECK {
connect_port 9031
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.21.241.120 9031 {
weight 1
TCP_CHECK {
connect_port 9031
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
virtual_server 172.21.241.188 8031 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
real_server 172.21.241.133 8031 {
weight 1
TCP_CHECK {
connect_port 8031
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.21.241.54 8031 {
weight 1
TCP_CHECK {
connect_port 8031
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.21.241.120 8031 {
weight 1
TCP_CHECK {
connect_port 8031
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
(2)备节点
仅需修改state BACKUP、priority 90,router_id LVS_BACKUP其余与主节点一致。
(3)启动keepalived
bash
systemctl enable keepalived && systemctl start keepalived
2.3 Real Server(Doris FE)配置
DR 模式要求 Real Server 抑制 ARP 响应(避免 VIP 被客户端直接解析到 Real Server),并绑定 VIP 到 lo:0:
bash
# 1. 配置ARP抑制(关键)
echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_ignore = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce = 2" >> /etc/sysctl.conf
sysctl -p
# 2. 绑定VIP到lo:0(仅回环可见)
ifconfig lo:0 172.21.241.188 netmask 255.255.255.255 broadcast 172.21.241.188 up
route add -host 172.21.241.188 dev lo:0
# 3. 开机自启配置
echo "ifconfig lo:0 172.21.241.188 netmask 255.255.255.255 broadcast 172.21.241.188 up" >> /etc/rc.local
echo "route add -host 172.21.241.188 dev lo:0" >> /etc/rc.local
2.4 验证配置
2.4.1 查看 LVS 规则是否生效
bash
ipvsadm -Ln
# 预期输出包含:
# TCP 172.21.241.188:9031 rr
# -> 172.21.241.133:9031 Gateway 1 0 0
# -> 172.21.241.54:9031 Gateway 1 0 0
# -> 172.21.241.120:9031 Gateway 1 0 0
# TCP 172.21.241.188:8031 rr
# -> 172.21.241.133:8031 Gateway 1 0 0
# -> 172.21.241.54:8031 Gateway 1 0 0
# -> 172.21.241.120:8031 Gateway 1 0 0
2.4.2 测试端口转发
从客户端执行多次telnet 172.21.241.188 9031或curl 172.21.241.188:8031/api/bootstrap,查看 Doris FE 日志确认请求轮询到不同节点。