首頁 資訊 負(fù)載均衡的健康檢查腳本應(yīng)用

負(fù)載均衡的健康檢查腳本應(yīng)用

來源:泰然健康網(wǎng) 時(shí)間:2026年04月08日 19:04

健康監(jiān)測(cè)是負(fù)載均衡不可缺少的一個(gè)重要環(huán)節(jié),所有負(fù)載均衡流量分配的不同方式實(shí)現(xiàn)都是基于穩(wěn)定可靠的健康監(jiān)測(cè)基礎(chǔ)之上的;針對(duì)一個(gè)無法提供應(yīng)用的端口,負(fù)載均衡設(shè)備應(yīng)該較快發(fā)現(xiàn)并將其從可用應(yīng)用端口中剔除,在該端口恢復(fù)后再重新加入。

A10網(wǎng)絡(luò)的AX系列產(chǎn)品,本身已經(jīng)提供了豐富的健康檢測(cè)方式,如下圖,包含了多個(gè)不同協(xié)議,甚至可以使用多個(gè)不同健康監(jiān)測(cè)的聯(lián)動(dòng)(例如或,與的關(guān)系)?;旧峡梢詽M足絕大多數(shù)應(yīng)用的健康監(jiān)測(cè)需求。

但是有一次在銀行客戶碰到有些特殊的健康監(jiān)測(cè)需求,總結(jié)如下:

客戶是在Linux上基于java自行開發(fā)的應(yīng)用,該應(yīng)用根據(jù)用戶請(qǐng)求數(shù)目增加會(huì)建立新進(jìn)程,由于開發(fā)需求,該程序需要進(jìn)行復(fù)雜的數(shù)據(jù)調(diào)用和處理,導(dǎo)致可以正常工作的并發(fā)進(jìn)程數(shù)目有限。在該應(yīng)用并發(fā)進(jìn)程達(dá)到一定數(shù)值時(shí),即使Linux服務(wù)器本身CPU, 內(nèi)存正常,也無法再繼續(xù)對(duì)外提供服務(wù)。

客戶要求: 能根據(jù)每臺(tái)服務(wù)器上具體的應(yīng)用進(jìn)程數(shù)設(shè)定端口可用狀態(tài); 最好可以提前預(yù)警通知,可以通知超過警戒線,以及回復(fù)后告知。

解決思路

1)在客戶端Linux服務(wù)器中,解決進(jìn)程統(tǒng)計(jì)的問題,并增加定制化SNMP功能

2)A10負(fù)載均衡功設(shè)備負(fù)責(zé)通過SNMP獲取該進(jìn)程統(tǒng)計(jì)數(shù),判定端口可用性;同時(shí)負(fù)責(zé)發(fā)送預(yù)警,告警和恢復(fù)郵件通知(告警功能其實(shí)服務(wù)器上可以做,但是由于負(fù)載均衡是決定該端口是否可用的最終決策者,交給負(fù)載均衡處理最合理。)

具體配置

在Linux服務(wù)器上

1)新增腳本,統(tǒng)計(jì)進(jìn)程并發(fā)并發(fā)數(shù),例如命名為HttpdThreadCheck的腳本

#!/bin/sh  #例如監(jiān)測(cè)進(jìn)程名稱為b的所有統(tǒng)計(jì) conn=`ps -aef | grep -i b |wc -l`  #warn, down, send分別代表告警狀態(tài),端口狀態(tài),以及通知狀態(tài) #告警,預(yù)警,恢復(fù)的郵件通知均只發(fā)送一次,避免批量持續(xù)發(fā)送 warn=0  down=0  send=0  if [ $conn -gt 55 ]; then  warn=1  down=1    if [ ! -f /tmp/a10down ]; then      echo >/tmp/a10down      send=1    fi    if [ ! -f /tmp/a10warn ]; then       echo >/tmp/a10warn    fi  elif [ $conn -gt 49 ]; then  warn=1  down=0    if [ -f /tmp/a10down ]; then     send=1     rm -rf /tmp/a10down    fi    if [ ! -f /tmp/a10warn ]; then       send=1       echo >/tmp/a10warn    fi  echo >/tmp/a10warn  else  warn=0  down=0   if [ -f /tmp/a10down ]; then     send=1     rm -rf /tmp/a10down   fi   if [ -f /tmp/a10warn ]; then     send=1     rm -rf /tmp/a10warn   fi  fi  echo "$down:$warn:$conn:$send" 

2)修改SNMP參數(shù),新增自定義OID

通常位于/etc/snmp/snmp.conf

A: 修改SNMP community “public”的屬性

注銷缺省配置

com2sec notConfigUser default public 

B: 增加public屬性并配置SNMP返回參數(shù)以及腳本位置

