五:如何实现会话保持?即会话保持算法。  

   F5 BigIP支持多种的会话保持方法,其中包括:简单会话保持(源地址会话保持)、HTTP Header的会话保持,基于SSL Session ID的会话保持,I-Rules会话保持以及基于HTTP Cookie的会话保持,此外还有基于SIP ID以及Cache设备的会话保持等,但常用的是简单会话保持,HTTP Header的会话保持以及HTTP Cookie会话保持以及基于I-Rules的会话保持。


  简单会话保持(基于源地址会话保持)

  • 简单会话保持也被称为基于源地址的会话保持,是指负载均衡器在作负载均衡时是根据访问请求的源地址作为判断关连会话的依据。对来自同一IP地址的所有访问请求在作负载均时都会被保持到一台服务器上去。在BIGIP设备上可以为“同一IP地址”通过网络掩码进行区分,比如可以通过对IP地址192.168.1.1进行255.255.255.0的网络掩码,这样只要是来自于192.168.1.0/24这个网段的流量BIGIP都可以认为他们是来自于同一个用户,这样就将把来自于192.168.1.0/24网段的流量会话保持到特定的一台服务器上。

   简单会话保持里另外一个很重要的参数就是连接超时值,BIGIP会为每一个进行会话保持的会话设定一个时间值,当一个会话上一次完成到这个会话下次再来之前的间隔如果小于这个超时值,BIGIP将会将新的连接进行会话保持,但如果这个间隔大于该超时值,BIGIP将会将新来的连接认为是新的会话然后进行负载平衡(所谓的会话保持时间)。--此处可看出会话保持先于负载均衡。

  • 基于原地址的会话保持实现起来简单,只需要根据数据包三、四层的信息就可以实现,效率也比较高。存在的问题就在于当多个客户是通过代理或地址转换的方式来访问服务器时,由于都分配到同一台服务器上,会导致服务器之间的负载严重失衡。另外一种情况上客户机数量很少,但每个客户机都会产生多个并发访问,对这些必发访问也要求通过负均均衡器分配到多个服器上,这时基于客户端源地址的会话保持方法也会导致负载均衡失效。

 

   基于Cookie的会话保持 

  • 基于cookie插入模式

    在cookie插入模式下,F5(BIG/IP)负责插入cookie,后端服务器不做任何操作。

    wKiom1cOTZjxprDPAAB1LnvH32s878.jpg

   当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIGIP, BIGIP根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复(不带cookie)被发回BIGIP,然后BIGIP插入cookie,将HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次BIGIP插入的cookie)进入BIGIP,然后BIGIP读出cookie里的会话保持数值,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复,由于服务器并不写入cookie,HTTP回复将不带有cookie,恢复流量再次经过进入BIGIP时,BIGIP再次写入更新后的会话保持cookie。 

  • cookie重写模式

    在cookie重写模式下,F5(BIG/IP)负责插入cookie,后端服务器则返回一个空的cookie,然后BIG/IP重写一个心得会话保持数值给客户端。

    wKioL1cOV13imMILAAB5ed1T0CY353.jpg

    当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIGIP, BIGIP根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复一个空白的 (blank cookie) 并发回BIGIP,然后BIGIP重新在cookie里写入会话保持数值,将HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次BIGIP重写的cookie)进入BIGIP,然后BIGIP读出cookie里的会话保持数值,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复,HTTP回复里又将带有空的cookie,恢复流量再次经过进入BIGIP时,BIGIP再次写入更新后会话保持数值到该cookie。

  • Passive Cookie 模式,服务器使用特定信息来设置cookie。

    该模式下,后端服务器负责往cookie插指定值,BIG/IP不做修改,转发给客户端。

    wKioL1cOWKeAaFJkAAB0idjmmV8033.jpg

    当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIGIP, BIGIP根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复一个 (special cookie) 并发回BIGIP,然后BIGIP将带有服务器写的cookie值的HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次服务器写的cookie)进入BIGIP,然后BIGIP根据cookie里的会话保持数值,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复,HTTP回复里又将带有更新的会话保持cookie,恢复流量再次经过进入BIGIP时,BIGIP将带有该cookie的请求回复给客户端。

  • Cookie Hash模式

    该模式用于将cookie值映射到节点上,之后该值这将用于连接含该cookie的客户机,从而实现了节点的持续性。其实就是根据cookie值进行hash运算得到一个数值,然后与后端某个节点建立映射关系,以此为会话依旧,维持连续性。

    wKiom1cOW3fCgHnEAACQM4AJ0lc131.jpg

    当客户进行第一次请求时,客户HTTP请求(不带cookie)进入BIGIP, BIGIP根据负载平衡算法策略选择后端一台服务器,并将请求发送至该服务器,后端服务器进行HTTP回复一个cookie并发回BIGIP,然后BIGIP将带有服务器写的cookie值的HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次服务器写的cookie)进入BIGIP,然后BIGIP根据cookie里的一定的某个字节的字节数来决定后台服务器接受请求,将HTTP请求(带有与上面同样的cookie)发到指定的服务器,然后后端服务器进行请求回复,HTTP回复里又将带有更新后的cookie,恢复流量再次经过进入BIGIP时,BIGIP将带有该cookie的请求回复给客户端。

  • 基于SSL Session ID会话保持  

    用户与服务器之间建立连接后,都会有一个session id,由于该Session ID在系统中是一个唯一数值,由此,BIGIP可以应用该数值来进行会话保持。当用户想与该服务器再次建立连接时,BIGIP可以通过会话中的 SSL Session ID识别该用户并进行会话保持。

  • 基于HTTP Header的会话保持

    BIGIP可以根据用户HTTP访问里http包头信息信息进行会话保持,BIGIP可以将用户访问里这些信息通过表达式来获得相应的数值从而进行会话保持。

  • 基于I-Rules的会话保持

    BIGIP交换机内置有强大的搜索引擎,可以高效的探测到网络流量中的IP包内容的部分,并可以读出该IP包内容部分的进行会话保持,这些内容部分包括如下部分:

    wKiom1cOXeGCjdNrAABseEgyzc4253.jpg   

    其实就是自定义规则,比如:if (http_uri ends_with “.gif”) {    use pool image_servers } ,HTTP请求里包含.gif结尾的,将请求转到pool名为image_servers的群集应用服务器上去,非常强大。