BIG-IP LTM负载均衡理论

------F5 BIG-IP LTM负载均衡策略----------

1.1 LTM VS工作模式
F5 BIG-IP LTM的内部对于数据包的处理方式,即是VS的工作类型,存在有四种工作模式,分别针对四层数据处理和七层数据处理;
四层处理模式有:Forwarding(IP)
                Performance(Layer 4)
七层处理模式有:Standard
                performance(HTTP)
                
                
1.1.1  Standard
·(首先与client建立连接,再与Pool member建立连接)
·默认工作工作在全代理模式,客户端和服务器端的TCP连接完全独立,BIG-IP维持两个不同的连接。
·在三次握手结束后,BIG-IP按照负载均衡算法选择Pool Member
·客户端和服务器端的TCP参数由TMOS和双方分别协商;
·默认情况下,以客户端源IP与后台建立连接;在打开SNAT的情况下用SNAT地址和后台建立连接。
·Standard vs的端口永远对外开放,无论后台是否有服务器在工作。

1.1.2 性能HTTP
·(首先与Pool member建立连接,再与客户端建立)
· performance HTTP VS仅用于HTTP协议,使用Fast http profile,这是一个TCP、HTTP和oneconnect profile的组合,主要用于加快Http连接速度和减少后台Http server的连接数;
· 只缓存用于分析包头的数据,没有会话保持功能,不能处理SSL,HTTPS;
· BIG-IP通过到Pool Member的TCP连接建立一个空闲的服务器端Flow;
· 当有client请求来时,通过负载均衡算法选择了此服务器,如果发现服务器端Flow是空闲的,则BIG-IP标识其为占用,并发送客户端请求到选定的服务器;

1.1.3 Performance L4模式
· Performance L4 VS基于包到包处理连接,只负责客户端连接的分配和转发,默认不改变TCP连接中的任何参数。
· 客户端和服务器自行协商TCP传输参数。
· Perforamce Layer 4 VS上只有4层的iRules可以使用(意思是这模式下,iRules只能改TCP,改不了http、https等)
· 默认状态下,TCP新建连接的第一个包必须是SYN包,如果是其他的数据报比如ACK、RST等如果不在连接表中,则全部丢弃。
· 利用epva(enhance Packet velocity Acceleration)硬件加速模式,所以叫性能L4模式

1.1.4 Forwarding(IP)=路由模式
·只能使用Fast L4 Profile,translate-address 和translate-port翻译默认为Disable;
· 按照连接处理,类似路由器,但不完全一样,在Fast L4 Profile中开启Loose Initial和Loose Close之后更为接近路由工作模式;
· 所有穿过forwarding YS的连接都将产生连接表
· 没有Pool Member,转发根据目标地址查找本地路由表完成
· 可以使用基于4层的iRules,比如做SNAT
· 无法利用ePVA

1.2 负载均衡策略
BIG-IP LTM进行四层负载均衡的最小元素为TCP连接,所有分配策略均以TCP连接为最小单位,而在七层负载均衡中,最小的元素为每一个完整的交易数据报包,如一个HTTP请求,因此以交易为最小单位进行分配。
负载分配策略主要包含以下几种:
·静态负载均衡算法:轮询,比率,优先权
·动态负载均衡算法:最少连接数,最快响应速度,观察方法,预测法,动态性能分配。
·可编程控制的负载均衡策略:通过编程控制应用流量的导向。

1.2.1.a 静态负载均衡算法;轮询
轮询算法下,以每个客户端新建连接为单位,客户端连接轮流分配到后台的服务器上。

1.2.1.b 比率算法:比率算法
比率算法下,以每个客户端新建连接为单位,将客户端请求按照比率分配到后台的服务器上

1.2.1.c 优先权算法
在正常情况下,所有的客户端请求全部发送到属于高优先级组的member上;当最高优先级群组中的健康的服务器数量小于预定值时,BIG-IP LTM才将请求发送给次优先级的服务器组。

