前言

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

问题现象

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

我们来看一下:



持久化概念

这两天又深入学习了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

LVS持久化与超时时间问题分析的更多相关文章

  1. Linux 建立 TCP 连接的超时时间分析(解惑)

    Linux 系统默认的建立 TCP 连接的超时时间为 127 秒,对于许多客户端来说,这个时间都太长了, 特别是当这个客户端实际上是一个服务的时候,更希望能够尽早失败,以便能够选择其它的可用服务重新尝 ...

  2. hystrix ,feign,ribbon的超时时间配置,以及原理分析

    背景,网上看到很多关于hystrix的配置都是没生效的,如: 一.先看测试环境搭建: order 服务通过feign 的方式调用了product 服务的getProductInfo 接口 //---- ...

  3. php-fpm超时时间设置request_terminate_timeout分析

    之前发现一个php配置之后关于返回500和502的问题,今天看到一个兄弟写的非常不错,记录一下.   php日志中有一条超时的日志,但是我request_terminate_timeout中设置的是0 ...

  4. LVS持久化

    在实际应用场景中,轮询调度并不都是适用的.有些情况下,需要我们把同一个会话的请求都调度给一个RS节点.这时候就需要LVS提供持久化的能力,能够实现会话保持. 一.LVS的持久化主要包括以下两个方面. ...

  5. 玩转Windows服务系列——Windows服务启动超时时间

    最近有客户反映,机房出现断电情况,服务器的系统重新启动后,数据库服务自启动失败.第一次遇到这种情况,为了查看是不是断电情况导致数据库文件损坏,从客户的服务器拿到数据库的日志,进行分析. 数据库工作机制 ...

  6. Tuxedo 超时时间控制(转贴)

    以下是转贴: TUXEDO超时控制全功略 摘要: 本<功略>集中了TUXEDO应用中,可能涉及到的所有时间参数,并分别对其进行详细描述,不但对其出处.取值等基本属性进行查证,而且,通过分析 ...

  7. Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。

    近来遇到这样一个错误:Timeout 时间已到.在操作完成之前超时时间已过或服务器未响应.错误截图如下: 错误原因分析:产生错误时我执行的操作需要的执行时间比较长.我测试了一下,那个操作用到的存储过程 ...

  8. 超时时间已到。在操作完成之前超时时间已过或服务器未响应。 (.Net SqlClient Data Provider)

    超时时间已到.在操作完成之前超时时间已过或服务器未响应. (.Net SqlClient Data Provider) 在做一个小东西的时候出现了这个问题,就是使用VS调试几次项目后,使用SQL Se ...

  9. WebForm+Web.config: 超时时间已到。在操作完成之前超时时间已过或服务器未响应。

    ylbtech-Error-WebForm+Web.config: 超时时间已到.在操作完成之前超时时间已过或服务器未响应. 超时时间已到.在操作完成之前超时时间已过或服务器未响应. 1.A,错误代码 ...

随机推荐

  1. POJ3046选蚂蚁创建集合_线性DP

    POJ3046选蚂蚁创建集合 一个人的精力是有限的呢,如果一直做一件事迟早会疲惫,所以自己要把握好,不要一直埋头于一件事,否则效率低下还浪费时间 题目大意:一共有T(1,2...n为其种类)种蚂蚁,A ...

  2. POJ 1745 线性和差取余判断

    POJ 1745 线性和差取余判断 题目大意:每个数都必须取到,相加或相减去,问所有的方案最后的得数中有没有一个方案可以整除k 这个题目的难点在于dp数组的安排上面 其实也就是手动模仿了一下 比如 一 ...

  3. python之基础1

    一.python介绍 介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写能够解释Python语言语法的解释器.Python这个名字 ...

  4. ceph osd 批量删除

    ceph osd 批量删除,注意删除的是当前节点正在使用的osd,数据删除有风险,所以最后一步没有去format磁盘,给你留下一剂后悔药. #!/bin/bash osd_list=`mount|gr ...

  5. Delphi 的多线程使用已经很简单了

    先看一个非多线程的例子, 代码执行时不能进行其它操作(譬如拖动窗体): {自定义方法: 在窗体上绘制...} procedure MyMethod; var   i: Integer; begin   ...

  6. Linux-帮助与基本命令

    1.获取命令帮助 Linux中的命令按可分类shell内嵌命令.外部命令,获取命令帮助信息前需要区分命令类型. 1.1 type - 查看命令类型 [root@VM_0_171_centos ~]# ...

  7. Markdown中怎么上传图片

    在网站中使用了Markdown编辑器,但是不能支持图片的直接粘贴

  8. UWP Button添加圆角阴影(三)

    原文:UWP Button添加圆角阴影(三) Composition DropShadow是CompositionAPI中的东西,使用Storyboard设置某个属性,就是频繁的触发put_xxx() ...

  9. [SDOI2011]消耗战(虚树+树形动规)

    虚树dp 虚树的主要思想: 不遍历没用的的节点以及没用的子树,从而使复杂度降低到\(\sum\limits k\)(k为询问的节点的总数). 所以怎么办: 只把询问节点和其LCA放入询问的数组中. 1 ...

  10. 网页关闭(解决window.close在火狐下不兼容问题)

    熟悉前端的都知道,火狐默认状态非window.open的页面window.close是无效的 网上有很多人说,在火狐的地址栏输入:about:config然后找到dom.allow_scripts_t ...