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

2023-11-07

 

会话持久性连接简介:

 

会话保持是负载均衡器设备的一种机制,用于识别客户端与服务器之间交互过程的关连性,在进行负载均衡的同时还保证一系列相关连的访问请求会保持分配到同一台服务器上。针对不同的业务场景需要不同的会话保持配置,并且并不是所有业务系统都需要会话保持配置。以最典型的 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 亚信科技AntDB数据库专家出席数据库标准研讨会并参与研讨

    2023年7月12日 全国信息技术标准化技术委员会数据库标准工作组 SAC TC28 WG31 秘书处组织召开数据库标准研讨会 会议围绕数据库标准工作组2023年上半年开展的标准编制情况进行交流 亚信科技AntDB数据库相关专家出席会议 并
  • 红黑树 java

    1每个节点是红色或者黑色 2根节点是黑色 3每一个叶子节点 最后的空节点 是黑色 4如果一个节点是红色 那么他的孩子节点都是黑色 红色节点都是向左倾斜 5从任意一个节点到叶子节点 经过的黑色节点是一样的 也满足二分搜索树的性质 是绝对平衡的

随机推荐

  • redis学习笔记01:String类型的实现SDS

    看了 Redis设计与实现 第二章关于redis底层对于String类型的实现 SDS Simple Dynamic String 简单动态字符串 的内容 在这里做一点简单的总结笔记 一 SDS结构 struct sdshdr 记录buf数
  • AtCoder Beginner Contest 314

    A 3 14 atcoder jp AC代码 include
  • 数字电路设计之低功耗设计方法四:预计算

    pre computation 这是一个预先计算 在一定条件下 可以做出判断之后 对于一些没必要的计算那就不计算 如果应用已有的计算无法得出正确的结果 那么就继续往下计算直到计算出所需的结果 这个做法相比原始的全部计算的方法大大降低了动态功
  • [JAVAee]多线程-wait方法与notify方法

    我们知道 线程之间是抢占式执行的 通俗来说 就是随机调度的 每一个线程什么时候运行我们也不知道 这里就来介绍 让线程可以按照一定顺序执行的方法 目录 1 wait方法 2 notify notifyAll方法 3 使用wait与notify
  • IPMI与BMC简介

    智能平台管理接口 IPMI 是一种开放标准的硬件管理接口规格 定义了嵌入式管理子系统进行通信的特定方法 IPMI 信息通过基板管理控制器 BMC 位于 IPMI 规格的硬件组件上 进行交流 使用低级硬件智能管理而不使用操作系统进行管理 具有
  • Window localStorage 属性与Window sessionStorage 属性(Js将数据存储在浏览器端)

    一 目的 实现浏览器全局变量 即可轻松解决跨页面传值问题 二 简介 1 localStorage 和 sessionStorage 属性允许在浏览器中存储 key value 对的数据 2 localStorage用于长久保存整个网站的数据
  • 病理切片的相关文章总结

    1 数字病理学中的人工智能 用于诊断和精确肿瘤学的新工具 2 小样本学习研究综述 中科院计算所 3 基于无监督组织分类的结直肠癌生存预测研究 4 常规组织病理学弱监督无标注癌检测与基因型预 5 肿瘤拓扑图 无监督深度学习 6 一种基于原型学
  • Qt部件基类QWidget

    1 默认部件基类 QT提供的默认部件基类包括QMainWindow QWidget 和QDialog这三种 这三个部件基类也是用的最多的 QMainWindow是带有菜单栏 工具栏 状态栏的主窗口类 它有自己单独的布局 布局有一个中心区域
  • 使用Spring实现“控制反转”

    1 新建Java项目 目录结构如下 2 Spring配置文件applicationContext xml代码如下
  • Linux查看当前tcp连接数

    查看有哪些IP连接本机 netstat an 统计80端口连接数 netstat nat grep 80 wc l 统计已连接上的 状态为 established netstat na grep ESTABLISHED wc l 查看80端
  • 项目中集成 axis2 发布webservice

    在网上找了很多例子 发觉很多都是脱离项目 单独使用axis2包发布webservice接口 实际开发中 一般都是跟随项目启动之后 自动发布接口 接下来简单讲解一下 在项目中集成发布axis2 webservice接口 1 打开axis2 w
  • el-table树形表格实现复选框多选效果

    2023 7 26今天我学习了如何使用树形表格的时候进行复选框的多选效果 当我们使用树形结构表格需要进行多选功能操作的时候会发现点击全选的时候 只有一级表格数据会被选中 问题如图 我们需要实现的是点击全选的不管是几级表格数据都可以被选中 处
  • 人工智能开源社区论坛----开源助力多领域AI生态发展

    ChinaOSC 2022 人工智能开源社区论坛 开源助力多领域AI生态发展技术论坛将于2022年8月20日13 00 17 00在陕西省西安高新国际会议中心召开 本论坛将围绕 开源社区助力多领域AI生态发展 主题 邀请AI开源领域顶级技术
  • Golang 中的可测试示例函数(Example Function)详解

    Golang 可测试示例含函数 Example Function 示例函数类似于单元测试函数 但没有 testing 类型的参数 编写示例函数也是很容易的 创建对应的测试文件 在 Go 项目的源代码目录下创建一个新的文件 和被测代码文件在同
  • 模型选择、欠拟合和过拟合学习笔记

    训练误差 泛化误差 训练误差 模型在训练数据集上表现出的误差 泛化误差 指模型在任意一个测试数据样本上表现出的误差的期望 并常常通过测试数据集上的误差来近似 过拟合 欠拟合 过拟合 训练误差远小于其在测试数据集上的误差 欠拟合 模型无法得到
  • 6-Gans-03_Face_Generator人脸生成

    人脸生成项目 本项目中 使用生成式对抗网络 Generative Adversarial Nets 来生成新的人脸图像 获取数据 使用以下数据集 MNIST CelebA 由于 CelebA 数据集非常大 所以先在 MNIST 数据集上测试
  • 【Matlab学习笔记】【函数学习】nargin 参数

    转自 http baike haosou com doc 6930505 7152746 html 在matlab中定义一个函数时 在函数体内部 nargin指出了输入参数的个数 特别是在利用了可变参数列表的函数中 用nargin获取输入参
  • log4j

    1 导入Log4j包
  • 论文笔记-深度估计(3)Predicting Depth, Surface Normals and Semantic Labels with a Common Multi-Scale...

    Predicting Depth Surface Normals and Semantic Labels with a Common Multi Scale Convolutional Architecture 这篇文章是eigen 201
  • 负载均衡设备会话保持机制介绍

    会话持久性连接简介 会话保持是负载均衡器设备的一种机制 用于识别客户端与服务器之间交互过程的关连性 在进行负载均衡的同时还保证一系列相关连的访问请求会保持分配到同一台服务器上 针对不同的业务场景需要不同的会话保持配置 并且并不是所有业务系统