负载均衡设备会话保持机制介绍

会话持久性连接简介:

会话保持是负载均衡器设备的一种机制,用于识别客户端与服务器之间交互过程的关连性,在进行负载均衡的同时还保证一系列相关连的访问请求会保持分配到同一台服务器上?针对不同的业务场景需要不同的会话保持配置,并且并不是所有业务系统都需要会话保持配置。以最典型的 HTTP 应用为例,在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过程是密切相关的,服务器在进行这些交互过程的某一个交互步骤时,往往需要了解上一次交互过程的处理结果,或者上几步的交互过程结果,服务器进行下一步操作时需要这就要求所有这些相关的交互过程都由一台服务器完成,而不能被负载均衡器分散到不同的服务器上,此时就需要相应的会话保持策略来保证相关的请求始终被负载到后端的一台服务器。

常用会话保持技术介绍:

1.源地址会话持久性 (Source Address Affinity):

源地址会话持久性(也称为简单持久性)仅基于源IP地址跟踪会话。当客户端请求连接发送到配置源地址持久性的虚拟服务器时,负载均衡会检查该客户端之前是否已连接,如果负载均衡设备已存在当前客户端的会话保持连接条目,负载均衡设备会将请求发送至后端相同服务器。源地址会话保持里另外一个很重要的参数就是连接超时值,会为每一个进行会话保持的会话设定一个超时时间,当一个会话上一次完成到这个会话下次再来之前的间隔如果小于这个超时值,负载均衡将会将新的连接进行会话保持,并且重置超时时间,但如果这个时间间隔大于该超时值,负载均衡将会将新来的连接认为是新的会话会通过负载均衡算法重新选择后端服务器。

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

  1. Cookie 会话保持 :

Cookie会话持久性是使用存储在客户端计算机上的HTTP cookie,负载均衡设备将客户端请求始终发送至后端相同服务器。此功能需要负载均衡设备在七层负载模式下运行,通常cookie 会话保持设置为 HTTP Cookie插入方法,后端服务器无需任何修改,在基于浏览器访问的web 应用,中一般建议使用cookie 会话保持选项,能够后使用户在交互中,登录和和访问信息始终负载至后端相同服务器,此功能只能针对负载均衡七层模式下的http 协议的应用有效。

针对不同的场景有四种cookie持久性方法可供使用:

HTTP Cookie插入方法 (HTTP Cookie Insert)

HTTP Cookie重写方法 (HTTP Cookie Passive)

HTTP Cookie被动方法 (HTTP Cookie Rewrite)

Cookie哈希方法    (Cookie Hash)

HTTP Cookie插入方法:

客户端请求负载均衡设备,在负载均衡将请求返回客户端时,在HTTP 响应

标头的cookie 字插入负载均衡自定义的cookie 信息。在客户端再次访问时负载均衡设备通过HTTP 请求报文头部的cookie 信息将客户端请求始终发送至后端相同服务器。

HTTP Cookie重写方法:

HTTP Cookie重写方法,是指负载均衡器会截取从服务器发送到客户端的名为的 Cookie标头,并覆盖cookie的名称和值。新cookie名为负载均衡设备自定义的cookie 名称,一般包含处理连接的服务器的地址和端口。

HTTP Cookie被动方法 :

负载均衡将请求发送至该服务器,后端服务器进行HTTP响应一个cookie并发回负载均衡设备,然后负载均衡设备将带有服务器写的cookie值的HTTP回复返回到客户端。当客户请求再次发生时,客户HTTP请求(带有上次服务器写的cookie)进入负载,然后负载根据cookie头里的cookie 信息,将HTTP请求发送至指定服务器,简单理解就是负载均衡设备通过服务器的定义的cookie 数据来定义会话保持条目。

Cookie哈希方法:

Cookie hash 方法是指负载均衡设备将服务器响应的客户端的cookie 信息与后端服务器IP地址和端口进行hash 。在客户端再次请求时根据包头里包含的cookie信息进行hash 将请求发送至后端指定服务器。

  1. 哈希会话保持(Hash persistence):

