F5 LTM 知识点和实验 2-负载均衡基础概念
第二章:负载均衡基础概念
目标:
- 使用网页和TMSH配置virtual servers,pools,monitors,profiles和persistence等。
- 查看统计信息

基础概念:
Node一个IP地址。是创建pool池的基础。可以手工创建也可以自动创建。node和pool member的区别在于node是一个ip,如172.16.20.1,而pool member是一个ip:port,如172.16.20.1:80
Node 状态enabled,disabled,forced offline。
pool member一个ip:port的组合,是在node创建完之后才能创建的,如172.16.20.1:80。
pool是pool member的组合,是一个逻辑组,需要关联到virtual server。
pool 状态enabled,disabled,forced offline。
virtual server一个ip:port的组合,是F5的流量入口之一。
virtual address当我们创建virtual server的时候,会有两个对象产生:virtual server(IP:port)和virtual address(ip),virtual address可以被宣告到网络里。
地址转换(Address Translation):
当一个数据流到达F5设备的时候,进行地址和端口的匹配,如果是F5上的vs,F5就对他进处理,在经典的vs中,数据包将会负载到其中一个pool memebr上,后端服务器是不会感知到这个数据包被F5处理过,后端服务器以为是用户直接访问。
F5设备将一个会话(session)拆分成两个链接(connection),client-side connection的两端分别是client和F5设备,server-side connection两端是F5设备和pool member。F5在这两个链接中间可以修改一些数据,比如加解密,增加字段等。
Fullnat选择(Address Translation Routing Assumptions):
如果你需要将流量流经F5设备,你有两种选择,第一种将服务器的默认网关配置成F5的接口地址,第二种选择将流经F5的流量做源地址和源端口转换。
如果选择源地址源端口转换的话,你需要开启Auto Map的功能,并且建议使用一个浮动地址做转换后的地址。注意,单个ip可以支持64k的并发连接,如果并发连接更多,你需要成倍配置浮动地址,以防止端口耗尽。
使用源地址源端口转换的坏处,你会发现,在后端服务器上抓到的包,源地址全是F5的浮动ip,如果你做日志记录或者来源认证,你会变得很麻烦。如果你使用的是http协议,你可以使用X-Forward-For技术解决此问题。
健康检测(Health Monitoring)
健康检测用于检测设备是否存活和是否正常工作,一般情况,健康检测需要周期性的接收到执行的响应,如果超时,则认为目标不正常,F5就对这个设备进行摘流,直到他恢复正常。
LTM支持node和pool memebr的健康检测。当node健康检测认定不正常的时候,所有有关此node的pool member都会被认定为不正常,但是pool member的健康检测认定为不正常,不会影响node的状态。
对象层次结构和状态(object hierarchy and status):
每一个模块都影响其他的模块,他们都是用层级关系的,比如一个node的健康检测为不正常,会直接将所有有关此node的pool member都会被认定为不正常,但是反过来,一个pool member不正常,不会影响node的状态,当pool member所有成员都不正常,pool会被认定为不正常,同时也会影响virtual server的状态。

