《浅谈F5健康检查常用的几种方式》—那些你应该知道的知识(二)
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_17736151/article/details/82720288
负载均衡作为实现应用高可用和高可靠的一种方式,已成为目前数据中心内不可或缺的一个环节,并扮演着越来越重要的作用,而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等。目前在我司还未应用,有待后续进一步探索。
————————————————
版权声明:本文为CSDN博主「BBIE」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_17736151/article/details/82720288
《浅谈F5健康检查常用的几种方式》—那些你应该知道的知识(二)的更多相关文章
- 浅谈Spring解决循环依赖的三种方式
引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 第一种: ...
- 浅谈MySQL同步到ElasticSearch的几种方式及其优缺点
同步双写 优点:业务逻辑简单. 缺点: 硬编码,有需要写入mysql的地方都需要添加写入ES的代码: 业务强耦合: 存在双写失败丢数据风险: 性能较差:本来mysql的性能不是很高,再加一个ES,系统 ...
- $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...
- tomcat的虚拟目录映射常用的几种方式
我们在项目部署的时候,可以采用多种方式,接下来我们将在实际中比较常用的几种方式总结如下. 1.可以直接将我们的项目丢到tomcat的webapps目录下,这样当tomcat重启的时候,我们就可以访 ...
- js页面跳转常用的几种方式(转)
js页面跳转常用的几种方式 转载 2010-11-25 作者: 我要评论 js实现页面跳转的几种方式,需要的朋友可以参考下. 第一种: 复制代码代码如下: <script langu ...
- Jmeter中的参数化常用的几种方式
Jmeter中的参数化常用的几种方式,这里讲一下前两个方式,最后一个在csv参数化里已详细讲解. 1.用户参数 2.函数助手 3.CSV Data Set Config 一.用户参数 位置:添加-前 ...
- String常用使用方法,1.创建string的常用3+1种方式,2.引用类型使用==比较地址值,3.String当中获取相关的常用方法,4.字符串的截取方法,5.String转换常用方法,6.切割字符串----java
一个知识点使用一个代码块方便查看 1.创建string的常用3+1种方式 /* 创建string的常用3+1种方式 三种构造方法 public String():创建一个空字符串,不含有任何内容: p ...
- 针对后台TCP服务F5健康检查配置
1.TCP-HALF-OPEN方式 TCP-HALF-OPEN的探测方式,实际是F5每隔一个固定的时间,发送一个SYN包给资源池pool中的一个member,等待服务器返回SYN_ACK,在收到SYN ...
- F5健康检查导致的服务端连接异常RST
1. TCP健康检查 比如阿里云,F5负载设备当前都有这种机制. 该实现机制可能会导致后端ECS认为相关TCP连接出现异常(非正常退出),并在业务软件如Java连接池等日志中抛出相应的错误信息,如Co ...
随机推荐
- hive 外部表和内部表的区别和相互转换
Hive内部表和外部表区别 1.创建内部表时,内部表的数据文件是保存在指定的路径的:如若创建外部表,则只记录数据所在的路径,不会对数据位置做改变. 2.删除表的时候,内部表元数据和数据会跟着一起删除. ...
- ab接口压力测试工具使用
ab的使用 模拟并发请求100次,总共请求10000次 命令模板: ab -c 100 -n 10000 待测试网站(建议完整路径) 内容解释: Server Software: nginx/1.10 ...
- xtarbackup 简单恢复
xtrbackup Xtrabackup安装 #下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/ep ...
- 行为型模式(六) 状态模式(State)
一.动机(Motivate) 在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同. 如何在运行时根据对象的状态 ...
- 项目前端 - vue配置 | axios配置 | cookies配置 | element-ui配置 | bootstrap配置
vue项目创建 环境 1.傻瓜式安装node: 官网下载:https://nodejs.org/zh-cn/ 2.安装cnpm: >: npm install -g cnpm --regis ...
- pandas数据类型(二)与numpy的str和object类型之间的区别
现象: Numpy区分了str和object类型,其中dtype(‘S’)和dtype(‘O’)分别对应于str和object. 然而,pandas缺乏这种区别 str和object类型都对应dtyp ...
- Tensorflow细节-P84-梯度下降与批量梯度下降
1.批量梯度下降 批量梯度下降法是最原始的形式,它是指在每一次迭代时使用所有样本来进行梯度的更新.从数学上理解如下: 对应的目标函数(代价函数)即为: (1)对目标函数求偏导: (2)每次迭代对参数进 ...
- linux学习7 Linux文件系统功能和作用详解
一.终端 1.用户界面 GUI: GNome KDE CLI: bash,zsh,sh,csh,tcsh,ksh 2.远程连接 a.ssh协议. 查看系统是否监听于tcp协议的22号端口: ss - ...
- flutter报错:NoSuchMethodError: The method '>' was called on null.
写了个list,发现出不来,报错 flutter: Another exception was thrown: RenderBox was not laid out: _RenderScrollSem ...
- Luogu P1903 BZOJ 2120 数颜色 带修改的莫队
https://www.luogu.org/problemnew/show/P1903 之前切过这道题,复习莫队再切一遍,不过我之前写的是主席树和树状数组,也不知道我当时怎么想的…… 这个题卡常我没写 ...