《浅谈F5健康检查常用的几种方式》—那些你应该知道的知识(二)

2023-12-18 13:38

本文主要是介绍《浅谈F5健康检查常用的几种方式》—那些你应该知道的知识(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

负载均衡作为实现应用高可用和高可靠的一种方式,已成为目前数据中心内不可或缺的一个环节,并扮演着越来越重要的作用,而F5正是这一领域的佼佼者。要实现应用的高可用,如何探测负载均衡后端应用的可用性是其中非常重要的一个环节,该环节又被称作应用的健康检查。

本文将在下面的章节中,就作者工作中使用的几种F5健康检查的方式做简单的介绍和分析。主要包括TCP_HALF_OPEN、TCP ECV、HTTP GET这三种。我认为每一种健康检查的方式,都有其特点,而没有绝对的优劣。

##############################################

写在前面:

F5用来做健康检查的配置被统称为monitor,F5会优先通过与pool membet相同vlan的Self ip发起健康检查,采用主备状态的两台F5,均会对pool中的member进行健康检查。F5内置了一些常用的monitor配置,用户可以直接使用。如:icmp、tcp、tcp-half-open等。用户也可以根据自己的需要创建自己定制化的monitor。

##############################################

针对TCP应用的健康检查,目前工作中用到的有两种:

1、TCP-HALF-OPEN

2、另一种是通过F5发送TCP报文给应用,通过判断收到应用的返回值中是否包含有我用来判断应用健康的值,来监测应用的健康程度。这种方式被F5称作ECV(Extended Content Verification)。

下面将分别针对这两种方式做简要的分析。

##############################################

1、TCP-HALF-OPEN方式

TCP-HALF-OPEN的探测方式,实际是F5每隔一个固定的时间,发送一个SYN包给资源池pool中的一个member,等待服务器返回SYN_ACK,在收到SYN_ACK后,F5会使用RST,将该连接重置。

若F5在发出SYN包后,超过规定的时间仍未收到SYN_ACK,则认为这个member不可用,不再向这个member分配应用流量。

F5默认内置了一个tcp-half-open的monitor,具体配置界面如下:

从图中可以看到默认的,tcp_half_open的健康检查方式,探测间隔为5秒,超时时间为16秒。

下面来看一下具体的数据包:

在F5上抓包,利用wireshark对抓包文件进行过滤,192.168.92.7为F5的self ip,192.168.92.11为健康检查目标服务器。

通过Time 列可以看出,每隔约5秒钟,F5发起一次健康检查,F5发送SYN包与服务器建立TCP连接,服务器响应SYN包,同时服务器TCP状态变为SYN_RCVD,回复SYN_ACK报文,F5在收到SYN_ACK后,向member服务器发送RST包,将该链接重置,服务器收到RST包后,TCP状态重新变为listen状态。

F5内置的monitor中,还有一个TCP monitor,他与TCP_HALF_OPEN的区别,主要是TCP monitor是通过发送FIN包的方式,正常中断连接的。TCP_HALF_OPEN相对于TCP的方式,发送包的数量更少。但是由于采用RST的方式中断连接,可能会出现问题(目前还没有碰到),需要前期进行测试。

需要注意的是:

tcp_half_open和tcp这种健康检查方式,只能判断目标服务器的tcp端口是否处于listen状态,判断目标服务器是否有建立TCP连接的能力,不能完全用来判断应用的可用性。这并不是一种理想的健康检查方式。

######################################################

2、TCP ECV模式

前文已经讲过,TCP ECV模式是一种定制化的监控模式,通过F5发送定制化的TCP报文,之后在返回值中匹配指定内容,判断应用状态。

目前,已经在我工作的公司中,已存在通过F5发送定长报文和XML格式报文。同时已知的F5支持的报文格式还有16进制构造的字符串等。

进行TCP ECV模式的健康检查的案例。通过这种方式进行应用健康检查,往往需要应用系统开发人员首先提供可用来进行健康检查的探测报文。F5发送该探测报文,应用收到后,响应该报文。这时,如果该探测报文,可以由应用直接回复,无需经过数据库,则该健康检查只检查到应用层面。若该探测报文,是需要在数据库中进行查询等操作,则可通过在这种健康检查方式,探测这个目的member的应用可用性和其对数据库的可用性。所以,采用这种模式的健康检查,与应用系统开发人员的沟通将极为重要。这可能包括了,探测频度的商定、判断应用程序状态指定特征码的唯一性等。

下面来看一个例子,

已知x.x.61.55通过TCP 38001端口对外提供服务

开发提供的健康检查探测报文如下:

可以首先通过sockettool软件,判断该报文的正确性,判断该报文是否被服务器接受。

在F5中,创建monitor,并命名,选择tcp作为父monitor,如下图:

将开发提供的报文粘贴进Send String一栏中。同时我们得知,该应用系统在收到可识别的报文后,会返回带有00000特征码的报文,我们就可以通过这个特征码,判断应用是否可用。在Receive String中输入000000,F5会在收到的返回报文中查找该字符,若查到则健康检查通过,反之失败。

下面我们看一下具体数据包:

红底部分为F5作为客户端发送的探测报文,我们可以看到F5发送由开发提供的探测报文,在收到返回报文中,匹配到指定的000000特征码,则健康检查通过。

其中在具体的配置过程中,有几点需要注意:

  • 探测报文中不能带有换行符

  • 探测报文中部分字符需要进行转义,例如双引号,其中xml报文中标记了xml版本和编码格式的字段中的的双引号可以由单引号代替。

  • 推荐使用火狐浏览器,进行该项配置。

  • 新建monitor需要管理员权限。

#######################################################

HTTP GET

针对HTTP应用的健康检查,常用的是通过HTTP GET的方式,获取指定页面,通过判断页面中是否有指定的字符串,判断http应用的健康状态。

配置页面如下,其中父monitor选择为http

下面来看一个具体的案例,http get的内容为:

GET /ibxx/ HTTP/1.1 \r\n

下面看具体数据包,如下图:

可以看到,F5首先与目标服务器建立TCP连接,之后通过HTTP GET的方式,获取指定页面。服务器响应该请求,如下图:

在这里,我们常通过判断收到200,作为判断http服务正常的依据。

200状态码:表示请求已成功,请求所希望的响应头或数据体将随此响应返回。

我们也可以通过其他字符,作为判断http应用运行正常的依据。

最后,F5会通过发送RST包的方式,将该连接复位。

其中需要注意的是:

F5发送的是http 0.9的get请求,所以我们需要针对应用工作的http版本,构造get内容,例如:

HTTP version 1.1:GET /index.html HTTP/1.1 \r\n

HTTP version 1.0:GET /index.html HTTP/1.0 \r\n

F5同样支持HTTP POST,作为健康检查的一种方式。

#############################################################

至此,我们介绍了F5常用的TCP_HALF_OPEN、TCP ECV、HTTP GET这三种健康检查的方式,除此以外,F5还支持多种健康检查方式,包括访问特定应用的健康检查方式,如FTP、Oracle等。目前在我司还未应用,有待后续进一步探索。

这篇关于《浅谈F5健康检查常用的几种方式》—那些你应该知道的知识(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/508589

相关文章

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

使用shardingsphere实现mysql数据库分片方式

《使用shardingsphere实现mysql数据库分片方式》本文介绍如何使用ShardingSphere-JDBC在SpringBoot中实现MySQL水平分库,涵盖分片策略、路由算法及零侵入配置... 目录一、ShardingSphere 简介1.1 对比1.2 核心概念1.3 Sharding-Sp

Spring创建Bean的八种主要方式详解

《Spring创建Bean的八种主要方式详解》Spring(尤其是SpringBoot)提供了多种方式来让容器创建和管理Bean,@Component、@Configuration+@Bean、@En... 目录引言一、Spring 创建 Bean 的 8 种主要方式1. @Component 及其衍生注解

python中的显式声明类型参数使用方式

《python中的显式声明类型参数使用方式》文章探讨了Python3.10+版本中类型注解的使用,指出FastAPI官方示例强调显式声明参数类型,通过|操作符替代Union/Optional,可提升代... 目录背景python函数显式声明的类型汇总基本类型集合类型Optional and Union(py

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

IDEA与MyEclipse代码量统计方式

《IDEA与MyEclipse代码量统计方式》文章介绍在项目中不安装第三方工具统计代码行数的方法,分别说明MyEclipse通过正则搜索(排除空行和注释)及IDEA使用Statistic插件或调整搜索... 目录项目场景MyEclipse代码量统计IDEA代码量统计总结项目场景在项目中,有时候我们需要统计

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点