LVS检测同机多实例

一般来讲由于LVS的配置文件里在调用脚本时只有一个输入参数占位符%h

  

send_program = "/etc/sysconfig/ha/lvs.sh %h"    
...........
server app1 {
         address = 10.92.21.18
         active = 1
         port = 8080
         weight = 1
     }
     server app2 {
         address = 10.92.21.20
         active = 1
         port = 8080
         weight = 1
     }

 %h 自动匹配server里的address,但是如果这些server的address一样(一台机上有多个负载实例的情况下),LVS就会启动不了。

为此我做些特殊处理

我使用的机器原本的ip为10.92.21.18,在这机器上部署两个应用实例,端口分别为8080和8082,另外我通过


  


 
设置了一个虚拟ip,对应关系如下:

10.92.21.18----》8080

10.92.21.200---》8082

 send_program = "/etc/sysconfig/ha/lvs_ips.sh %h"
。。。。。。。
server app1 {
         address = 10.92.21.18
         active = 1
         port = 8080
         weight = 1
     }
     server app2 {
         address = 10.92.21.200
         active = 1
         port = 8082
         weight = 1
     }

 lvs_ips.sh

#!/bin/sh
tmpUriName=$1
keyword="SUCCESS"
timeout=10
errorTimes="1"

case "$tmpUriName" in  
"10.92.21.18")
uri="http://${tmpUriName}:8080/XXXX/lvs.Monitor"
;;	
"10.92.21.200")
uri="http://${tmpUriName}:8082/XXXX/lvs.Monitor"
;;
esac

writeError(){

	
  
  if [ -f /tmp/.errorcount_${tmpUriName} ]; then
    errorCount="$(cat /tmp/.errorcount_${tmpUriName})"
  else
    errorCount="0"
  fi

  if [ $errorCount == ${errorTimes} ]; then
    echo "NOSUCCESS"
    #echo "LOG ${tmpUriName} FAIL">>/tmp/.errorcount
  else
    echo ${errorTimes} >/tmp/.errorcount_${tmpUriName}
    echo "OK"
    #echo "LOG ${tmpUriName} FAIL OK">>/tmp/.errorcount
  fi
}

testConn(){
  if [ `GET -t ${timeout} ${uri} |grep ${keyword} |wc -l` -gt 0 ]; then
    echo "0" > /tmp/.errorcount_${tmpUriName}
    echo "OK"
    #echo "LOG ${tmpUriName} OK">>/tmp/.errorcount
  else
    writeError
  fi
}
testConn

 

搞掂,有图为证~



 


 

猜你喜欢

转载自phipray.iteye.com/blog/2235803