1、真实服务器健康状态检测
我们可以通过Shell脚本,实现对LVS后端的真实服务器开放服务的健康状态检测功能。当真实服务器服务出现问题,则自动将其从集群服务中移除,当真实服务器服务恢复,则自动将其加入到负载均衡集群服务中。
1.1 基于端口的健康检测
脚本思路:
通过扫描后端服务器的端口来判断真实服务器是否健康!
若端口开放则表示真实服务器健康,则将其加入到LVS集群中。若已存在集群中则不做任何操作。
若端口未开发则表示真实服务器故障,则将其从LVS集群中移除。若不存在则不做任何操作。
Shell脚本内容如下:
# cat lvs_port_health.sh
#配置集群服务地址和真实服务器地址池 vip="172.16.16.100" vport="80" rspool="172.16.16.2 172.16.16.3" rsport="80" #本地时间 localtime=`date +%Y-%m-%d\ \%H:%M:%S` #安装NMAP扫描端口工具 nmap=`rpm -qa |grep nmap |wc -l` if [ $nmap = 0 ] then yum -y install nmap fi #真实服务器健康检测机制: #当真实服务器故障时自动从集群服务中移除 #当真实服务器恢复时自动加入集群服务 while :; do sleep 3; for i in $rspool do openport=`nmap $i -p $rsport |awk 'NR==6{print $2}'` rstesting=`ipvsadm -ln|grep $i:$rsport|wc -l` if [ $openport = open ] then if [ $rstesting = 0 ] then ipvsadm -a -t $vip:$vport -r $i:$rsport -g >/dev/null 2>&1 echo "$localtime 真实服务器[$i:$rsport]加入集群服务[$vip:$vport]!" fi else if [ $rstesting != 0 ] then ipvsadm -d -t $vip:$vport -r $i:$rsport echo "$localtime 真实服务器[$i:$rsport]从集群服务[$vip:$vport]中移除!" fi fi done done |
1.2 基于访问的健康检测
在WEB集群中,基于端口的健康检测并不够精确,端口开放不代表WEB服务是正常工作的,所以我们更好的解决方法就是直接去访问一下。
脚本思路:
通过直接访问WEB来判断真实服务器是否健康!
若可访问则表示真实服务器健康,则将其加入到LVS集群中。若已存在集群中则不做任何操作。
若访问失败则表示真实服务器故障,则将其从LVS集群中移除。若不存在则不做任何操作。
Shell脚本内容如下:
# cat lvs_access_health.sh
#配置集群服务地址和真实服务器地址池 vip="172.16.16.100" vport="80" rspool="172.16.16.2 172.16.16.3" rsport="80" #本地时间 localtime=`date +%Y-%m-%d\ \%H:%M:%S` #安装CURL工具 curl=`rpm -qa |grep curl |wc -l` if [ $curl = 0 ] then yum -y install curl fi #真实服务器健康检测机制: #当真实服务器故障时自动从集群服务中移除 #当真实服务器恢复时自动加入集群服务 while :; do sleep 3; for i in $rspool do rstesting=`ipvsadm -ln|grep $i:$rsport|wc -l` curl $i:$rsport >/dev/null 2>&1 if [ $? = 0 ] then if [ $rstesting = 0 ] then ipvsadm -a -t $vip:$vport -r $i:$rsport -g >/dev/null 2>&1 echo "$localtime 真实服务器[$i:$rsport]加入集群服务[$vip:$vport]!" fi else if [ $rstesting != 0 ] then ipvsadm -d -t $vip:$vport -r $i:$rsport echo "$localtime 真实服务器[$i:$rsport]从集群服务[$vip:$vport]中移除!" fi fi done done |
原文地址:http://blog.51cto.com/10978134/2122029