1.2.2.a 动态负载均衡算法:最少连接数
最小连接数为最常用的负载均衡算法之一,在后台服务器处理能力均等的情况下,使用最小的连接数可以得到最为平衡的负载均衡效果。(但是BIG-IP 要维护一张并发表,上面有各个服务器的并发参数)

1.2.2.b 动态负载均衡算法:动态性能分配
前提;BIG-IP知道服务器的CPU使用率(通过健康检查)
动态性能分配通常用于一些服务器资源敏感应用,如集中计算、视频点播等。动态算法是通过BIG-IP上的健康检查来检测服务器的资源占用率,新的请求被分配到资源占用最少的服务器。

1.3 如何选择合适的负载均衡策略:
    在大部分的应用场景中,都采用最小连接算法。如果系统的每秒新建连接数非常高,如果还是采用最小连接数,由于算法在计算时候不可能实时的统计后台服务器的连接数,且是有时间间隔的去进行统计。在这种情况下,可能采用轮询算法可以更为有效的实现负载均衡。
    
    
------F5 BIG-IP LTM会话保持----------

连接和会话的区别:    
会话的概念要广泛一些,简单的说,一个用户登录后,则产生一个session。而这个会话是由多次连接完成。BIG-IP LTM将一个会话里的多次连接认为是同一个用户发起的,是为同一个用户服务的。
BIG-IP LTM的概念中,一个session通常就是会话保持表中的一条记录对应的所有连接。每个命中到这条记录的连接都是属于同一个session的。

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

2.2 常见的会话保持
<1>源地址会话保持(source persistence)
<2>Cookie会话保持
    HTTP Cookie insert(插入)
    HTTP Cookie passive(被动)
    HTTP Cookie Rewrite(重写)
    Cookie Hash
<3>SSL ID会话保持
<4>可编程控制的会话保持
    将会话保持的特性的提取
    将特征与后台服务器相对应

2.2.1 源地址会话保持:将一个源地址认为是一个用户,凡是同一个源地址发过来的连接,则认为是同一个用户发起的多个请求。根据会话保持策略,将这些连接/请求都转发到同一个服务器上。(BIG-IP LTM会维护一张“源地址会话保持表”)

2.2.2 Cookie会话保持
关于HTTP Cookie和Session ID,以下面一个典型的HTTP请求流程

(图)
    通过HTTP流程图看到Cookie有效的改进了HTTP协议的无状态性,使原本无状态的HTTP协议变成有状态的应用协议。
    Cookie的内容包括:名字,值,过期时间,路径和域。
    若不设置过期时间,则表示这个Cookie的生命期为浏览器会话期间,关闭浏览器就会消失。这种生命期为浏览器会话器的cookie被称呼session cookie,一般不存储在硬盘上而是保存在内存里。
    若设置了过期时间,浏览器就会把cookie保存到硬盘上。
    
2.2.2.a HTTP Cookie insert(插入)
(服务器端并不写入Cookie,HTTP响应不带有cookie,所有cookie信息只存在负载均衡设备上)
2.2.2.b TTP Cookie passive(被动)
(服务器写入cookie,HTTP响应里将带有更新的会话保持cookie)
2.2.2.c HTTP Cookie Rewrite(重写)
(进入服务器,服务器创建空白cookie,HTTP回复《带有空白cookie》返回BIG-IP应用负载设备)

2.2.3 SSL ID会话保持(冷门)
    在用户基于SSL访问系统环境里,当SSL对话首次建立时,用户与服务器进行首次信息交换:
    ·交换机安全证书
    ·商议加密和压缩方法
    ·为每条对话建立session ID
    
    
------F5 BIG-IP LTM健康检查----------

3.健康检查:一个健康检查(Monitor)就是一个测试(test);
    ·特定的应用程序
    ·一个预期的回复
    ·在一定时间内
    
    所有BIG-IP 共同特点:
    ·间隔:每个检查的时间间隔
    ·超时时间;这个时间在BIG-IP 标记Node不可用之前返回成功的健康检查结果。

F5 BIG-IP LTM可以使用符合Monitors,所以可使用多重健康检查:
    ·可以使用全部或部分的健康检查结果来标记成员的状态
    
    3.1.健康检查有以下项目:
    《1》基于icmp的健康检查;
    《2》基于TCP端口的健康检查;
    《3》基于UDP端口的健康检查;
    《4》基于应用协议的健康健康

