负载均衡的健康检查脚本使用51CTO博客 - 凯发娱乐

负载均衡的健康检查脚本使用51CTO博客

2019年04月04日10时19分57秒 | 作者: 辰宇 | 标签: 健康,脚本,负载 | 浏览: 1606

健康监测是负载均衡不行短少的一个重要环节,一切负载均衡流量分配的不同方法完成都是依据安稳牢靠的健康监测根底之上的;针对一个无法供给运用的端口,负载均衡设备应该较快发现并将其从可用运用端口中除掉,在该端口康复后再重新加入。

A10网络的AX系列产品,自身现已供给了丰厚的健康检测方法,如下图,包含了多个不同协议,乃至能够运用多个不同健康监测的联动(例如或,与的联系)。基本上能够满意绝大多数运用的健康监测需求。

可是有一次在银行客户碰到有些特别的健康监测需求,总结如下:

客户是在Linux上依据java自行开发的运用,该运用依据用户恳求数目添加会树立新进程,因为开发需求,该程序需求进行杂乱的数据调用和处理,导致能够正常作业的并发进程数目有限。在该运用并发进程到达必定数值时,即便Linux效劳器自身CPU, 内存正常,也无法再继续对外供给效劳。

客户要求: 能依据每台效劳器上详细的运用进程数设定端口可用状况; 最好能够提早预警告诉,能够告诉超越警戒线,以及回复后奉告。

处理思路

1)在客户端Linux效劳器中,处理进程计算的问题,并添加定制化SNMP功用

2)A10负载均衡功设备担任经过SNMP获取该进程计算数,断定端口可用性;一起担任发送预警,告警和康复邮件告诉(告警功用其实效劳器上能够做,可是因为负载均衡是决议该端口是否可用的终究决策者,交给负载均衡处理最合理。)

详细装备

在Linux效劳器上

1)新增脚本,计算进程并发并发数,例如命名为HttpdThreadCheck的脚本

  1. #!/bin/sh 
  2. #例如监测进程称号为b的一切计算
  3. conn=`ps -aef | grep -i b |wc -l` 
  4. #warn, down, send别离代表告警状况,端口状况,以及告诉状况
  5. #告警,预警,康复的邮件告诉均只发送一次,防止批量继续发送
  6. warn=0 
  7. down=0 
  8. send=0 
  9. if [ $conn -gt 55 ]; then 
  10. warn=1 
  11. down=1 
  12.   if [ ! -f /tmp/a10down ]; then 
  13.     echo >/tmp/a10down 
  14.     send=1 
  15.   fi 
  16.   if [ ! -f /tmp/a10warn ]; then 
  17.      echo >/tmp/a10warn 
  18.   fi 
  19. elif [ $conn -gt 49 ]; then 
  20. warn=1 
  21. down=0 
  22.   if [ -f /tmp/a10down ]; then 
  23.    send=1 
  24.    rm -rf /tmp/a10down 
  25.   fi 
  26.   if [ ! -f /tmp/a10warn ]; then 
  27.      send=1 
  28.      echo >/tmp/a10warn 
  29.   fi 
  30. echo >/tmp/a10warn 
  31. else 
  32. warn=0 
  33. down=0 
  34.  if [ -f /tmp/a10down ]; then 
  35.    send=1 
  36.    rm -rf /tmp/a10down 
  37.  fi 
  38.  if [ -f /tmp/a10warn ]; then 
  39.    send=1 
  40.    rm -rf /tmp/a10warn 
  41.  fi 
  42. fi 
  43. echo "$down:$warn:$conn:$send" 

2)修正SNMP参数,新增自界说OID

一般坐落/etc/snmp/snmp.conf

A: 修正SNMP community “public”的特点

刊出缺省装备

  1. com2sec notConfigUser default public 

B: 添加public特点并装备SNMP回来参数以及脚本方位

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

其间 .1.3.6.1.4.1.2021.18为SNMP对应OID值,HttpdThreadCheck为称号(可运用任何有用名);/etc/httpthreadcheck.sh为履行脚本; 该装备的优势在于,只要在外部查询该OID时,才会履行触发对应的脚本并回来成果

C:重启SNMP效劳, 例如 service snmpd restart

D:假如必要,需求撤销selinux功用

一般在/etc/selinux/config文件中,运用 SELINUX=disabled

假如立刻有用,履行指令 setenforce 0

E: 此刻能够经过长途设备履行snmpwalk获取相关信息

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

 假如只关怀相关成果特定回来值,能够运用snmpgetnext指令;例如

  1. [root@CentOS ~]# snmpgetnext  -c public -v 1 192.168.159.129 .1.3.6.1.4.1.2021.18.100.1 
  2. UCD-SNMP-MIB::ucdavis.18.101.1 = STRING: "0:0:60:0"  
在A10负载均衡上; 创立新的外部程序,例如命名为httpcheck, 将如下脚本贴入

  1. A10健康检测脚本 
  2. #!/bin/sh         
  3. function send_mail()         
  4. {         
  5. # $1 subject;  $2 msg   $3 send mail or not       
  6.       
  7. smtp="10.1.1.219"         
  8. to="xxx@xxx.com"         
  9. from="xxx@xxx.com"         
  10. port=25         
  11.       
  12. if [ $3 -gt 0 ]; then         
  13.  mailsend -smtp $smtp -p $port -t $to -f $to -sub "\"$1\"" -d ax +c +b -M "\"$2\""  -u $to -w test       
  14. fi         
  15. }         
  16.       
  17. numb=`snmpgetnext -c public $HM_SRV_IPADDR  -v1 .1.3.6.1.4.1.2021.18.100.1 | cut -d \" -f2`            
  18. down=`echo $numb |  cut -d : -f1`         
  19. warn=`echo $numb |  cut -d : -f2`         
  20. number=`echo $numb |  cut -d : -f3`         
  21. sendmail=`echo $numb |  cut -d : -f4`         
  22.    
  23. if [ $number -gt 25 ]; then         
  24. send_mail  "$HM_SRV_IPADDR down: from A10 con is $number "  "Server is marked down" $sendmail       
  25. echo "Mark it down"         
  26. exit 1         
  27. elif [ $number -gt 22 ]; then         
  28. send_mail  "$HM_SRV_IPADDR warning: from A10 con is $number "  "Sever warning" $sendmail         
  29. echo "problem. Need watch"         
  30. exit 0         
  31. else         
  32. echo "up"      
  33. send_mail  "$HM_SRV_IPADDR back to normal: from A10 con is $number "  "Server recovered and marked up" $sendmail          
  34. exit 0         
  35. fi         
  36. exit 0 

然后再装备效劳器端口的对应健康监测即可

  1. health monitor httpthreadcheck 
  2.  method external program httpcheck 
  3. slb server 10.7.32.199 10.7.32.199 
  4.    port 8080  tcp 
  5.    health-check httpthreadcheck 

健康监测脚本也是一个能够依据需求灵敏界说的敞开东西,这儿仅仅一个示例供参阅。别的健康监测的脚本请勿与A10的aFleX功用(依据七层的流量分发等)混杂。

(J.L.)

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章