设为首页 收藏本站
查看: 1273|回复: 0

[经验分享] LVS负载均衡之session解决方案

[复制链接]

尚未签到

发表于 2019-1-6 11:07:59 | 显示全部楼层 |阅读模式
  LVS负载均衡之session解决方案
  1. 持久连接是什么?
  1.1 在LVS中,持久连接是为了用来保证当来自同一个用户的请求时能够定位到同一台服务器。
  2. 为什么会用到持久连接?
  2.1 cookie/session机制的简单说明:
  在Web服务通信中,HTTP本身是无状态协议,不能标识用户来源,此时出现了一个问题,当用户在一个网站浏览了A网页并跳转到B网页,此时服务器就认为B网页是一个新的用户请求,你之前的登陆的信息就都丢失了,头疼。为了记录用户的会话信息,我们的开发者就在客户端/服务器端软件提供了cookie/session机制,当你访问网站时,服务器端建立一个session会话区,并建立一个cookie与这个session绑定,将信息发送给你的浏览器。这样,只要你的cookie存在,服务器端的session存在,那么当你打开新页面的时候,服务器依然会认识你!
  2.2 cookie/session由负载均衡导致的问题:
  上面说服务器需要靠session/cookie来标记用户的会话,这没什么问题。不过,当你在做了负载均衡的时候,就出现了问题。
  我们依然假设一个场景:某电商网站为了实现更多用户的访问,提供了A、B两台服务器,并在前面做了LVS负载均衡。于是某用户打开了某购物网站,选中了一件衣服,并加入了购物车(此时背后的操作是:LVS负载均衡器接受了用户请求,并将其分发到了选中的服务器,并将用户添加了一件衣服记录到这个会话的session中)。这时当用户打开了第二个网页,又选中了一件帽子并加入购物车(此时背后的操作是:LVS负载均衡器接受了用户请求,进行计算,将其发送到选中的服务器上,该服务器将用户添加了一件帽子记录到session中)。
  到现在可能各位已经发现问题了,由于LVS是一个四层负载均衡器,仅能根据IP:Port对数据报文进行分发,不能确保将同一用户根据session发往同一个服务器,也就是用户第一次被分配到了A服务器,而第二次可能分配到了B服务器,但是B服务器并没有A服务器用户的session记录,直接导致这个例子里的用户发现自己的购物车没有了之前的衣服,而仅有帽子。这是不可接受的。为了避免上面的问题,生产环境中一般有三种方案:
  2.2.1 将来自于同一个用户的请求发往同一个服务器
  2.2.2 将session信息在服务器集群内共享,每个服务器都保存整个集群的session信息
  2.2.3 建立一个session存储池,所有session信息都保存到存储池中
  显然,第一种方案是最简单,也是最节约资源的,而持久连接和sh算法就是实现第一种方案的两种方式。由于sh的应用并不是太多,我们仅仅介绍一下其和持久连接的区别,其他的就不讲述了,有兴趣的朋友可以自行查找资料。
  3. LVS的sh算法和持久连接:
  sh算法全称为source hash(源地址hash),它和持久连接的作用都是"将来自同一个IP的请求都转发到同一个Server",从而保证了session会话定位的问题。两者的不同是:
  (1)sh算法:使用SH算法,SH算法在内核中会自动维护一个哈希表,此哈希表中用每一个请求的源IP地址经过哈希计算得出的值作为键,把请求所到达的RS的地址作为值。在后面的请求中,每一个请求会先经过此哈希表,如果请求在此哈希表中有键值,那么直接定向至特定RS,如没有,则会新生成一个键值,以便后续请求的定向。但是此种方法在时间的记录上比较模糊(依据TCP的连接时长计算),而且其是算法本身,所以无法与算法分离,并不是特别理想的方法。
  (2)持久连接:此种方法实现了无论使用哪一种调度方法,持久连接功能都能保证在指定时间范围之内,来自于同一个IP的请求将始终被定向至同一个RS,还可以把多种服务绑定后统一进行调度。
  详细一点说:当用户请求到达director时。无论使用什么调度方法,都可以实现对同一个服务的请求在指定时间范围内始终定向为同一个RS。在director内有一个LVS持久连接模板,模板中记录了每一个请求的来源、调度至的RS、维护时长等等,所以,在新的请求进入时,首先在此模板中检查是否有记录(有内置的时间限制,比如限制是300秒,当在到达300秒时依然有用户访问,那么持久连接模板就会将时间增加两分钟,再计数,依次类推,每次只延长2分钟),如果该记录未超时,则使用该记录所指向的RS,如果是超时记录或者是新请求,则会根据调度算法先调度至特定RS,再将调度的记录添加至此表中。这并不与SH算法冲突,lvs持久连接会在新请求达到时,检查后端RS的负载状况,这就是比较精细的调度和会话保持方法。
  4. LVS的三种持久连接方式:
  (1)PCC:每客户端持久;将来自于同一个客户端的所有请求统统定向至此前选定的RS;也就是只要IP相同,分配的服务器始终相同。
  (2)PPC:每端口持久;将来自于同一个客户端对同一个服务(端口)的请求,始终定向至此前选定的RS。例如:来自同一个IP的用户第一次访问集群的80端口分配到A服务器,25号端口分配到B服务器。当之后这个用户继续访问80端口仍然分配到A服务器,25号端口仍然分配到B服务器。
  (3)PFMC:持久防火墙标记连接;将来自于同一客户端对指定服务(端口)的请求,始终定向至此选定的RS;不过它可以将两个毫不相干的端口定义为一个集群服务,例如:合并http的80端口和https的443端口定义为同一个集群服务,当用户第一次访问80端口分配到A服务器,第二次访问443端口时仍然分配到A服务器。
  5.定义LVS持久连接:
  LVS的持久连接功能需要定义在集群服务上面,使用-p timeout选项。
  此出处http://minux.blog.运维网.com/8994862/1744761


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-659919-1-1.html 上篇帖子: LVS三种负载均衡详解及实现 下篇帖子: lvs nat 模式和dr模式的工作方式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表