状态:
状态可能是通过健康检测做出的认定,也可能是管理员手工配置的。管理员可以通过tmsh或者网页进行配置。分为三种状态:
- Enabled:符合接流条件
- Disabled:保持现有活跃链接,对于新建连接,如果属于已存在的持久性会话(persistence session),则依然会建立链接,否则不会建立。
- Forced offline:保持现有活跃链接,不进行新连接建立。
状态图标:
| 图标 | 解释 |
|---|---|
![]() | 配置为enabled,且检测为可达。对象可用。表示BIG-IP系统为目的地址为该对象的流量服务。 |
![]() | 配置为enabled,但是暂时不可达。该对象当前不可用,但稍后可能在没有用户干预的情况下变得可用。例如,已达到配置连接限制的对象可能会显示黄色状态,然后在连接数量低于配置限制时切换到绿色状态。 |
![]() | 配置为enabled,但是判定为不可达。该对象不可用。表示BIG-IP系统无法为目的地址为该对象的流量提供服务。例如,当一个节点因为不可用而服务检查失败时,可能会出现这种状态。此状态需要用户干预才能将对象状态恢复为绿色。 |
![]() | 对象的可用性未知。例如,该对象未配置为服务检查,该对象的IP地址配置错误,或该对象与网络断开时,可能会出现这种状态。此图标表示会话正在挂起,尚未建立。 注意:状态为unknown的池成员和节点有资格接收客户端请求。 |
![]() | 用户主动禁用(disabled)了一个可用对象。只保持现有会话或者持久化链接流量定向到此对象。 |
![]() | 用户主动下线(forced offline)了一个可用对象,不将流量导向此对象。 |
配置文件(profile):
profile是一个很有用的配置项,可以很容易的定义一个流量的行为。profile可以做到:
- 更改网络流量的行为。
- 对一个数据包进行深层次的检查。
- 减少基础设施的硬件需求,以适应外部技术的变化和发展。
- 调整网络上的性能和吞吐量。
- 减少应用服务器的处理量。
具体的说,profile是一个配置对象,其中包括控制和复制特定网络流量(如HTTP链接),profile还为你提供了一种启用持久性和管理客户端应用程序认证的方法。
persistence profile:
现在,有越来越多的网页应用是有状态的,这意味这一个链接需要维持稳定的上下文关系,比如,电子商务web应用程序需要维护购物车和用户放置物品的逻辑关系。对于负载均衡环境中有状态的应用程序,用户一旦链接,就必须连接到同一个应用程序实例上,以确保访问存储在该实例中的信息是准确的。持久性(persistence)就可以做到这一点。
有很多种实现persistence的方法,简单一些的方法,比如simple,SSL,cookie,高级一些方法,如SIP,Universal和Hash。
simple persistence是一个基于网络层特征的方式,比如基于源目地址的持久性,这种方式是简单的持久性能力,使用简单,但是缺点是在使用源地址亲和持久性的特性时,会导致流量非常不均匀。
cookie persistence是一种使用cookie头来完成持久化能力的方式,许多应用服务器插入一个session id 在响应报文中,这个cookie用于用户上下文信息同步和访问存储服务器的数据。基于此,F5设备向HTTP包头中添加另一个cookie是十分容易的,基于cookie的持久性相较于simple的方式,流量会更加均匀。
source address affinity persistence 源地址亲和持久性允许一个特定ip或者一组ip被选择转发到同一个pool member上。当第一个数据包发送到F5设备上,会根据负载均衡策略进行分配,同时在内存中创建一个持久化记录,之后相同的源地址在访问这个vs的时候就会根据持久化记录的信息转发数据包。每次匹配到持久化记录时,记录中的时间会重置为0,当时间超过老化时间,记录将被删除。
你可以使用命令查看记录。
show ltm persistence persist-recoeds
cookie persistence工作原理是在客户端第一次链接到vs的时候,在响应报文中,F5设备在http包头中插入特定的cookie,这个cookie随着响应报文发送到客户的浏览器中并储存,下一次请求会根据这个特定的cookie转发到特定的pool member中。持久化记根据cookie的老化时间超时而消失,或者客户端关掉网页。F5设备支持多种cookie的持久化,比如:cookie insert、cookie rewrite、cookie passive等。
SSL offload(ssl卸载):

F5的vs可以充当一个TLS/SSL会话的终端,如果流量在F5设备上解密,F5设备可以在发送到pool memebr之前对执行cookie persistence 和irules等操作。这样的优势是,不需要昂贵的SSL加速硬件,还可以为每一个pool member提供单独证书,实现集中管理。
client SSL profile:
当加密的流量到达配置了client ssl profile的vs上,F5设备在ssl协商过过程中充当服务端,流量被解密,此时可以执行iRules,流量策略,ASM策略,cookie persistence的工作。没有加密的流量会转发到pool member上。回复的数据包,在不加密的状态下发送到F5设备上,F5对其进行加密,返回给client。
server SSL profile:
server SSL profile 可以将流量加密之后转发到pool member。这个是对server-side进行加密,不是client-side侧的。
同时使用server和client SSL profile:
单独使用client ssl profile可以提高性能,但是允许线路上未加密流量通过,降低了安全性,我们同时使用server和client SSL profile,以保证安全性,同时还能享受F5的iRules、本地流量策略、cookie persistence等特性。如果不需要这些特性,你可以不配置SSL profile,直接将加密流量转发到pool member上。

