LVS自动化添加及删除ipvsadm和后端服务器健康状态检测脚本

 
LVS director 负载均衡器增加IPVSADM脚本
#vim director.sh
#!/bin/bash
#chkconfig: - 88 66
#description: this script to add lvs IP

VIP=192.168.0.254
DIP=192.168.0.100
RIP1=192.168.0.101
RIP2=192.168.0.102
PORT=80
SCHELE=wrr
LOCKFILE=/var/lock/subsys/ipvsadm

case $1 in
start)
#增加vip地址
 /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
 /sbin/route add -host $VIP dev eth0:0
#清除防火墙规则
 /sbin/iptables -F
 /sbin/iptables -X
 /sbin/iptables -Z
#开启ip转发功能
 echo 1 > /proc/sys/net/ipv4/ip_forward
#清除ipvsadm 规则
 /sbin/ipvsadm -C
#增加ipvsadm direcotor规则
 /sbin/ipvsadm -A -t $VIP:$PORT -s $SCHELE
#增加realserver 规则
 /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP1 -g
 /sbin/ipvsadm -a -t $VIP:$PORT -r $RIP2 -g
#增加ipvsadm 锁文件
 /bin/touch  $LOCKFILE
;;
stop)
 if [ ! -e $LOCKFILE ];then
  echo "the ipvsadm is stopped..."
 else
 #删除vip地址
  /sbin/ifconfig eth0:0 down
 #关闭ip转发
  echo 0 > /proc/sys/net/ipv4/ip_forward
 #清除ipvsadm 规则
  /sbin/ipvsadm -C
 #删除锁文件
  /bin/touch $LOCKFILE
 fi
;;
status)
 if [ ! -e $LOCKFILE ];then
  echo "the ipvsadm is stopped..."
 else
  echo "the ipvsadm is running..."
 fi
;;
*)
 echo "Usage;$0:{start|stop|status}"
;;
esac
 
 
LVS 增加 real server脚本
Realserver script
#!/bin/bash
#chkconfig: - 77 66
#description: this script to add real server 
#
VIP=192.168.0.254
case $1 in
start)
#arp_ignore: 定义接收到ARP请求时的响应级别;1表示仅在请求的目标地址配置请求到达的接口上的时候,才给予响应
#arp_announce:定义将自己地址向外通告时的通告级别:2表示仅向与本地接口上地址匹配的网络进行通告;
 echo 1 >/proc/sys/net/ipv4/conf/lo/arp_ignore
 echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
 echo 2 >/proc/sys/net/ipv4/conf/lo/arp_announce
 echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce
#增加VIP地址到lo:0接口,增加路由条目:目的地址为VIP,由lo:0接口响应(即:源地址为VIP作为响应报文给客户端)
 
 /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up && /sbin/route add -host $VIP dev lo:0
 
#新建一个锁文件,前面执行成功则建立锁文件
 if [  $? -eq 0 ];then
  /bin/touch /var/lock/subsys/ipvsreal
 else
  echo "fail to add vip address and route."
 fi
;;
stop)
#恢复arp响应级别
    echo 0 >/proc/sys/net/ipv4/conf/lo/arp_ignore
 echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore
 echo 0 >/proc/sys/net/ipv4/conf/lo/arp_announce
 echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce
#剔除VIP地址(路由地址自动删掉)
  loip=`/sbin/ifconfig lo:0 |grep $VIP`
  if [ ‘$loip‘  == ‘‘ ];then
   echo "VIP address not found."
  else
   /sbin/ifconfig lo:0 down && rm -rf /var/lock/subsys/ipvsreal
   if [ $? -eq 0 ] ;then
    echo "VIP address had been deled."
   else
    echo "VIP address del failly."
    exit 1
   fi
  fi
;;
status)
 if [ ! -e /var/lock/subsys/ipvsreal ];then
  echo "LVS-DR real server stoped."
 else
  echo "LVS-DR real server is running."
 fi