3.1.1 基于icmp的健康检查
    原理:简单的使用ping去探测,只要服务器有回应,则认为服务器正常工作;
    (基于icmp的健康检查属于最基本的健康检查方式)
    
    3.1.2 基于TCP端口的健康检查
    原理:TCP健康检查直接向member的服务器端口发起TCP连接建立请求,连接建立成功即表示服务器的服务在正常工作。
        在频繁检查的情况下,健康检查的流量肯呢个导致一些比较“脆弱”的应用系统产生故障。采用TCP half open的方式,或者采用基于代理的健康检查;
        
    3.1.3 基于UDP端口的健康检查
    原理:大多数的udp应用特点是在是收到错误的请求时,没有任何响应。但UDP协议还是设计了在端口未开放时,默认系统将会回应一个Icmp unreachable数据包,以通知客户端连接错误。(只能检查端口情况,并不能代表真实的业务情况)
    
    3.1.4 基于应用协议的健康健康
    以HTPP协议为例,基于HTTP协议的健康检查过程如下:(负荷较大,几乎浮现业务)
    《1》BIG-IP LTM发起一个HTTP请求到服务器,请求特定资源
    《2》服务器进行回应;
    《3》BIG-IP LTM在返回的内容中查找一个关键字,如果存在该关键字,则认为Web服务器正常工作。

3.2 关联健康检查
    在真实的应用中,经常还可能存在有关连性应用。比如应用A是否能正常对外提供服务,还取决于它的下级服务应用B是否能给A提供需要的数据,而此时应用B不是在负载均衡的控制范围之内。

3.3Monitor状态报告
    ·状态基于健康检查响应及对象层次结构
    虚拟服务virtural server 状态受POOL状态影响
    pool状态受pool members的状态影响
    一个pool的member受这个node的服务状态的影响
    ·当健康检查失败会发生什么?
    ·如果没有得到检查结果,超时时间未到
        -开始怀疑这个成员member
        -没有新连接到这个成员member
        -现有连接被维持
    ·在达到了超时时间前有一个成功的检查结果
        新连接发送到member
    ·如果达到超时时间健康检查失败
        从pool中移除member
        现有连接清楚

3.4 Pool失败机制
    Fallback Host -- 最后备份的server(适用于HTTP和HTTPS profile应用)
    ·当pool members 成员低于活动成员设定(????回HTTP 重定向(http 302) 到客户端)???)
    ·Fallback host server设置是没有健康监控的(备份server)
    
    Priority Group Activation激活低优先组

------F5 BIG-IP LTM应用优化----------

4.BIG-IP LTM应用负载优化技术主要用于提高和优化下面以下三种流量:
《1》TCP应用
《2》UDP应用
《3》HTTP应用(HTTP由于广泛应用,单独设置为一分支)

4.1 TCP应用:(列出常用profile)
   4.1.1 TCP Clinet-side profile
   目标:提高用户体验
   4.1.2 TCP Server-Side profile
   目标:服务器压力卸载
   
   F5已经内置了LAN、WAN和CELL优化的TCP profile配置。通过调整TCP profile多达70个选项;
   通常情况下建议:Clinet side:推荐mptcp-mobile-optimized profile 配置模板
                    Server side:优先推荐tcp-wan-optimized profile
    除非特别了解TCP的工作原理,否则不要调整idle timeout以外的任何参数
    默认tcp profile所设置idle timeout值为300秒
    
    4.1.3 oneconnect --TCP连接复用
    实现连接聚合以降低服务器的TCP的连接总数,减少建立和关闭连接的消耗和延迟。
    (图)
    
    工作范围:
    《1》前提使用VS Standard模式;
    《2》oneconnect profile不是必须和HTTP Profile共用,也可以用于其他应用协议;
    《3》但应用其他应用协议时须使用iRules编程来调用oneconnect

HTTP内容(忽略,附上PPT原件自己了解)

