Chinaunix
标题:
lvs中session会话保持的问题
[打印本页]
作者:
exitgogo
时间:
2007-05-19 19:00
标题:
lvs中session会话保持的问题
在ipvsadm 的用法中,很多文档对于persistent参数是这样说明的。
-p –persistent [timeout]
持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。
现在不明白的是,“来自同一个客户”该怎么理解呢,是基于IP的客户端还是基于浏览器客户端的Cookie呢,还是都有呢。
有这个疑问的原因是,来自于session会话保持的问题,
lvs中 -p 参数可以指定会话保持时间,而这个会话保持ipvsadm是通过一种什么方式和客户端交互,实现的呢?
按照我的测试和理解,应该是通过浏览器客户端的Cookie来实现会话保持的,
例如:我的调度器是A,realserver有B和C,同时–persistent 设置时间为600秒。调度算法采用rr方式。
当我访问web时,调度器把这个请求分派到了B节点,按照我的理解应该是此后600秒内,在 此客户端进行的操作调度器都会分派到节点B来完成,600秒过后,按照rr调度算法,调度器会把此客户端的请求发到C节点,
可是在我的测试中,600秒以后,调度器有时把请求发送到了C节点,有时仍然发送到B节点,并且发送到B的几率更大,这个web站点只有我一个人在操作,这样的话,就不符合了rr的调度算法。
一点疑问,请大家讨论一下,谢谢!
作者:
exitgogo
时间:
2007-05-19 19:40
同时还有一个问题
-p参数让会话保持在了节点B,那么当B宕机以后,按照道理lvs应该将分发到这个节点的请求分发到其他节点,但是由于设置了-p参数,客户端请求会仍然发送到故障节点B,
即使设置"quiescent=no",调度器能够正确的把请求分派到正常节点,那么在原来节点上的session由于不能复制到正常的节点,就丢失了,此时客户端会出现要求重新登陆等的提示,这个怎么处理呢!
作者:
qtdszws
时间:
2007-05-19 20:07
标题:
回复 #1 exitgogo 的帖子
>>现在不明白的是,“来自同一个客户”该怎么理解呢,是基于IP的客户端还是基于浏览器客户端的Cookie呢,还是都有呢。
应该是基于源地址.其实还有一个参数[-M netmask],它指出源地址的匹配方式
例如 -p 900 -M 255.255.255.0
就是掩码后网络地址相同的请求使用同一个模板
因此10.1.9.8和10.1.9.9两机器同时访问同一个vs就使用同一个模板,即到同一个rs.
作者:
qtdszws
时间:
2007-05-19 20:28
>>可是在我的测试中,600秒以后,调度器有时把请求发送到了C节点,有时仍然发送到B节点,并且发送到B的几率更大,这个web站点只有我一个人在操作,这样的话,就不符合了rr的调度算法。
rr算法很简单,它只维护一个指向rs循环队列的指针,如果vs请求调度,rr就把当前指针所指的rs做为本次连接请求的rs,然后后以指针.它并不管什么模板.
作者:
qtdszws
时间:
2007-05-19 20:35
>>即使设置"quiescent=no",调度器能够正确的把请求分派到正常节点,那么在原来节点上的session由于不能复制到正常的节点,就丢失了,此时客户端会出现要求重新登陆等的提示,这个怎么处理呢!
可以把session保存到独立的fs,mysql,网络存储上
作者:
qtdszws
时间:
2007-05-19 20:53
lvs操作的流程
数据包->vs->查找是否已存在连接
1.存在就根据该连接发包
2.不存在,是新连接,则开始调度
如果vs是普通服务器,则执行调度算法选择一个rs,然后创建连接,然后发送
如果vs是p服务器,则先看看是否有模板可用,如果有,则根据该模板创建连接,然后发包
如果没有模板可用,就执行调度器调度一个rs并创建模板,然后根据该模板创建连接,最后发包
作者:
exitgogo
时间:
2007-05-19 20:59
qtdszws 兄解决我偶最近的一些疑惑,再次感谢!
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2