LVS-DR部署

发布于:2025-05-29 ⋅ 阅读:(21) ⋅ 点赞:(0)

目录

基本概念

‌一、LVS-DR 的核心设计思想‌

‌1.1 核心目标‌

‌1.2 DR 模式的本质‌

‌二、网络分层视角下的 LVS-DR‌

‌2.1 OSI 模型定位‌

‌2.2 对比其他 LVS 模式‌

‌三、数据包流向的深度拆解‌

‌3.1 请求流程(CIP → VIP)‌

‌3.2 响应流程(VIP → CIP)‌

‌四、ARP 抑制的核心原理‌

‌4.1 ARP 冲突的根本原因‌

‌4.2 Linux 内核的 ARP 控制参数‌

‌参数 1:arp_ignore‌

‌参数 2:arp_announce‌

‌4.3 DR 模式下的 ARP 抑制配置‌

‌效果验证‌

‌五、内核层面的实现机制‌

‌5.1 ip_vs 内核模块‌

‌5.2 转发路径优化‌

‌5.3 性能对比数据‌

‌六、LVS-DR 的拓扑限制与解决方案‌

‌6.1 严格网络要求‌

‌6.2 跨 VLAN 部署方案‌

‌七、进阶思考:为什么不能使用普通负载均衡器?‌

‌7.1 传统负载均衡器的瓶颈‌

‌7.2 LVS-DR 的突破‌

‌八、总结:LVS-DR 的哲学‌

案例部署

一、部署架构规划‌

‌二、Director 配置步骤‌

‌三、Real Server 配置步骤‌

‌四、关键验证方法‌

‌五、生产环境注意事项‌


基本概念


一、LVS-DR 的核心设计思想

1.1 核心目标

  • 性能最大化‌:避免 Director 成为响应流量的瓶颈(与 NAT 模式对比)
  • 透明性‌:客户端无法感知后端集群的存在(所有响应看似直接来自 VIP)
  • 网络兼容性‌:支持跨 VLAN 部署(需特定网络配置)

1.2 DR 模式的本质

  • 二层重定向‌:Director 仅修改数据帧的 ‌MAC 地址‌(目标 MAC 改为 Real Server 的 MAC)
  • IP 层无变化‌:客户端请求的源 IP(CIP)和目标 IP(VIP)在整个转发过程中 ‌始终不变
  • Real Server 的 VIP 隐身‌:通过 ARP 抑制技术,确保只有 Director 响应 VIP 的 ARP 请求

二、网络分层视角下的 LVS-DR

2.1 OSI 模型定位

层级 LVS-DR 的操作
物理层 无特殊要求
数据链路层 Director 修改目标 MAC 地址 → ‌关键操作层
网络层 IP 包头(CIP→VIP)始终不变
传输层 TCP/UDP 端口无修改(除非配置端口映射)
会话层以上 完全透明

2.2 对比其他 LVS 模式

模式 层级 修改内容 性能瓶颈点
NAT 网络层 修改目标 IP + 端口 Director 的出站流量
TUN 网络层 IP-in-IP 封装 隧道解封装开销
DR 数据链路层 仅修改 MAC 地址 无(理论线速转发)

三、数据包流向的深度拆解

3.1 请求流程(CIP → VIP)

  1. 客户端发送 SYN 包‌:

    Ethernet Header: SRC_MAC=Client_MAC, DST_MAP=Gateway_MAC 
    IP Header: SRC_IP=CIP, DST_IP=VIP 
    TCP Header: SYN Flag 
  2. Director 接收数据包‌:

    • 确认目标 IP 为 VIP 且端口匹配服务
    • 根据 IPVS 规则选择 Real Server(假设选择 RS1)
  3. Director 重写数据帧‌:

    Ethernet Header:
     SRC_MAC=Director_MAC(DIP 的 MAC)
     DST_MAC=RS1_MAC(通过 ARP 表查找 RS1 的 MAC) 
    IP Header: 保持 CIP→VIP 不变 → ‌**关键区别点!**‌ 
  4. RS1 接收数据包‌:

    • 检查目标 IP 是否为本机 IP → 发现 VIP 绑定在 lo 接口
    • 内核将数据包传递给监听在 VIP:Port 的服务(如 Nginx)

3.2 响应流程(VIP → CIP)

  1. RS1 生成 SYN-ACK 响应‌:

    Ethernet Header: SRC_MAC=RS1_MAC, DST_MAC=Gateway_MAC(非 Director!) 
    IP Header: SRC_IP=VIP, DST_IP=CIP 
    TCP Header: SYN-ACK Flag 
  2. 数据包直接发送到客户端‌:

    • RS1 通过默认路由将响应发送到网关
    • Director 完全不参与响应路径 → ‌响应带宽无限制

四、ARP 抑制的核心原理

4.1 ARP 冲突的根本原因

  • 正常情况‌:当 VIP 绑定在 Real Server 的物理网卡时,RS 会主动响应 VIP 的 ARP 请求 → 导致局域网内多个设备(Director + RS)宣称拥有 VIP
  • 后果‌:客户端可能直接与 RS 通信,绕过 Director 的调度 → 破坏集群逻辑

4.2 Linux 内核的 ARP 控制参数

参数 1:arp_ignore
  • 定义‌:控制是否响应目标 IP 不属于本地物理接口的 ARP 请求
  • 关键值‌:
    • 0(默认):只要本地有任意接口拥有该 IP,就响应 ARP
    • 1:仅在查询的目标 IP 属于接收 ARP 请求的接口时才响应
参数 2:arp_announce
  • 定义‌:控制发送 ARP 应答时使用的源 IP 地址
  • 关键值‌:
    • 0(默认):可使用任意本地接口的 IP 作为源 IP
    • 2:优先使用与目标 IP 在同一子网的本地接口 IP
