LVS下的RealServer脚本
|
副标题[/!--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/ (编辑:佛山站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