Big-ip的配置文件:
| 文件 | 描述 |
|---|---|
| /config/bigip.conf | 包含virtual server、load balancing pools、profile、monitors和SNATs。 |
| /config/bigip_base.conf | 包含platform、network(VLANs、interface、self-ip)、HA configuration data(traffic groups、trust domains) |
| /config/bigip_user.conf | 本地用户的account和加密后的password。 |
| /config/BigDB.dat | 这个数据库保存了一组配置键,这个键值定义了BIG-IP系统各个方面的行为。例如:ui.statistics.modulestatistic.localtraffic.persistencerecords 如果配置成enabled,你可以使用Configuration utility查看persistence的记录,如果配置成disabled,则只能使用tmsh查看persistence记录 |
| /config/bigip.license | 包含lecense的记录,包含日期和能提供的特性 |
保存配置:
tmsh save sys config
可以将内存中运行的配置保存在文件当中,保存文件包含:
- /config/bigip.conf
- /config/bigip_base.conf
- /config/bigip_user.conf
加载配置:
tmsh load sys config
这个命令的效果:
- 重新加载所有本地负载均衡的配置,如vs,pool, monitor等。
- 重新加载网络配置,如selfip,vlan,traffic group。
- 重新加载系统用户信息。
- 保留管理地址
- 保留license文件
- 保留/shared文件夹中的文件
- 保留BigDB.dat中的key
UCS 存档:
使用ucs存档可以将重要的配置文件存入不同的文件夹中,用于灾备。
# 保存
tmsh save sys ucs 20230225_bigip.ucs
# 加载
tmsh load ucs 20230225_bigip.ucs
ucs包含:
- 所有big-ip的配置文件
- 产品系列号
- 本地用户信息和密码
- DNS 的zone 文件
- SSL证书和密钥
注意事项:
- 你需要在创建ucs的设备上进行恢复操作,因为license是与F5的串码相关联的,如果需要更换设备,需要将license关联到新的设备上。重新关联需要照F5的售后。
实验:
使用界面创建一个应用
1、创建一个HTTP 监控器
- Name:configltm_http_monitor
- Type:HTTP
- Send String:GET /index.html\r\n
- Receive String:Server [1-3]

2、创建两个pool
- Name:http_pool
- Monitor:configltm_http_monitor
- Load Balancing Method:Ratio(member)
- Member:172.16.20.3:80 -3,172.16.20.2:80 -2,172.16.20.1:80 -1

- Name:https_pool
- Load Balancing Method:Round Robin
- Member:172.16.20.3:443 ,172.16.20.2:443 ,172.16.20.1:443

3、创建源地址关联持久性配置文件
- Name:configltm_src_persist
- Persistence Type:Source Address Affinity
- Parent Profile:source_addr
- Timeouts:30 seconds
- Prefix Length:Specify IPv4 and 16

4、创建两个vs
- Name:http_vs
- Destination Address:10.10.10.100:80
- Default Pool:http_pool


- Name:https_vs
- Destination Address:10.10.10.100:443
- Default Pool:https_pool
- Default Persistence Profile:configltm_src_persist


