关于 keepalived+lvs 中参数 persistence_timeout 的说明

在keepalived+lvs的配置文件keepalived.conf中有一个选项persistence_timeout

该选项的作用:在一定时间内使来自于同一个Client的所有TCP请求被负载到同一个RealServer上。

查看已设置的persistence_timeout时间:
ipvsadm -S -n
查看Client连接到Server端的请求负载情况:
ipvsadm -L -n -c
#当设置了persistence_timeout 时间后,指定时间内来自同一Client的请求会被发送到同一个RealServer
说明(官方):http://www.linuxvirtualserver.org/docs/persistence.html
#大体意思

在C/S架构中,Client和Server间的多个连接有时存在着关联性
比如FTP主动模式的20和21两个端口:21默认为监听端口;20则为数据传输端口
#20端口的开启是建立在21端口进行了有效的用户确认和文件交互确认后才会开启的,是Server主动连接Client所告知的端口 

但是在FTP的被动模式下,是Server主动将自己开放的随机数据端口告知Client,然后Client再去和Server的新端口建立新的TCP连接

假如`persistence_timeout`该选项注释掉,那么Client和Server间建立的新的TCP连接有可能被负载到另外一台RealServer上去,此时Client和Server之间处于半连接状态,所以当有此选项时,就不会出现此问题了。

此选项对于连接关联性是一个很好的解决方案,但是会造成轻微的负载不均衡(官方原文:slight load imbalance)
注意:

此选项设置时间过长会导致严重的负载不均衡,当然不光是因为时间的原因,还有比如某些网络设置了代理服务,此时负载会将来自于该网络内所有的用户请求当做来自于同一Client

原文地址:https://www.cnblogs.com/linuxlc/p/12082795.html