公司有几套代理服务器,都是采用keepalived+lvs架构搭建的squid代理服务器,保证员工的上网正常, 公司大区的员工多,几乎在先人数都是很高的,今天早上出现了一台机器假死, 端口监听和程序状态都是正常的, keepalived集群也没有把这台假死的机器剔除掉,照样分发了流量过去,导致了 部分地区上网异常,所以琢磨着搞一个lvs自定义的健康检查。下面是我查到的lvs的CHECK方式 ,keepalived上写的misc_check 参数,

    real_server 10.90.250.5 3128 {
    weight 10
    MISC_CHECK {
      misc_path "/usr/local/bin/check_squidproxy.sh 172.31.10.21 3128 https://www.baidu.com"  
      misc_timeout 10
      misc_dynamic
    }

然后检查脚本如下

    cat /usr/local/bin/check_squidproxy.sh
#!/bin/bash
# Author: Fisher at sudops.com
# Script: check_squidproxy.sh
# Version: 1.0
#

if [ $# -ne 3 ];then
  echo "Warning: check_command error."
  exit 1
else
  PROXY_IP=$1
  PROXY_PORT=$2
  CHECK_URL=$3
  CMD=`/usr/bin/curl -I -x ${PROXY_IP}:${PROXY_PORT} "${CHECK_URL}" 2>/dev/null | grep "200 OK" | wc -l`
  if [ ${CMD} -ne 1 ];then
    echo "CRITCAL: check proxy ${PROXY_IP} failed." 
    exit 1
  else
    echo "OK: check proxy ${PROXY_IP} OK." 
    echo 0
  fi
fi