zoukankan      html  css  js  c++  java
  • 负载均衡服务器会话管理

    1.       场景

    负载均衡服务器是一个集群的请求分配器,负责将外部访问集群的请求分配到集群中的某台机器上。一个特定功能的集群由很多独立的机器组成,这些机器都运行相同的程序接受并服务分配到的请求。

    WEB服务器为例,A用户对集群内网页的请求,每次都由负载均衡服务器分配到集群中一台机器上的WEB服务进程。在WEB应用的情形下,WEB服务进程通过HTTP请求头内的cookieID(如果使用PHP作为服务进程,则该ID可能名为PHPSESSID)来辨别访问者身份,并根据该访问者的操作,在机器中保存一些只服务于该用户的数据。如果该用户没有这样的ID,则认为是新的访问者,并且重新分配一个系统内唯一的字符串来表示该用户。当负载均衡服务器上没有会话管理,也就是说负载均衡服务器随机分配请求到集群机上,那么当该用户在前一台集群机上登录后,第二次请求被分配到林一台集群机,那么该用户又会回到未登录状态。在这种情形下,需要用户反复登录的情况是不能接受的。

    负载均衡服务器的会话管理目标是,保证同一用户的每次访问都被分配到同一台集群机,保证用户每次请求的HTTP请求头里cookieID都能被认出,从而保证用户访问的连续性。

    2.       解决方案

    上述关于保证用户访问集群的连续性的问题有多种解决方案

    1) 以负载均衡服务器入手,管理某个用户的请求和这些请求被分配到的集群机的对应关系,有了对应关系,之后的用户请求只要通过查询关系表,将请求分配到之前被分配到的集群机上进行服务

    2) 在应用程序的会话管理入手,不将会话数据保存在集群机本地,而是所有集群机使用同一个会话数据缓存区,集群机通过查询会话缓存区获取该用户会话id对应的数据

    以上第二种方案中的会话数据缓存区一般为memcached这样的缓存服务或redis这样的KV数据库,这种方案在业界普遍使用,但不在本文中讨论。

    第一种方案也有多种实现方式

    1) 映射访问用户IP到集群机

    2) 映射访问用户HTTP请求头的cookie中保存的或者HTTP请求URL中保存的会话ID到集群机

    第一种方式将映射实现在TCP/IP协议的IP层,第二种方式讲映射实现在TCP/IP协议的应用层。

    由于第一种方式中,负载均衡服务器需要拆网络请求包的层数比较少,所以会有更高的执行效率,使得负载均衡服务器的负载更低,而第二种方式由于负载均衡服务器执行了更多的计算,在访问量大的情况下,会使得负载均衡服务器成为系统瓶颈。

    但是第一种方式在一些情况下可能会导致负载不均衡,比如说有大量机器通过一个代理服务器(同一个IP)访问服务器,那么该IP分配到的服务器的负载就会过高。

    第一种方法的另一个缺点是,当用户使用的是动态IP访问网络,而该IP会随着时间变化,如PPPoE、移动网络,那么在IP变化后访问被分配到另一台集群机服务时,用户之前访问产生的会话缓存数据就会全部丢失。

    所以一般来说,会使用第二种方式帮助负载均衡器进行会话管理,因为cookieURL带上的会话ID才是唯一的标识。

    3.       真实服务器上的会话管理

    3.1.    Apache负载均衡服务器的会话管理

    Apache服务器一般使用mod_proxy_balancer作为负载均衡模块,这个模块通过cookieURL编码会话ID来实现请求向集群机的对应(stickyness)。Cookie可以通过Apache服务器或者应用程序本身来实现,而URL编码会话ID一般通过应用程序本身实现。下面介绍基于cookiestickyness

    当使用基于cookiestickyness,需要配置Apache负载均衡服务器使用cookie中的哪个key对应的值来确定集群机的分配,如通过以下配置:

    ProxyPass / balancer://mycluster stickysession=REALNODEID <Proxy balancer://mycluster>de> BalancerMember http://192.168.1.50:80 route=node1 BalancerMember http://192.168.1.51:80 route=node2 </Proxy>

    配置的意思是:检索请求集群的HTTP头中cookiekeyREALNODEID的值,如果该值为node1,则将请求转向http://192.168.1.50:80处理,如果该值为node2,则将请求转向http://192.168.1.51:80处理。

    同时,在两台集群机的Apache服务器配置文件中,需要添加以下配置:

    第一台:Header set Set-Cookie: “REALNODEID=node1”

    第二台:Header set Set-Cookie: “REALNODEID=node2”

    表示在响应HTTP头中,添加一条cookiekey名为REALNODEIDkey值在两台服务器中分别为node1node2

  • 相关阅读:
    Piggy-Bank (hdoj1114)
    Word Amalgamation(hdoj1113)
    Lowest Bit(hdoj1196)
    1206: B.求和
    1207: C.LU的困惑
    STL初步
    关于521(nyoj)
    first blood暴力搜索,剪枝是关键
    变态最大值(nyoj)
    烧饼(nyoj779)
  • 原文地址:https://www.cnblogs.com/duanxz/p/3658851.html
Copyright © 2011-2022 走看看