哈希会话保持的一个基本概念就是将一个连接中的源 IP 和目的 IP 地址进行 Hash 计算,根据计算得到的结果并根据后台存在多少台服务器来选择将请求分配到某台服务器。哈希会话保持的特点是在后台服务器的健康状态不发生改变的时候,每个特定的源 IP地址被分配到的服务器是固定的。并且,哈希会话保持可以没有会话保持表,而仅仅是根据计算的结果来确定一个源 IP 被分配到那台服务器。哈希会话保持通常被用于一些特定场合,如要求客户端按照IP地址被固定分配的场合,或者在一些会话保持表查询的开销已经远远大于 Hash 计算开销的情况下,采用 hash 会话保持可以提高系统的处理能力和响应速度。在实际的应用场景中,针对后台采用 Cache 服务器的情况,还有对 URL 进行 Hash 的处理方式,将同一个 URL 的请求分配到同一台 Cache 服务器,这样,对后台的 Cache 服务器群组来说,每台 Cache 服务器上存放的内容都是不一样的,提高 Cache 服务器的利用率。

  1. 可编程控制的会话保持

在实际的使用过程中,我们往往可能遇到更加复杂的一些情况,一个最典型的情况就是会话的特征并不在一些通常的位置,或者通用的名称。而是一个自定义的名称在一个特定的位置,例如 weblogic,AAA 协议的应用......因此在支持编程自定义的负载均衡设备中,可以采用可编程控制方式来实现灵活的会话保持策略。

在可编程控制的会话保持中,会话保持主要由两个部分组成:

1. 会话保持的特征的获取

2. 将特征与后台服务器相对应

如下所示:


rule WeblogicJSessionPersist {

when HTTP_RESPONSE { //在服务器返回的时候触发事件

if { [HTTP::cookie exists "JSESSIONID"] } { //在返回内容的 Cookie 中查找

JESSIONID

persist add uie [HTTP::cookie "JSESSIONID"] //将服务器与找到的 Cookie 内

容进行对应

}

}

when HTTP_REQUEST { //在客户端发起请求的时候触发事件

set jsess [findstr [HTTP::uri] "jsessionid" 11 ";"] //在请求的 URI 中查找

jessionid 字符串,方法是获取从 URI 中找到 jsessionid 字符串,在该字符串之后开始获取内容直

到遇到分号结束(具体语法请参考 BIG-IP LTM-LTM 配置手册)

if { $jsess != "" } {

persist uie $jsess //如果找到,则查询会话保持表,根据匹配结果将请求发送到

对应的服务器上

}

}

}

  1. 目的地址会话保持(Destination Address Affinity):

顾名思义目的地址会话保持通过目的地址进行会话保持的技术,通常在负载均衡设备作为正向代理服务器时,将客户端发送的请求始终发送到相同网关时会选择目的地址会话保持,此功能不常用。

总结:

在大多数后台应用系统的设计中,没有实际考虑到将被应用于负载均衡的环境中,为了保持在用户访问时与单机运行环境的一致,因此,在负载均衡设备上必须采用会话保持功能。在基于http 协议访问的应用系统中,强烈建议采用 HTTP Cookie插入方法的会话保持,不需要后端服务器进行任何修改,真正基于会话的会话保持技术。还有大部分应用是基于接口的业务,其中并不是所有业务系统都需要会话保持,在需要会话保持的系统中,建议采用源地址会话保持,其中的超时时间的设置需要业务部门根据实际的业务需求评估出一个合理的值,长时间维护无效的会话保持条目会对负载均衡设备造成较大压力。针对其他的应用场景需要和业务部门进行详细沟通提出针对的会话保持方式才能够合理的进行配置。

原文地址:https://www.cnblogs.com/zy09/p/10298271.html

时间: 2024-10-13 03:29:26

负载均衡设备会话保持机制介绍的相关文章

Session会话保持机制的原理与Tomcat Session Cluster示例

一.Session的定义 在计算机科学中,特别是在网络中,session是两个或更多个通信设备之间或计算机和用户之间的临时和交互式信息交换.session在某个时间点建立,然后在之后的某一时间点拆除.建立的通信session可以在每个方向上涉及多个消息.session通常是有状态的,这意味着至少一个通信部分需要保存关于会话历史的状态信息以便能够进行通信,而在无状态通信中,通信由具有响应的独立请求组成.--Wikipedia Session:在计算机中,尤其是在网络应用中,称为"会话控制"

