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了

  • 相关阅读:
    收藏的博客
    MVC 之 System.Web.Optimization找不到引用
    SQL Server 之 附加数据库出现“ 拒绝访问 ”
    Android Studio 之 环境搭建
    PD 之 连接数据库并导出数据及生成PDM文件
    Windows 之 可以Ping通服务器但无法使用服务器连接的共享打印机
    JQuery 之 在数据加载完成后才自动执行函数
    JavaScript 之 动态加载JS代码或JS文件
    JQuery 之 动态加载JS或JS文件
    JavaScript 之 解码类似eval(function(p,a,c,k,e,d){}))的JavaScript代码
  • 原文地址:https://www.cnblogs.com/wt645631686/p/9736610.html
Copyright © 2011-2022 走看看