5、在浏览器输入http://10.10.10.100,查看pool的流量统计,改变权重4:4:1之后,查看统计。
实验预期:
当您第一次通过访问http_vs及其关联的池http_pool测试HTTP应用程序,并查看本地流量统计信息时,您应该看到,在172.16.20.1、172.16.20.2和172.16.20.3的池成员中,连接分布到所有池成员,比例接近1:2:3。在改变每个成员的比例并重新测试后,连接的分布比例应该接近4:4:1。
当您第一次通过虚拟服务器https_vs及其关联池https_pool测试HTTPS应用程序时,您应该看到做出了一个负载平衡决策。由于附加到虚拟服务器的源地址关联持久性配置文件,来自你电脑的后续连接应该被定向到相同的池成员。您应该已经看到了类似以下的持久性信息:
Sys::Persistent Connections
source-address 10.10.0.0 10.10.10.100:443 172.16.20.1:443 (tmm: 1)
Total records returned: 1
在等待持久性记录过期30秒后,你应该看到F5做出另一个负载平衡决策,然后创建了新的持久性记录。
在Source Address Translation调整成auto map之前时访问不通的,因为不在同一个二层内。
使用TMSH创建一个应用
1、创建一个pool
- Name:ssh_pool
- Load Balancing Method:Round Robin
- Member:172.16.20.3:80 ,172.16.20.2:80 ,172.16.20.1:80
# 创建
create ltm pool ssh_pool load-balancing-mode round-robin members add {172.16.20.1:22 172.16.20.2:22 172.16.20.3:22}
# 查看
list ltm pool ssh_pool
# 手工保存
save sys config
# 离开
quit
2、使用命令查看在bigip.conf是否存在ssh_pool配置。
grep ssh_pool /config/bigip.conf
3、创建一个vs
- Name:ssh_vs
- Destination Address:10.10.10.100:22
- Default Pool:ssh_pool
# 创建
create ltm virtual ssh_vs destination 10.10.10.100:22 pool ssh_pool profiles add { tcp }
# 查看
list ltm virtual ssh_vs
# 查看统计信息
show ltm pool ssh_pool members { all }
show ltm pool ssh_pool
show ltm virtual ssh_vs
# 查看会话
show sys connection ss-server-port 22
保存配置文件成UCS
# 保存
save sys ucs /shared/tmp/test.ucs
# 加载
load sys ucs /shared/tmp/test.ucs
实验预期:
在您最初创建ssh_vs之后,在bigip.conf中找不到它的配置。使用TMSH所做的更改只影响正在运行的配置。为了查看bigip.conf中ssh_vs的条目,必须手动将正在运行的配置保存到存储的配置中。这种行为与Configuration实用程序不同,在Configuration实用程序中,更改在完成后立即记录到正在运行的配置和存储的配置。
bigip.conf包含从上次运行配置保存到存储配置的应用程序流量处理对象,如虚拟服务器、池、监视器和配置文件。
bigip_base.conf包含从上次运行配置保存到存储配置的网络和系统相关对象(如vlan、self ip、设备组和平台信息)。
bigip_user.conf包含BIG-IP系统从上次运行配置保存到存储配置的所有用户的用户名和密码。
bigip.license包含BIG-IP系统的许可信息。服务检查日期将根据最后一次将系统档案提交到F5许可证服务器进行激活的时间而变化。
只有当UCS档案位于/var/local/ucs时,配置实用程序才能看到它们,因此,您保存在/shared/tmp中的UCS在Configuration实用程序中是不可见的。
相关文章:
F5 LTM 知识点和实验 2-负载均衡基础概念
第二章:负载均衡基础概念 目标: 使用网页和TMSH配置virtual servers,pools,monitors,profiles和persistence等。查看统计信息 基础概念: Node一个IP地址。是创建pool池的基础。可以手工创建也可以自动创…...
安全学习DAY08_算法加密
算法加密 漏洞分析、漏洞勘测、漏洞探针、挖漏洞时要用到的技术知识 存储密码加密-应用对象传输加密编码-发送回显数据传输格式-统一格式代码特性混淆-开发语言 传输数据 – 加密型&编码型 安全测试时,通常会进行数据的修改增加提交测试 数据在传输的时候进行…...
OpenCloudOS 与PolarDB全面适配
近日,OpenCloudOS 开源社区签署阿里巴巴开源 CLA (Contribution License Agreement, 贡献许可协议), 正式与阿里云 PolarDB 开源数据库社区牵手,并展开 OpenCloudOS (V8)与阿里云开源云原生数据库 PolarDB 分布式版、开源云原生数…...
如何在Linux系统中使用yum命令安装MySQL
1、安装软件 # yum install -y https://repo.mysql.com//mysql80-community-release-el7-8.noarch.rpm # yum -y install mysql-community-server网址来源:https://dev.mysql.com/downloads/repo/yum/ 2、启动软件 # systemctl enable mysqld# systemctl start my…...
在Ail Linux中手动配置IPv6
第一步,登录阿里云服务器控制台,在“概览”页面找到对应实例,然后单击实例ID。 第二步,在“实例详情”页面中的“网络信息”栏目中,可以发现“IPv6 地址”中没有数据,然后单击“专有网络”的专有网络ID。 第…...
TCP如何保证服务的可靠性
TCP如何保证服务的可靠性 确认应答超时重传流量控制滑动窗口机制概述发送窗口和接收窗口的工作原理几种滑动窗口协议1比特滑动窗口协议(停等协议)后退n协议选择重传协议 采用滑动窗口的问题(死锁可能,糊涂窗口综合征)死…...
【云原生系列】openstack搭建过程及使用
目录 搭建步骤 准备工作 正式部署OpenStack 安装的过程 安装组件如下 登录页面 进入首页 创建实例步骤 上传镜像 配置网络 服务器配置 dashboard配置 密钥配置免密登录 创建实例 绑定浮动ip 免密登录实例 搭建步骤 准备工作 1.关闭防火墙和网关 systemctl dis…...
无涯教程-jQuery - Menu组件函数
小部件菜单功能可与JqueryUI中的小部件一起使用。一个简单的菜单显示项目列表。 Menu - 语法 $( "#menu" ).menu(); Menu - 示例 以下是显示菜单用法的简单示例- <!doctype html> <html lang"en"><head><meta charset"utf-…...
Django用户登录验证和自定义验证类
一、FBV 用户登录验证 1.1 登录验证并加入 session 用户登录时,使用 authenticate 验证用户名和密码是否正确,正确则返回一个用户对象。 用户名默认的字段名是 username 密码默认的字段名是 password 将已验证的用户添加到当前会话(session)中&#x…...
json-server详解
零、文章目录 json-server详解 1、简介 Json-server 是一个零代码快速搭建本地 RESTful API 的工具。它使用 JSON 文件作为数据源,并提供了一组简单的路由和端点,可以模拟后端服务器的行为。github地址:https://github.com/typicode/json-…...
MacOS Monterey VM Install ESXi to 7 U2
一、MacOS Monterey ISO 准备 1.1 下载macOS Monterey 下载🔗链接 一定是 ISO 格式的,其他格式不适用: https://www.mediafire.com/file/4fcx0aeoehmbnmp/macOSMontereybyTechrechard.com.iso/file 1.2 将 Monterey ISO 文件上传到数据…...
哈工大计算机网络课程网络安全基本原理详解之:消息完整性与数字签名
哈工大计算机网络课程网络安全基本原理详解之:消息完整性与数字签名 这一小节,我们继续介绍网络完全中的另一个重要内容,就是消息完整性,也为后面的数字签名打下基础。 报文完整性 首先来看一下什么是报文完整性。 报文完整性…...
K8s:K8s 20个常用命令汇总
写在前面 博文内容为节译整理,用于温习理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式࿰…...
DHCP防护原理
电脑刚连接到网络 是没有IP地址的 。 通过发送广播到DHCPO服务器。 DHCP服务器响应对应的 IP地址(简要过程)。 如果有人私自挂接WIFI,相当于DHCP服务器,但这个DHCP服务器是假的,就会引起电脑接入获取家用WIFI的地址&…...
leetcode2434. 使用机器人打印字典序最小的字符串 出栈顺序 贪心+栈
https://leetcode.cn/problems/using-a-robot-to-print-the-lexicographically-smallest-string/ 给你一个字符串 s 和一个机器人,机器人当前有一个空字符串 t 。执行以下操作之一,直到 s 和 t 都变成空字符串。请你返回纸上能写出的字典序最小的…...
【程序设计】一文讲解程序设计目标:高内聚,低耦合
前言 软件设计的目标是高内聚、低耦合。 如果代码是高耦合和低内聚的,就会出现修改一个逻辑,会导致多处代码要修改,可能影响到多个业务链路,这增加了出bug的业务风险,同时增加了测试回归的范围,导致研发成…...
nginx mirror代码分析
实现方式 mirror逻辑的工作阶段: ngx在log phase之后(在ngx_http_free_request处调用)已完成向client端返回response,在log phase之后完成close connection(短链接),在该阶段处理mirror逻辑不…...
Python代理模式介绍、使用
一、Python代理模式介绍 Python代理模式(Proxy Pattern)是一种结构型设计模式。在代理模式中,代理对象充当了另一个对象的占位符,以控制对该对象的访问。 代理对象和被代理对象实现了相同的接口,因此它们可以互相替代…...
《MySQL45讲》笔记—索引
索引 索引是为了提高数据查询效率,就像书的目录一样。如下图,索引和数据就是位于存储引擎中: 索引常见模型 哈希表 以键值对存储的数据结构。适用于只有等值查询的场景。 有序数组 在等值查询和范围查询场景中性能都特别优秀。但是有…...
Android usb host模式通信示例
当使用Android设备作为USB主机时,可以使用Android提供的USB API来进行USB通信。下面是一个简单的Android USB通信的示例。在这个示例中,我们将发送一条消息到连接的USB设备并从USB设备接收响应。 首先,在AndroidManifest.xml文件中添加以下权…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...






