《浅谈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

相关文章

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

将Java程序打包成EXE文件的实现方式

《将Java程序打包成EXE文件的实现方式》:本文主要介绍将Java程序打包成EXE文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录如何将Java程序编程打包成EXE文件1.准备Java程序2.生成JAR包3.选择并安装打包工具4.配置Launch4

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo