Linux7服务状态检查脚本,Linux集群系列之:脚本实现LVS中DR模型安装以及后端服务健康状态检查...

DR类型中,Director和RealServer的配置脚本示例:

Director脚本:

#!/bin/bash

#

# LVS script for VS/DR

# chkconfig: - 90 10

#

. /etc/rc.d/init.d/functions

#

VIP=172.16.100.1

DIP=172.16.100.2

RIP1=172.16.100.7

RIP2=172.16.100.8

PORT=80

RSWEIGHT1=2

RSWEIGHT2=5

#

case "$1" in

start)

/sbin/ifconfig eth0:1 $VIP broadcast $VIP

netmask 255.255.255.255 up

/sbin/route add -host $VIP dev eth0:0

# 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

$RSWEIGHT1

/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w

$RSWEIGHT2

/bin/touch /var/lock/subsys/ipvsadm

&> /dev/null

;;

stop)

# Stop forwarding packets

echo 0 >

/proc/sys/net/ipv4/ip_forward

# Reset ipvsadm

/sbin/ipvsadm -C

# Bring down the VIP interface

/sbin/ifconfig eth0:0 down

/sbin/route del $VIP

/bin/rm -f /var/lock/subsys/ipvsadm

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

RealServer脚本:

#!/bin/bash

#

# Script to start LVS DR real server.

# chkconfig: - 90 10

# description: LVS DR real server

#

.  /etc/rc.d/init.d/functions

VIP=172.16.100.1

host=`/bin/hostname`

case "$1" in

start)

# Start LVS-DR real server on this machine.

/sbin/ifconfig lo down

/sbin/ifconfig lo up

echo 1 >

/proc/sys/net/ipv4/conf/lo/arp_ignore

echo 2 >

/proc/sys/net/ipv4/conf/lo/arp_announce

echo 1 >

/proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 >

/proc/sys/net/ipv4/conf/all/arp_announce

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask

255.255.255.255 up

/sbin/route add -host $VIP dev lo:0

;;

stop)

# Stop LVS-DR real server loopback

device(s).

/sbin/ifconfig lo:0 down

echo 0 >

/proc/sys/net/ipv4/conf/lo/arp_ignore

echo 0 >

/proc/sys/net/ipv4/conf/lo/arp_announce

echo 0 >

/proc/sys/net/ipv4/conf/all/arp_ignore

echo 0 >

/proc/sys/net/ipv4/conf/all/arp_announce

;;

status)

# Status of LVS-DR real server.

islothere=`/sbin/ifconfig lo:0 | grep

$VIP`

isrothere=`netstat -rn | grep "lo:0" | grep

$VIP`

if [ ! "$islothere" -o ! "isrothere"

];then

# Either

the route or the lo:0 device

# not

found.

echo

"LVS-DR real server Stopped."

else

echo

"LVS-DR real server Running."

fi

;;

*)

# Invalid

entry.

echo "$0:

Usage: $0 {start|status|stop}"

exit

1

;;

esac

后端服务健康状态检查,功能如果两个realserver都挂了则127.0.0.1启动。

#!/bin/bash

VIP=115.24.12.121

CPORT=80

FAIL_BACK=127.0.0.1

RS=("115.24.12.123" "115.24.12.124")

declare -a RSSTATUS

RW=("2" "1")

RPORT=80

TYPE=g

CHKLOOP=3

LOG=/var/log/ipvsmonitor.log

addrs() {

ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT

-$TYPE -w $2

[ $? -eq 0 ] && return 0 || return

1

}

delrs() {

ipvsadm -d -t $VIP:$CPORT -r

$1:$RPORT

[ $? -eq 0 ] && return 0 || return

1

}

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

}

initstatus() {

local I

local COUNT=0;

for I in ${RS[*]}; do

if ipvsadm -L -n | grep

"$I:$RPORT" &> /dev/null ; then

RSSTATUS[$COUNT]=1

else

RSSTATUS[$COUNT]=0

fi

let COUNT++

done

}

let num=0

declare -i FLAG=1

initstatus

while :; do

let COUNT=0

for I in ${RS[*]}; do

if checkrs $I; then

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

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

let sum=0

for II in ${RSSTATUS[*]}; do

let sum=$II+$sum

done

if [ $sum -eq 0 ];then

let num++

else

let num=$num-$num

fi

if [ $sum -eq 0 ]&&[ $num -eq 1

];then

FLAG=0

addrs

$FAIL_BACK 1

[ $?

-eq 0 ] && echo "`date +'%F %H:%M:%S'`, $FAIL_BACK is

start." >> $LOG

fi

if [ $num -eq 0 ]&&[ $sum -gt 0

]&&[ $FLAG -eq 0 ];then

FLAG=1

delrs

$FAIL_BACK

[ $?

-eq 0 ] && echo "`date +'%F %H:%M:%S'`, $FAIL_BACK is

stop." >> $LOG

fi

sleep 5

done

测试:现在关掉realserver1

日志信息:2016-06-09 07:01:45, 115.24.12.123 is gone.

打开realserver1

日志信息:2016-06-09

07:02:33, 115.24.12.123 is back.

现在关掉realserver2

日志信息:2016-06-09 07:01:45,

115.24.12.124 is gone.

打开realserver2

日志信息:2016-06-09 07:02:33, 115.24.12.124

is back.

同时关掉realserver1与realserver2

日志信息:

2016-06-09 07:04:18, 115.24.12.124 is gone.

2016-06-09 07:04:23, 115.24.12.123 is gone.

2016-06-09 07:04:23, 127.0.0.1 is start.

同时打开realserver1与realserver2

日志信息:

2016-06-09 07:05:12, 115.24.12.123 is back.

2016-06-09 07:05:13, 127.0.0.1 is stop.

2016-06-09 07:05:18, 115.24.12.124 is back.

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值