;;
*)
 echo "Usage: $0 {start | stop |status}"
 exit 1
;;
esac

RS健康状态检查脚本
#vim check_health.sh
#!/bin/bash
#chkconfig: - 88 77
#description: check health real server or not
#设置变量:VIP, director端口, 本地地址, real sever IP数组,状态数组(1表示正常,0表示异常),权重数组,real server 服务地址,LVS 类型,状态检测次数,日志
VIP=192.168.0.254
CPORT=80
FAIL_BACK=127.0.0.1
RS=("192.168.0.101" "192.168.0.102")
declare -a RSSTATUS
RW=("2" "1")
PPORT=80
TYPE=g
CHKLOOP=3
LOG=/var/log/ipvsmonitor.log
#当real server 恢复时,增加 real server 到 director 中
addrs(){
        ipvsadm -a -t $VIP:$CPORT -r $1:$PPORT -$TYPE -w $2
        [ $? -eq 0 ] && return 0 || return 1
}
#当real server 不可用时,删除director中ipvsadm 条目
delrs(){
                ipvsadm -d -t $VIP:$CPORT -r $1:$PPORT
                [ $? -eq 0 ] && return 0 || return 1
}
#real server 状态检测 
checkrs(){
                local I=1
                while [ $I -le $CHKLOOP ];do
                        if curl --connect-timeout 1 http://$1 &>/dev/null;then
                                return 0
                        fi
                let I++
                done
                return 1
}
#初始化状态数组,当ipvsadm 中条目有real server IP规则时 状态为1;当realserver 在ipvsadm 条目中缺失时 状态为0
initstatus(){
        local I
        local COUNT=0
         for I in ${RS[*]};do
                if ipvsadm -L -n |grep "$I:$PPORT" &>/dev/null;then
                        RSSTATUS[$COUNT]=1
                else
                        RSSTATUS[$COUNT]=0
                fi
        let COUNT++
        done
}
#调用初始化函数
initstatus
#定义死循环
while :;do
        let COUNT=0
        #逐个遍历 real server
        for I in ${RS[*]};do
         #检测real server 正常与否
                if checkrs $I ;then
                #当检测到real 正常但ipvsadm中没有real server 条目时增加 real server 条目
                        if [ ${RSSTATUS[$COUNT]} -eq 0 ];then
                                addrs $I ${RW[$COUNT]}
                                [ $? -eq 0 ]&& RSSTATUS[$COUNT]=1 && echo "`date +%F%H:%M:%S`, $I is back." >>$LOG
                        fi
                else
                 #当检测到real server 异常时,删除在 ipvsadm 中异常的realserver 条目
                        if [ ${RSSTATUS[$COUNT]} -eq 1 ];then
                                delrs $I
                                [ $? -eq 0 ]&& RSSTATUS[$COUNT]=0 && echo "`date +%F%H:%M:%S`, $I is gone." >>$LOG
                        fi
                fi       
        let COUNT++
        done
        
#每个五秒钟遍历一次        
sleep 5
done

LVS自动化添加及删除ipvsadm和后端服务器健康状态检测脚本

时间: 2024-08-07 22:28:32

LVS自动化添加及删除ipvsadm和后端服务器健康状态检测脚本的相关文章

如何编写LVS对Real Server的健康状态检测脚本

简介:Linux 虚拟服务器(Linux Virtual Server. LVS),是一个由章文松开发的自由软件.利用KVS可以实现高可用的.可伸缩缩的Web, Mail, Cache和Medial等网络股务..井在此基 础上开发支持庞大用户数的,可伸缩的,高可用的电子商务应用.LVS1998年发展到现在,已经变得比较成熟,目前广泛应用在各种网络服务和电了商务应用 中.LVS具有很好的伸缩缩性.可靠性和管埋性,通过LVS要实现的最终目标是:利用linux 操作系统和LVS集群软件实现一个高可用.

使用ldirectord实现后端RS健康状态监测及LVS调度功能