------F5 BIG-IP iRules介绍----------
5.1什么是iRules:
    集成到TMOS架构的编程语言;
    基于工业标准的Tool Command;
    拦截、检查,修改,引导及跟踪进站和出站的应用流量;
    
5.2 VS和iRules关系
    iRules的处理必须依赖于VS对流量的接收;
    通过事件触发机制,iRules可以控制流量在VS内部处理的整个过程

(课堂笔记)第三章:F5 LTM 负载均衡理论的更多相关文章

  1. IP通信基础课堂笔记----第三章(自认为的重点)

    网络层协议IP IP数据包格式:固定部分        {  标识(16):计数器,源站每发送一个分组,标识+1:源IP地址的标识是全网唯一的. (包含TCP/UDP首部)  |  标志(3):当最低 ...

  2. Android群英传笔记——第三章:Android控件架构与自定义控件讲解

    Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...

  3. 《DOM Scripting》学习笔记-——第三章 DOM

    <Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...

  4. 《Linux内核设计与分析》第六周读书笔记——第三章

    <Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...

  5. spring boot 笔记--第三章

    spring boot 笔记 第三章,使用Spring boot 构建系统: 强烈建议支持依赖管理的构建系统,Maven或Gradle 依赖管理: Spring Boot的每版本都会提供它支持的依赖列 ...

  6. The Road to learn React书籍学习笔记(第三章)

    The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...

  7. [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设

    [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...

  8. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

  9. SpringCloud学习笔记(五):Ribbon负载均衡

    简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端 负载均衡的工具 .(重点:客户端) 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提 ...

随机推荐

  1. day11面向对象 多态 静态方法 (三)

    多继承 class 类名(父类1,父类2)  ----- 默认使用第一个父类   重写父类方法 方法名和父类方法名一样 当父类和子类的方法名重名时,默认使用的是子类中的方法     调用被重写的父类的 ...

  2. POJ2806 Square

    题目描述 给定\(2*1\)和\(2 * 2\)两种规格的地砖,请问\(2 * n\)的地面总共有多少种方法? 下面是铺满\(2*17\)的地面的示意图. 输入输出格式 输入 多组数据,每组数据包括1 ...

  3. SpringBoot--- 使用SpringSecurity进行授权认证

    SpringBoot--- 使用SpringSecurity进行授权认证 前言 在未接触 SpringSecurity .Shiro 等安全认证框架之前,如果有页面权限需求需要满足,通常可以用拦截器, ...

  4. Alink漫谈(十九) :源码解析 之 分位点离散化Quantile

    Alink漫谈(十九) :源码解析 之 分位点离散化Quantile 目录 Alink漫谈(十九) :源码解析 之 分位点离散化Quantile 0x00 摘要 0x01 背景概念 1.1 离散化 1 ...

  5. Airtest操作多台云手机,进行分发,多个脚本后端调度

    一.核心重点 使用python后端框架:tornado 调度:redis队列 存手机的class_name采取头取尾曾 多台手机连接方式 connect_device(f"Android:/ ...

  6. 第1章 Hive入门

    第1章 Hive入门 1.1 什么是Hive Hive:由Facebook开源用于解决海量结构化日志的数据统计. Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提 ...

  7. Golang中使用set

    两种 go 实现 set 的思路, 分别是 map 和 bitset. map 的 key 肯定是唯一的,而这恰好与 set 的特性一致,天然保证 set 中成员的唯一性.而且通过 map 实现 se ...

  8. Redis的数据类型及使用场景

    1.redis 的数据类型 String 字符串 Hash 哈希 List 列表 Set 集合 ZSet(Sorted Set) 有序集合 2.使用场景 2.1 String 用户token 可以用r ...

  9. c++线性表和数组的区别

    在传统C语言程序中,描述顺序表的存储表示有两种方式:静态方式.动态方式 顺序表的静态存储表示: #define maxSize 100 typedefintT; typedefstruct{ T da ...

  10. Python | 多线程死锁问题的巧妙解决方法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第25篇文章,我们一起来聊聊多线程开发当中死锁的问题. 死锁 死锁的原理非常简单,用一句话就可以描述完.就是当多线程 ...