rocommunity public  exec .1.3.6.1.4.1.2021.18 HttpdThreadCheck  /etc/httpthreadcheck.sh

其中 .1.3.6.1.4.1.2021.18為SNMP對(duì)應(yīng)OID值,HttpdThreadCheck為名稱(可使用任何有效名);/etc/httpthreadcheck.sh為執(zhí)行腳本; 該配置的優(yōu)勢(shì)在于,只有在外部查詢?cè)揙ID時(shí),才會(huì)執(zhí)行觸發(fā)對(duì)應(yīng)的腳本并返回結(jié)果

C:重啟SNMP服務(wù), 例如 service snmpd restart

D:如果必要,需要取消selinux功能

通常在/etc/selinux/config文件中,使用 SELINUX=disabled

如果馬上有效,執(zhí)行命令 setenforce 0

E: 此時(shí)可以通過遠(yuǎn)程設(shè)備執(zhí)行snmpwalk獲取相關(guān)信息

[root@CentOS ~]# snmpwalk -c public -v 2c 192.168.159.129 .1.3.6.1.4.1.2021.18   UCD-SNMP-MIB::ucdavis.18.1.1 = INTEGER: 1   UCD-SNMP-MIB::ucdavis.18.2.1 = STRING: "tcpCurrEstab"   UCD-SNMP-MIB::ucdavis.18.3.1 = STRING: "/etc/httpthreadcheck.sh"   UCD-SNMP-MIB::ucdavis.18.100.1 = INTEGER: 0   UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: "0:0:60:0"   [root@CentOS ~]# 

 如果只關(guān)心相關(guān)結(jié)果特定返回值,可以使用snmpgetnext命令;例如

[root@CentOS ~]# snmpgetnext  -c public -v 1 192.168.159.129 .1.3.6.1.4.1.2021.18.100.1  UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: "0:0:60:0"   在A10負(fù)載均衡上; 創(chuàng)建新的外部程序,例如命名為httpcheck, 將如下腳本貼入

A10健康檢測(cè)腳本  #!/bin/sh          function send_mail()          {          # $1 subject;  $2 msg   $3 send mail or not               smtp="10.1.1.219"          to="xxx@xxx.com"          from="xxx@xxx.com"          port=25                 if [ $3 -gt 0 ]; then           mailsend -smtp $smtp -p $port -t $to -f $to -sub ""$1"" -d ax +c +b -M ""$2""  -u $to -w test        fi          }                 numb=`snmpgetnext -c public $HM_SRV_IPADDR  -v1 .1.3.6.1.4.1.2021.18.100.1 | cut -d " -f2`            
down=`echo $numb |  cut -d : -f1`          warn=`echo $numb |  cut -d : -f2`          number=`echo $numb |  cut -d : -f3`          sendmail=`echo $numb |  cut -d : -f4`             
if [ $number -gt 25 ]; then          send_mail  "$HM_SRV_IPADDR down: from A10 con is $number "  "Server is marked down" $sendmail        echo "Mark it down"          exit 1          elif [ $number -gt 22 ]; then          send_mail  "$HM_SRV_IPADDR warning: from A10 con is $number "  "Sever warning" $sendmail          echo "problem. Need watch"          exit 0          else          echo "up"       send_mail  "$HM_SRV_IPADDR back to normal: from A10 con is $number "  "Server recovered and marked up" $sendmail           exit 0          fi          exit 0 

然后再配置服務(wù)器端口的對(duì)應(yīng)健康監(jiān)測(cè)即可

health monitor httpthreadcheck   method external program httpcheck  !  slb server 10.7.32.199 10.7.32.199     port 8080  tcp     health-check httpthreadcheck 

健康監(jiān)測(cè)腳本也是一個(gè)可以根據(jù)需求靈活定義的開放工具,這里只是一個(gè)示例供參考。另外健康監(jiān)測(cè)的腳本請(qǐng)勿與A10的aFleX功能(基于七層的流量分發(fā)等)混淆。

(J.L.)

相關(guān)知識(shí)

負(fù)載均衡 健康檢查異常排查v1
負(fù)載均衡 健康檢查概述
網(wǎng)關(guān)負(fù)載均衡 配置健康檢查
健康檢查 負(fù)載均衡 ULB
負(fù)載均衡健康檢查方式icmp
負(fù)載均衡SLB四層(TCP/UDP)健康檢查出現(xiàn)異常的解決方法
如何驗(yàn)證服務(wù)器負(fù)載均衡
lvs+keepalived自定義健康檢查腳本(MISC
負(fù)載均衡如何優(yōu)化視頻播放體驗(yàn)?
健康檢查腳本的最新版本V5.5.5

網(wǎng)址: 負(fù)載均衡的健康檢查腳本應(yīng)用 http://m.gysdgmq.cn/newsview1930220.html

推薦資訊