Chinaunix

标题: LVS:ipvsadm+heartbeat+ldirectord 集群如何解决session的问题? [打印本页]

作者: yingweixu    时间: 2008-03-04 16:02
标题: LVS:ipvsadm+heartbeat+ldirectord 集群如何解决session的问题?
我关于LVS的集群(LVS:ipvsadm+heartbeat+ldirectord )功能已经能实现了,但是由于该集群应用于tomcat的服务上,就必须解决session的问题,据说能在几个服务器上做session同步,然后配合 ipvsadm 采用rr的算法来实现负载均衡以及高可用性的性能。但是我在试另一种解决办法,不要用session同步,而是直接用ipvsadm来实现,做法是“算法:rr  persistent:360 ”其他的设置基本不变,这样就能实现每次一个客户端的连接基本被转发向同一个服务器,也就能使得session不出问题,可是新的问题来了:假如一个用户连接到“服务器1”过程中,“服务器1”的tomcat服务意外终止了,ldirectord识别到了该服务器的服务停止,就让ipvsadm将该realserver从列表里面踢出,可是这时候这个用户接下来的请求并没有被智能的指向另一个服务器,而是继续被指向该服务器,直到超时(360s),大家有没有甚么好的建议可以说一说?谢谢。

[ 本帖最后由 yingweixu 于 2008-3-5 14:41 编辑 ]
作者: twodog29    时间: 2008-03-04 16:10
提个小建议,你可以用lblr调度方法,它是为cache设计的,但是看你的需求,也比较符合

它基本保证每个源ip被调度到固定的real server,你就不用设置超时了
作者: yingweixu    时间: 2008-03-04 16:25
标题: 回复 #2 twodog29 的帖子
哦 是吗?谢谢。
你能说得更详细吗?我想试看看。
作者: twodog29    时间: 2008-03-04 17:24
其实搜一下就知道了



基于局部性的最少链接调度

基于局部性的最少链接调度(Locality-Based Least Connections Scheduling,以下简称为LBLC)算法是针对请求报文的目标IP地址的负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群中客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和主存Cache命中率,从而整个集群系统的处理能力。

LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
作者: twodog29    时间: 2008-03-04 20:29
不好意思,好像我记错了。LBLC算法对你来说是没用的

你的需求是源IP固定发到一台服务器,而LBLC是目的IP发到一台服务器,刚好反了
作者: yingweixu    时间: 2008-03-04 23:48
标题: 回复 #5 twodog29 的帖子
呵呵 没事,还是要谢谢你。
希望大家都能来讨论一下,相信一定有人遇到也一定有解决的办法。
作者: ljhb    时间: 2008-03-05 09:35
基于php的网站,可以把session保存在share storage上,有这样的解决方案
作者: yingweixu    时间: 2008-03-05 09:48
标题: 回复 #7 ljhb 的帖子
share storage 是不是要将所有的real server 连接到一个类似于“硬盘阵列柜”的设备上?我现在做的是分布式的,也就是所有的资源要分别放在所有的real server上。
您有资料吗、能否说得更具体些?
作者: yingweixu    时间: 2008-03-05 14:40
自己再顶一下,有谁能再给我些建议。如何解决session的问题。
作者: ljhb    时间: 2008-03-06 09:35
ZendPlatform  (session clustering inside)
作者: yingweixu    时间: 2008-03-06 10:12
标题: 回复 #10 ljhb 的帖子
ZendPlatform 刚刚查过了,功能蛮强大,但是安装和使用起来比较麻烦,因为我前期做了一些基础,不想为了session的问题而把前面的功课全推了,所以希望有甚么简单实用的办法能做到!谢谢你的意见。
作者: mageguoshi    时间: 2008-04-01 16:34
也很想知道,lvs之间的sesson复制共享呢?
不过据说比较占资源。
作者: ipaddr    时间: 2008-04-01 17:12
Tomcat自己是可以做Session Replication的,不过服务器一多,Session的数据一多,效率就很低了。
作者: shitou251314    时间: 2008-04-06 19:30
你可以自定义php session的存储位置,然后用nfs挂载同一session目录
作者: ideawu    时间: 2008-04-07 10:17
在网上查到一些资料, 大概的方法有:
1. NFS统一存储Session.
2. 数据库统一存储Session.
3. 买硬件设备解决方案(不太明白).
作者: root_man    时间: 2008-04-07 17:06
关注

作者: bettydreamit    时间: 2011-06-15 12:56
haproxy对于sesstion可以处理的很好.可以基本url hash ip hash
作者: yjs_sh    时间: 2011-07-18 12:01
lvs需要添加对RS的监控,如果RS出现问题,将RS从服务器列表中清除。这个session会断掉,重新链接的话会自动定向到好的RS上去。
作者: pxf520    时间: 2011-10-20 17:12
lz的问题解决了吗




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2