zoukankan      html  css  js  c++  java
  • 《浅谈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

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

    可以看到,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

    HTTP version 1.0:GET /index.html HTTP/1.0

    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

  • 相关阅读:
    Postman----Presets(预先设置)的使用
    Postman-----Response body:JSON value check的使用介绍
    Linux下的eclipse的安装
    update-alternatives --Install
    linux配置java环境变量(详细)
    ubuntu: 终端全屏快捷键
    Linux/Unix中的命令提示符prompt
    Linux查看系统信息的一些命令及查看已安装软件包的命令(转)
    第一课、OpenGL绘制直线等等
    Depth Buffer
  • 原文地址:https://www.cnblogs.com/jiftle/p/11416700.html
Copyright © 2011-2022 走看看