Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2813904
  • 博文数量: 587
  • 博客积分: 6356
  • 博客等级: 准将
  • 技术积分: 6410
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-23 10:54
个人简介

器量大者,福泽必厚

文章分类

全部博文(587)

文章存档

2019年(3)

2018年(1)

2017年(29)

2016年(39)

2015年(66)

2014年(117)

2013年(136)

2012年(58)

2011年(34)

2010年(50)

2009年(38)

2008年(16)

分类: LINUX

2016-10-20 19:16:50

lvs配置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了

阅读(5730) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~