Fork me on GitHub

LVS持久化与超时时间问题分析

前言

在上一篇文章《搭建DNS+LVS(keepAlived)+OpenResty服务器(Docker环境)》中,我搭建了dns+lvs+openresty+web集群;先来回顾一下架构图:

问题现象

可以看到,我把web服务器分成了两组,一组为web01,web02,挂在了openresty01下,另外一组:web03,web04,web05挂在了openresty02下;最后搭建完成,演示时,我分别使用了curl和浏览器,在curl演示时很正常,请求能轮流分到每个web容器,但在浏览器中演示时,刷新时显示轮流某一组web,而不是在所所有web应用轮流,我当时以为是浏览器缓存导致,所以新开了个页签;
我们来看一下:
curl命令演示
浏览器演示

持久化概念

这两天又深入学习了lvs的持久化;我之前在keepalived中配置了持久化时间(persistence_timeout)为0,再加上负载均衡策略(lb_algo)配置成rr,就能够轮流rs,其实不然,除了这些之外,还有连接空闲的超时时间;

1. 把来自同一个客户端IP的请求转发到同一个RS的持久化时间:persistence_timeout,通过这个持久化时间,我们可以实现会话保持
2. 一个连接创建后处于空闲状态的超时时间
   - tcp连接的空闲超时时间
   - LVS收到客户端FIN消息的超时时间
   - udp的超时时间

设置超时时间通过 ipvsadm --set tcp tcpfin udp 命令;查看连接状态使用ipvsadm -lnc命令查看

问题分析

经过观察分析,curl命令请求时,每次请求都从不同的端口发请求,所以每次lvs都当做一个新的客户端来处理,而且curl请求完后,就关闭了tcp连接;而浏览器则不然,每次刷新很可能还是以同一个端口发出请求,而且tcp连接也会保持,所以lvs就会认为是同一个客户端,每次刷新就会指向同一rs,即openresty,openresty再将请求轮流分到下一层的web应用;
我们来看一下浏览器刷新的情况:
刷新后看一下lvs服务器上连接状态:

可见经过多次刷新(七八次),tcp连接共有三个,两个处于连接中状态,一个处于FIN_WAIT状态; 再来看一下curl命令执行情况:
再看一下lvs服务器上连接状态

可见连接都处于FIN_WAIT状态

将tcp/tcpfin/udp超时时间都设置为1s

[root@lvs02 /]# ipvsadm --set 1 1 1
再看来浏览器刷新情况:

可以看见,请求比较均匀的分到了web应用。
再到lvs服务器查看连接状态时,显示为空,因为1s时间比较短,很快就超时了;

  1. 上一篇文章,我配置的LVS模式是DR,如果将其改成NAT,如何配置?

修改keepalived配置文件,lb_kind配置成NAT,再在其下添加一行nat_mask
255.255.255.0,rs服务器上不用再绑定VIP地址、抑制ARP广播;需要配置一个默认网关

route add default gateway 192.168.254.100
  1. 上一篇文章中,我提到如果直接在MAC本中安装dokcer,无法直接从MAC中ping docker容器的IP

找到一篇文章解决方法,使用openvpn方式,我没有实践过,可作大家参考。
完美解决 MacOS 下不能 ping Docker 容器的问题

  1. 后来我是在虚拟机中安装的docker,MAC中能ping通过虚拟机,虚拟机能ping通docker,但mac不能ping通过docker,如何解决?

在mac中添加一条静态路由,将docker容器的ip都转到虚拟机IP

sudo route -n add -net 192.168.254.0/24 192.168.253.129
也可以: sudo route -n add -net 192.168.254.0 -netmask 255.255.255.0 192.168.253.129,效果一样

参考: https://www.jianshu.com/p/31b4a8266f0c

posted @   单行线的旋律  阅读(2292)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
阅读排行:
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
点击右上角即可分享
微信分享提示

目录导航

0
0