NSNotificationCenter消息通信机制介绍(KVO)

NSNotificationCenter消息通信机制介绍(KVO) 作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息                [[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector(mytest:) name:@" mytest" object:nil];        参数介绍:         

IOS 阶段学习第25天笔记(IOS沙盒机制介绍)

IOS学习(OC语言)知识点整理 一.IOS沙盒机制介绍 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访问(extension) 2)extension是ios8新开放的一种对几个固定系统区域的拓展机制,它可以在一定程度上弥补ios的沙盒机制对应用间的通信限制 3)应用沙盒一般包括以下几个文件目录: 1.应用程序包:包含所有资源文件和可执行文件 2.Documents:保存应用

浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决办法

当浏览器禁用Cookies时,基于Cookie的会话跟踪机制就会失效,解决办法是利用URL重写机制跟踪用户会话. 在使用URL重写机制的时候需要注意,为了保证会话跟踪的正确性,所有的链接和重定向语句中的URL都需要调用encodeURL()或encodeRedirectURL()方法进行编码.另外,由于附加在URL中的SessionID是动态产生的,对于每一个用户都是不同的,所欲对于静态页面的相互跳转,URL重写机制就无能为力了,但是,我们也可以通过将静态页面转换为动态页面来解决这个问题. 在w

PHP会话处理相关函数介绍

PHP会话处理相关函数介绍 提交 我的评论 加载中 已评论 PHP会话处理相关函数介绍 2015-03-23 PHP100中文网 PHP100中文网 PHP100中文网 微信号 功能介绍 互联网开发者社区,提供相关技术信息服务,技术交流着平台 在PHP开发中,比起Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,这里我们详细介绍一下PHP处理会话函数将要用到10个函数. PHP处理会话函数1. session_start 函数功能:开始一

Linux 内核的文件 Cache 管理机制介绍

Linux 内核的文件 Cache 管理机制介绍 文件 Cache 管理是 Linux 内核中一个很重要并且较难理解的组成部分.本文详细介绍了 Linux 内核中文件 Cache 管理的各个方面,希望能够对开发者理解相关代码有所帮助. http://www.ibm.com/developerworks/cn/linux/l-cache/ http://www.cnblogs.com/MYSQLZOUQI/p/4857437.html 1 前言 自从诞生以来,Linux 就被不断完善和普及,目前它

ORACLE回收站机制介绍及管理

ORACLE回收站机制介绍 从ORACLE 10g开始,引入了一个叫回收站(RecycleBin)的概念.它的全称叫Tablespace Recycle Bin.回收站实际是一个逻辑容器(逻辑区域),原理有点类似于WINDOW系统的回收站.它以表空间中现有已经分配的空间为基础,而不是从表空间上物理划出一个固定区域用作回收站.这意味着回收站和表空间中的对象共用存储区域.系统没有给回收站预留空间.因此,当表被DROP后,如果可用空间充足,并且没有对回收站进行清理,那么被DROP掉的对象会一直存在回收

JVM内存管理和垃圾回收机制介绍

http://backend.blog.163.com/blog/static/20229412620128233285220/ 内存管理和垃圾回收机制是JVM最核心的两个组成部分,对其内部实现的掌握是Java开发人员开发出高质量的Java系统的必备条件.最近整理了一些关于JVM内存管理和垃圾回收方面的知识,这里梳理一下,分享给大家,希望能够对Java虚拟机有更深入的了解. 1. JVM内存管理 首先,JVM将内存组织为主内存和工作内存两个部分.主内存中主要包括本地方法区和堆.每个线程都有一个工

PHP基础教程 PHP会话处理相关函数介绍

在PHP开发中,比起Cookie,Session 是存储在服务器端的会话,相对安全,并且不像 Cookie 那样有存储长度限制,这里兄弟连PHP小编详细介绍一下PHP处理会话函数将要用到10个函数. PHP开发:PHP处理会话函数1. session_start 函数功能:开始一个会话或者返回已经存在的会话. 函数原型:boolean session_start(void); 返回值:布尔值 功能说明:这个函数没有参数,且返回值均为true.最好将这个函数置于最先,而且在它之前不能有任何输出,否