企业级调度器LVS TUN实践
根据以下主机资源,做⼀个 lvs 的 TUN 模型的负载均衡实验,两台后端主机是 http 服务。

定制 lvs-route 主机 ip(略)
定制 lvs-server 主机 ip(略)
定制 lvs-route 主机隧道⽹卡
modprobe ipip 加载隧道模块
modinfo ipip 查看模块信息
lsmod | grep ipip 验证模块是否加载

定制隧道⽹卡ip
ip a add 192.168.8.100/32 dev tunl0
ip link set tunl0 up # 一定要开启
ip a s tunl0

定制lvs-RS1主机ip
加载模块
modprobe ipip
modinfo ipip
lsmod | grep ipip
lvs-rs1主机定制tunl0⽹卡ip地址
ip a add 192.168.8.100/32 dev tunl0
ip link set tunl0 up # 一定要开启
ip a s tunl0

定制lvs-RS2主机ip
加载模块
modprobe ipip
modinfo ipip
lsmod | grep ipip
ip a add 192.168.8.100/32 dev tunl0
ip link set tunl0 up # 一定要开启
ip a s tunl0

基础环境配置
客⼾端主机定制⽹关
lvs-client 主机定制默认的⽹关出⼝为 lvs 主机
ip route add default via 10.0.0.16 # 设定默认的路由,实现流量的发送
lvs-route 主机定制数据包转发(略)
lvs-server主机定制数据包转发及定制路由出⼝(略)
修改内核参数,禁⽤ VIP 的 ARP ⼴播和应答, TUN 模式中,如果 LVS 和后端RS 服务器在⼀个物理⽹络,可以不⽤执⾏如下步骤
echo '1' > / proc / sys / net / ipv4 / conf / tunl0 / arp_ignore
echo '2' > / proc / sys / net / ipv4 / conf / tunl0 / arp_announce
echo '1' > / proc / sys / net / ipv4 / conf / all / arp_ignore
echo '2' > / proc / sys / net / ipv4 / conf / all / arp_announce
echo '0' > / proc / sys / net / ipv4 / conf / tunl0 / rp_filter
echo '0' > / proc / sys / net / ipv4 / conf / all / rp_filter
rp_filter 参数用于控制系统是否开启对数据包源地址的校验
0 代表不开启地址校验
1 表示开启严谨的反向地址校验,对每一个数据包,校验其反向地址是否是最佳路径,如果不是则丢弃该包 Centos | Redhat 系列的 OS 默认使用的是该值
2 表示开启松散的反向地址校验,只要能够反向 ping 通,则使用该数据包,如果 ping 不通,则丢弃该包。 Ubuntu 系列的 OS 默认使用的是该值,效果和 0 差不多
RS1主机定制⽹络环境
lvs-rs1 主机定制默认的⽹关出⼝为 lvs 主机(略) 结果如下显示

lvs-rs1 主机定制 arp 策略
echo '1' > / proc / sys / net / ipv4 / conf / tunl0 / arp_ignore
echo '2' > / proc / sys / net / ipv4 / conf / tunl0 / arp_announce
echo '1' > / proc / sys / net / ipv4 / conf / all / arp_ignore
echo '2' > / proc / sys / net / ipv4 / conf / all / arp_announce
echo '0' > / proc / sys / net / ipv4 / conf / tunl0 / rp_filter
echo '0' > / proc / sys / net / ipv4 / conf / all / rp_filter
注意:
关于 arp 的抑制,需要具体的网卡和 all 搭配使用才生效,
all 相当于兜底的策略。
RS2主机定制⽹络环境(上同 略)
lvs-server主机定制集群
ipvsadm -C
ipvsadm - A - t 192.168.8.100 : 80
ipvsadm - a - t 192.168.8.100 : 80 - r 192.168.8.14 : 80 - i
ipvsadm - a - t 192.168.8.100 : 80 - r 192.168.8.15 : 80 - i
ipvsadm - a - t 192.168.8.100 : 80 - r 192.168.8.17 : 80 - i
注意: 我们这里用的是 tun 模式,所以添加 RS 主机的时候,需要加 - i 选项

测试
客⼾端访问 lvs 的对外 ip 地址
[root @rocky9-12 ~ ] # curl 192.168.8.100
< h1 > hello RS2 </ h1 >
[root @rocky9-12 ~ ] # curl 192.168.8.100
< h1 > hello RS1 </ h1 >
[root @rocky9-12 ~ ] # curl 192.168.8.100
< h1 > hello RS2 </ h1 >