4.3 DR 模式下的 ARP 抑制配置
# 在 Real Server 上配置 
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 

# 特殊处理:针对 lo 接口的 ARP 行为 
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
效果验证
# 在其他主机上执行 
arping arping -I eth0 192.168.20.100 

# 正确结果: 
# 只有 Director 响应 ARP 请求 
# Real Server 保持沉默 

五、内核层面的实现机制

5.1 ip_vs 内核模块

  • 功能‌:实现 LVS 的核心转发逻辑
  • 工作位置‌:位于 Netfilter 的 NF_INET_LOCAL_IN 钩子点
  • 处理流程‌:
    1. 检查目标 IP 是否匹配虚拟服务(VIP:Port)
    2. 根据调度算法选择 Real Server
    3. 调用 dev_queue_xmit() 直接转发修改后的数据帧

5.2 转发路径优化

  • 绕过 TCP/IP 协议栈‌:Director 不会对数据包进行完整解封装,仅重写 MAC 地址 → 减少 CPU 开销
  • 无连接跟踪‌:与 NAT 不同,DR 模式无需维护连接状态表 → 内存消耗更低

5.3 性能对比数据

指标 DR 模式 NAT 模式
最大并发连接数 100 万+ 10 万~50 万
吞吐量(64B 包) 线速(取决于网卡) 受限于 CPU
延迟 增加 ≈0.1μs 增加 ≈2μs

六、LVS-DR 的拓扑限制与解决方案

6.1 严格网络要求

  1. 同一广播域‌:Director 和 Real Server 必须位于同一二层网络(无路由器隔离)
  2. VIP 不可路由‌:客户端必须通过二层可达性访问 VIP(通常 VIP 需与客户端同网段)

6.2 跨 VLAN 部署方案

  • 方案 1:VLAN 聚合‌:

    • 将 Director 和 Real Server 的物理端口划入同一 VLAN
    • 需要交换机支持 VLAN trunking
  • 方案 2:Proxy ARP‌:

    # 在网关设备上配置 interface vlan100 ip proxy-arp 
    # 允许跨 VLAN 代理 ARP 

七、进阶思考:为什么不能使用普通负载均衡器?

7.1 传统负载均衡器的瓶颈

  • 双向流量处理‌:需要处理入站请求和出站响应 → 成为带宽瓶颈
  • 协议栈开销‌:完整的 TCP 连接处理消耗 CPU 资源

7.2 LVS-DR 的突破

  • 非对称架构‌:将高消耗的响应流量卸载到 Real Server
  • 内核级转发‌:利用 Linux 内核的网络栈优化实现线速转发

八、总结:LVS-DR 的哲学

LVS-DR 模式的精髓在于 ‌“最小化修改”‌ 和 ‌“路径分离”‌:

  • 最小化修改‌:仅操作数据链路层,保持上层协议完整性
  • 路径分离‌:入站请求走 Director 调度,出站响应直连客户端


案例部署


一、部署架构规划

  • 网络拓扑‌:Director 与 Real Server 需在同一二层网络(无路由器隔离)
  • IP 分配示例‌:
    • VIP(虚拟IP):192.168.20.100
    • Director DIP(物理IP):192.168.20.1
    • Real Server RIP:192.168.20.11/12

二、Director 配置步骤

  1. 安装 IPVS 工具

    # CentOS/RedHat 
    yum install -y ipvsadm 
    # Ubuntu/Debian 
    apt install -y ipvsadm 
  2. 配置 VIP‌(临时生效)

    ip addr add 192.168.20.100/32 dev ens33 
  3. 启用 IP 转发

    echo 1 > /proc/sys/net/ipv4/ip_forward 
    sysctl -p 
  4. 添加 IPVS 规则

    # 创建虚拟服务(使用加权最小连接调度) 
    ipvsadm -A -t 192.168.20.100:80 -s wlc 
    # 添加 Real Server(-g 表示 DR 模式,-w 设置权重) 
    ipvsadm -a -t 192.168.20.100:80 -r 192.168.20.11:80 -g -w 1 
    ipvsadm -a -t 192.168.20.100:80 -r 192.168.20.12:80 -g -w 2 
    # 保存规则 
    ipvsadm-save > /etc/sysconfig/ipvsadm 
    systemctl enable ipvsadm 

三、Real Server 配置步骤

  1. 绑定 VIP 到 lo 接口

    ip addr add 192.168.20.100/32 dev lo 
  2. 配置 ARP 抑制

    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
    # 针对 lo 接口的特殊配置 
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
  3. 服务监听 VIP‌(以 Nginx 为例)

    server {
     listen 192.168.20.100:80;
     server_name localhost;
     location / {
         root /usr/share/nginx/html;
     } 
    } 

四、关键验证方法

  1. 检查 Director 规则

    ipvsadm -Ln 
    # 应显示活跃的虚拟服务和 Real Server 状态 
  2. 测试 ARP 抑制

    # 在其他主机执行 
    arping -I eth0 192.168.20.100 
    # 仅 Director 响应,Real Server 无响应 
  3. 流量观测工具

    # Director 上观察连接分发 
    ipvsadm -lcn 
    
    # Real Server 上抓包 
    tcpdump -i ens33 host 192.168.20.100 

五、生产环境注意事项

  • 高可用‌:建议结合 Keepalived 实现 Director 主备切换
  • 持久化配置‌:将 VIP 和 ARP 参数写入 /etc/rc.local 或系统配置文件
  • 性能调优‌:调整 /proc/sys/net/ipv4/vs/ 下的内核参数(如 conn_timeout

网站公告

今日签到

点亮在社区的每一天
去签到