LVS+keepalived 使用TUN

4月 25, 2023 |

realServer配置

  1. modprobe ipip  #加载ipip模块,生成tunl0网卡
  2. ip tunnel show  #查看生成的网卡
  3. ip addr add 10.206.200.110/32 brd 10.206.200.110 dev tunl0  #绑定虚拟IP
  4. vim /etc/sysctl.conf  #禁用rp_filter

    net.ipv4.conf.eth0.rp_filter = 0
    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.tunl0.rp_filter = 0

  5. sysctl -p  #sysctl.conf生效
  6. ip link set tunl0 up  #启用网卡
  7. ip route change 192.168.122.0/24 dev ens36 advmss 1440  #因ipip tunnel占用20个字节头,mss扣减20字节

Director配置

  1. modprobe ipip  #加载ipip模块,生成tunl0网卡
  2. ip tunnel show  #查看网卡
  3. vim /etc/sysctl.conf  #禁用rp_filter属性

    net.ipv4.conf.all.rp_filter = 0
    net.ipv4.conf.eth0.rp_filter = 0

  4. sysctl -p  #sysctl.conf生效
  5. ip link set tunl0 up  #启用tunl0网卡
  6. vim /etc/keepalived/keepalived.conf
    lb_kind TUN  #代理类型为隧道模式

realServer
默认的MSS=1500-20(ip头)-20(tcp头) = 1460
MSS-12(echo, echo replay选项,tcpdump的ecr和val选项) = 1448 真是的tcp负载长度
但是ipip 隧道转发IP报文给realServer的时候会添加20个字节的IP头, 防止PMTUD或者TCP分组的发生,将realServer的mss=1440。

client
ip route flush cache   #清空路由缓存

名称解释

MSS clamping:

如果tcp连接的MSS比路由器的MTU小,MSS改成最小的MTU

PMTUD (Path MTU Discovery)

如果路由器发现MTU比报文小,直接icmp给发送者,让其拆小后再发送。

试验结论

keepalived默认会插入
`-A INPUT -m set --match-set keepalived dst -j DROP` 通过向`keepalived.conf`文件添加vrrp_iptables来禁止产生iptables规则。

`LVS` 负载均衡算法是基于IP进行的,所以在测试的时候没法将一个测试服务器产生的请求路由到两台服务器。
`LVS` 同样的硬件(`4vCPU`, `8GB`内存, `5Gbps`,`80万PPS`), nginx反向代理的qps为3W左右(默认配置,欢迎大家反馈调优方案),而LVS=TUN模式可以达到13W左右,根据`sar -n DEV 1 1`输出,此时已经达到了80万PPS上限。而CPU利用率大概30%。

参考文档

Lvs+Keepalived 使用DR
Centos7实践LVS+Keepalived
https://baihuqian.github.io/2019-03-11-mtu-vs-mss/

Posted in: Linux

Comments are closed.