前言
在负载均衡解决方案中,有一种特殊的组网方式,叫三角传输。
用户请求的流量到负载均衡设备后,负载均衡将请求均匀调度到后端服务器,后端服务器回复的数据报文直接发回给客户端,来回路径组成一个三角形。这种组网适应于一些下载流量特别大的业务,服务器回复流量不需要经过负载均衡了,提高了系统整体的性能。
(该图来自互联网,侵删)
普通的三角传输,负载均衡设备的LAN接口和服务器在一个二层网络中,服务器将VIP地址(提供服务的地址)配置到lo口上。 用户发起请求到vip,负载均衡设备调度转发,不改变目的IP地址,而将以太网头部的目的MAC地址改成后端服务器的MAC,请求的数据包通过二层交换就成功转发到服务器。服务器上的VIP地址可以响应服务,直接回复用户了。
从用户的视角,访问的是VIP;从负载均衡视角,将请求均匀负载,报文三层头部不改变;从服务器视角看,客户端原始报文到达自己,直接回复,不知道中间有负载均衡设备的存在。
这篇文档要讲的是L3 三角传输: 服务器和ADC的LAN口不在一个网段的三角传输组网。
L3 三角传输案例
如上图,用户的业务提供下载服务,下行流量比较大,希望ADC能采用三角传输的方式为服务器做负载均衡。
需求分析
此案例中,ADC的Lan接口与服务器不在一个二层,不改变目的IP的话,中间路由设备会将数据包再次送回到ADC上,变成环路。因此这里需要借助一下ipip隧道技术,将用户请求通过ipip的隧道,发送到后端服务器。
配置步骤
-
基础网络连通性配置:配置步骤略;
-
服务器配置:下一节内容;
-
ADC配置服务池,将服务器物理IP地址加入服务池:
-
ADC配置虚拟服务,开启ipip隧道转发:
开启隧道模式,隧道源地址可以不填(ADC查询路由自己选择隧道源地址),如果要配置,本案例中可以配置为:10.0.0.10。
服务器的配置
# ===========================需要更改的参数=============================
# vip为虚拟服务的IP;
vip=100.1.1.80
# local_ip为服务器的物理IP,每个服务器不一样;
local_ip=10.1.1.10
# 服务器物理网卡名
physic_iface=eth0
# =====================================================================
# lo口配置vip地址
ip addr add $vip/32 dev lo
# 禁止loopback口ARP响应
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.$physic_iface.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.$physic_iface.arp_announce=2
# 配置IPIP隧道,隧道接口名称为: ipip0
modprobe ipip
ip link add name ipip0 type ipip local $local_ip
ip link set ipip0 up
# 关闭源路径过滤
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.lo.rp_filter=0
sysctl -w net.ipv4.conf.ipip0.rp_filter=0
上述配置可以放到开机启动脚本中,以免重启后丢失。
其他资料
F5的配置指南见:
L2 npath
https://techdocs.f5.com/en-us/bigip-14-0-0/big-ip-local-traffic-manager-implementations-14-0-0/configuring-npath-routing.html#GUID-A5EA6E91-720C-43F7-B810-A46C10A8C0D0
L3 npath
https://techdocs.f5.com/en-us/bigip-14-0-0/big-ip-local-traffic-manager-implementations-14-0-0/configuring-layer-3-npath-routing.html#GUID-D0FE8282-360B-4748-8F39-4553B2310F8D