zoukankan      html  css  js  c++  java
  • lvs配置persistence_timeout 参数导致数据库负载不均(转)

    vs配置persistence_timeout 参数导致数据库负载不均
    现象是网站访问很慢,某台数据库的负载很高,在LVS上看到连接数分布非常不均衡。

    临时解决方式是数据库访问不通过LVS,不同的web配置不同的数据库读IP。网站暂时恢复正常。

    检查keepalived软件配置,发现virtual_server配置了persistence_timeout 连接保持,意思就是在这个一定时间内会讲来自同一用户(根据ip来判断的)访问到同一个real server。

    配置连接保持后用户访问到哪个后端由persistence_timeout和lvs的超时共同决定。

    lvs的超时ipvsadm -L --timeout查看:

    [@zw_87_141 keepalived]# ipvsadm -L --timeout
    Timeout (tcp tcpfin udp): 900 120 300

    lvs的连接ipvsadm -Lcn查看:

    [@zw_87_141 keepalived]# ipvsadm -Lcn|grep 3306
    TCP 01:33 FIN_WAIT 10.10.90.160:54302 10.10.87.154:3306 10.10.87.146:3306
    TCP 14:55 ESTABLISHED 10.3.42.77:54219 10.10.87.150:3306 10.10.87.145:3306

    当一个client访问vip的时候,ipvs或记录一条状态为NONE的信息,expire初始值是persistence_timeout的值,然后根据时钟主键变小,在以下记录存在期间,同一client ip连接上来,都会被分配到同一个后端。

    FIN_WAIT的值就是tcp tcpfin udp的超时时间,当NONE的值为0时,如果FIN_WAIT还存在,那么NONE的值会从新变成60秒,再减少,直到FIN_WAIT消失以后,NONE才会消失,只要NONE存在,同一client的访问,都会分配到统一real server。

    最终解决方法是去除persistence_timeout 选项,各台数据库负载就能均衡,存在的问题是用户不用页面会访问不同的从库,如果从库的复制存在延时,用户会看到不一致的数据。

    persistence_timeout。会话保持时间,单位是秒。这个选项对动态网站很有用处:当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务器。在这里,我们来做一个假设,假定现在有一个lvs 环境,使用DR转发模式,真实服务器有3个,负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了---登陆不能成功。因为没有会话保持,负载均衡器可能会把第2次的请求转发到其他的服务器。
    ##我自己也遇到一个我问题,出票组老是认为51006端口分发不均匀,后来我去掉了persistence_timeout,负载基本上就1:1了

  • 相关阅读:
    清除浮动的原理剖析
    修正IE6不支持position:fixed的bug(转)
    Callbacks vs Events
    垂直属性
    jQuery的事件模型
    Dean-Edward的事件系统实现
    简单的导航栏实现
    弹窗层效果的实现(非jQuery实现)
    rmdir
    mkdir
  • 原文地址:https://www.cnblogs.com/wt645631686/p/9736610.html
Copyright © 2011-2022 走看看