加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

LVS下的RealServer脚本

发布时间:2016-11-02 08:10:01 所属栏目:Linux 来源:网络整理
导读:实验环境:rhel5.8 Director DIP:192.168.88.132 VIP:192.168.88.120 RealServer RIP1:192.168.88.129 VIP:192.168.88.120 RIP1:192.168.88.134 VIP:192.
副标题[/!--empirenews.page--]

实验环境:rhel5.8

Director

DIP:192.168.88.132        VIP:192.168.88.120

RealServer

RIP1:192.168.88.129       VIP:192.168.88.120

RIP1:192.168.88.134       VIP:192.168.88.120

DR模型,调度算法为wlc

       需求实现:模型正常工作,及Director实现自动检测,当任意RS故障时,自动将其移除,当检测到其状态正常时,再将其添加进来,并保证其原有属性不变。

       Director的脚本放置为:/etc/init.d/director和/etc/init.d/lvs,其中director脚本可使用chkconfig -add director进行管理。  lvs仅作函数放置即可,其功能笔者已将其整合进director脚本,负责进行检测RS的状态并做操作的,也只有这个是笔者自己写的,并为其提供了简单的配置文件(/etc/sysconfig/lvs.conf) ,默认为两秒检测一次,如需修改,直接修改lvs.conf里面的sec=n秒 即可。废话不多,上代码:

       对了,为了方便各位看官,相关文件可以直接附件下载。

Director第一个脚本:

cat /etc/init.d/director  
#!/bin/sh  
#  
# LVS script for VS/DR  
#  
# chkconfig: 345 99 99  
# description: LVS DR  
#  
# processname: director  
#  
. /etc/rc.d/init.d/functions  
     
     
VIP=192.168.88.120  
RIP1=192.168.88.129  
RIP2=192.168.88.134  
PORT=80  
     
#  
case "$1" in
start)             
     
  /sbin/ifconfig eth1:1 $VIP broadcast $VIP netmask 255.255.255.255 up  
  /sbin/route add -host $VIP dev eth1:1  
     
# Since this is the Director we must be able to forward packets  
  echo 1 > /proc/sys/net/ipv4/ip_forward  
     
# Clear all iptables rules.  
  /sbin/iptables -F  
     
# Reset iptables counters.  
  /sbin/iptables -Z  
     
# Clear all ipvsadm rules/services.  
  /sbin/ipvsadm -C  
     
# Add an IP virtual service for VIP 192.168.0.219 port 80  
# In this recipe, we will use the round-robin scheduling method.   
# In production, however, you should use a weighted, dynamic scheduling method.   
  /sbin/ipvsadm -A -t $VIP:80 -s wlc  
     
# Now direct packets for this VIP to 
# the real server IP (RIP) inside the cluster  
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 9  
  /sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 8  
     
  /bin/touch /var/lock/subsys/ipvsadm &> /dev/null
;;   
stop)  
#  NUM1=`ps aux|grep lvs|grep -v grep|awk '{print $2}'`  
#   `kill $NUM1`  
     
# Stop forwarding packets  
  echo 0 > /proc/sys/net/ipv4/ip_forward  
     
# Reset ipvsadm  
  /sbin/ipvsadm -C &>/dev/null
     
# Bring down the VIP interface  
  /sbin/ifconfig eth1:1 down &>/dev/null
  /sbin/route del $VIP &>/dev/null
        
  /bin/rm -f /var/lock/subsys/ipvsadm &>/dev/null
        
  echo "ipvs is stopped..."
;;  
status)  
  if [ ! -e /var/lock/subsys/ipvsadm ]; then 
    echo "ipvsadm is stopped ..."
  else
    echo "ipvs is running ..."
    ipvsadm -L -n  
  fi  
;;  
*)  
  echo "Usage: $0 {start|stop|status}"
;;  
esac  
     
[ -x /etc/rc.d/init.d/lvs ] && . /etc/rc.d/init.d/lvs  
     
    LVS_DIRECTOR &

完成后,记得执行 chkconfig -add director 表急着启动哈;下面上lvs脚本代码:

#!/bin/sh  
#  
# LVS script for VS/DR  
#  
# chkconfig: 345 95 93  
# description: LVS DR Check 
#  
# processname: lvs.sh  
#  
# Author: MOS  
# Script name: lvs.sh  
# Date & Time: 2012-11-25/00:41:17  
# Version: 1.0.1  
# Description:  
#  
     
LVS_DIRECTOR(){  
     
[ ! -x /sbin/ipvsadm ] && exit 1   
[ ! -x /sbin/ipvsadm-save ] && exit 1   
#[ ! -x /sbin/ipvsadm ] && echo "no such command: ipvsadm" 
#[ ! -x /sbin/ipvsadm-save ] && echo "no such command: ipvsadm" 
     
[ -f /etc/sysconfig/lvs.conf ] && . /etc/sysconfig/lvs.conf  
     
     
Test=${Test:-.mos.html}  
TestStr=${TestStr:-MOS}  
Sec=${Sec:-10}  
Log=${Log:-Off}  
[ $Log = "On" ] && Logfile=${Logfile:-/var/log/ipvs.log}  
     
VIP=`ipvsadm-save -n 2>/dev/null|awk '{print $3}'|uniq`  
#[ -z $VIP ] && echo "Not such VIP" && exit 1   
[ -z $VIP ] && exit 1   
RIP=(`ipvsadm-save -n 2>/dev/null|awk '{print $5}'|grep "^[0-9].*[0-9]$"`)  
#[ -z "${RIP[0]}" ] && echo "Not such RIP" && exit 2   
[ -z "${RIP[0]}" ] && exit 2   
     
Tmpfile=`mktemp /tmp/lvs.XXXXXX 2> /dev/null`  
`ipvsadm-save -n > $Tmpfile`  
Rtmp=${Rtmp:-On}  
[ $Rtmp = "On" ] && `find /tmp -type f -mtime +2 -name "lvs.*" -exec rm -rf {} ;`  
     
while :;do
     
    for i in ${RIP[*]};do
          
    Str=`elinks -dump "$i"/"$Test" 2>/dev/null|awk '{print $1}'`  
    [[ "$Str" != "$TestStr" ]] && `ipvsadm -d -t $VIP -r $i 2>/dev/null` && continue
#   [[ "$Str" != "$TestStr" ]] && Restore=`ipvsadm-save -n|grep $i` && `ipvsadm -d -t $VIP -r $i 2>/dev/null` && continue 
     
    RIP_1=`ipvsadm -Ln 2>/dev/null|grep $i`  
    [[ -n "$RIP_1" ]] && continue
     
    if [[ "$Str" == "$TestStr" ]] ;then 
        Restore=`grep $i $Tmpfile 2>/dev/null|uniq`  
        ResN=`grep $i $Tmpfile 2>/dev/null|uniq|wc -l`  
        [ $ResN -ne 1 ] && [[ "$Log" == "On" ]] && echo "Warn: Please RIP quantity." >> $Logfile  
         `ipvsadm $Restore &>/dev/null`  
    fi  
     
    done  
        Quit=`ipvsadm-save -n 2>/dev/null`  
        [[ -z "$Quit" ]] && exit 0  
sleep $Sec  
done  
}  
     
#LVS_DIRECTOR

记得完成后给执行权限,其配置文件如下:

查看本栏目更多精彩内容:http://www.bianceng.cn/OS/Linux/

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读