Ldirectord功能描述: 如果在高可用服务中直接将ipvsadm定义为一种资源代理,使用ipvsadm来生成ipvs规则,这样生效的lvs不能实现对后端的RealServer实现健康监测的功能,而heartbeat中的ldirectord可以实现对后端RealServer健康状态监测的功能,同时能使用内核中的ipvs功能利用ipvsadm规则启动lvs服务,实现对后端RealServer的调度功能,即有请求至前端的Director时,可以将请求转发至各RealServer而定义的ipvsa

LVS(Linux Viretual Server) 负载均衡器 + 后端服务器

定义: LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统. 结构: 一般来说,LVS集群采用三层结构,其主要组成部分为: A.负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的. B.服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB.MAIL.FTP和DNS等. C.共享存储(

【转】nginx 主动式后端服务器健康检查

原文链接  http://tengine.taobao.org/document_cn/http_upstream_check_cn.html ngx_http_upstream_check_module 该模块可以为Tengine提供主动式后端服务器健康检查的功能. 该模块在Tengine-1.4.0版本以前没有默认开启,它可以在配置编译选项的时候开启:./configure --with-http_upstream_check_module Examples http { upstream

confd+etcd完成后端服务器的自动检测

我们在前端转发这里采用的是haproxy,采用lvs或者nginx都可以本质上都是改变配置文件 首先为haproxy创建日记文件 mkdir -p /var/log/haproxy touch haproxy.log 开启rsyslog的haproxy的日记记录功能添加: $ModLoad imudp $UDPServerRun 514 在#save boot message aslo to boot.log之后添加 local0.*    /var/log/haproxy/haproxy.lo

Zabbix监控Tengine 后端服务器健康检查

一 应用场景描述: 前端使用Tengine作为负载均衡器,需要对监控Tengine到后端服务器的健康状况,利用Tengine提供的接口可以获取每一个后端主机的状态,是up还是down等. 二 编写Zabbix监控脚本 Tengine的ngx_http_upstream_check_module 模块提供后端监控检查功能.可以使用html,csv,json三种格式查看后端主机状态,这里我们使用json格式便于编写脚本 /status?format=html /status?format=csv /

透过F5,探测后端应用健康状态

起因: 一朋友运维的系统在生产环境中遇到了一些异常,为了排查故障,准备在互联网检测F5后端的50台应用是否正常. (为什么没在内网检测?一开始我也想问,内网检控是有的,但由于环境比较复杂,没有那种从客户端一直到服务器的状态监测.) 环境说明: 前端F5,分发后端50台应用服务器 准备目录:/usr/share/wget/wget_app 准备文件:ap_cookies,放至/usr/share/wget/wget_app 点击链接下载:http://down.51cto.com/data/223

利用ldirectord实现lvs后端realserver健康状态检查

ldirectord用来实现LVS负载均衡资源在主.备节点间的故障转移.在首次启动时,ldirectord可以自动创建IPVS表.此外,它还可以监控各RealServer的运行状态,一旦发现某RealServer运行异常时,还可以将其从IPVS表中移除. ldirectord进程通过向RealServer的RIP发送资源访问请求并通过由RealServer返回的响应信息来确定RealServer的运行状态.在Director上,每一个VIP需要一个单独的ldirectord进程.如果RealSe

LVS健康检测脚本分享

1.真实服务器健康状态检测 我们可以通过Shell脚本,实现对LVS后端的真实服务器开放服务的健康状态检测功能.当真实服务器服务出现问题,则自动将其从集群服务中移除,当真实服务器服务恢复,则自动将其加入到负载均衡集群服务中. 1.1 基于端口的健康检测 脚本思路: 通过扫描后端服务器的端口来判断真实服务器是否健康! 若端口开放则表示真实服务器健康,则将其加入到LVS集群中.若已存在集群中则不做任何操作. 若端口未开发则表示真实服务器故障,则将其从LVS集群中移除.若不存在则不做任何操作. She