生产中,我们需要检测RS状态,当RS服务异常时,应该将RS移出集群,而当RS恢复之后,再将RS加入到集群中。下面是脚本内容
#!/bin/bash VIP=192.168.10.3 ##集群服务端口号 CPORT=80 RS=(192.168.10.7 192.168.10.8) ###RS主机的状态,1表示状态正常 RSTATUS=(1 1) #权重 RW=(2 1) ###RS主机上实际的服务端口 RPORT=80 ###lVS的模式,这里以DR模式为例 TYPE=g ###add函数表示将RS加入到集群,del函数表示将RS移出集群 add() { ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2 [ $? -eq 0 ] && return 0 || return 1 } del() { ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT [ $? -eq 0 ] && return 0 || return 1 } while :; do let COUNT=0 for I in ${RS[*]}; DO if curl --connect-timeout 1 http://$I &> /dev/null; then if [ ${RSTATUS[COUNT]} -eq 0 ];then add $I ${RW[COUNT]} [ $? -eq 0 ] && RSTATUS[$COUNT]=1 fi else if [ ${RSTATUS[COUNT]} -eq 1 ]; then del $I [ $? -eq 0 ] && RSTATUS[$COUNT]=0 fi fi let COUNT++ done sleep 5 done
脚本思路:写了一个循环,每隔5秒钟去检测一次RS的状态,
1、如果RS状态正常,而RS本身在集群中,那么什么也不做,如果RS不在集群中,则将RS加入到集群中
2、如果RS状态异常,而RS本身在集群中,那么将RS从集群中删除
时间: 2024-10-04 13:13:14