服务器间 存活状态,Shell脚本监控LVS后台服务器存活状态(示例代码)

简介

在生产工作中,后台的服务器并不可能永远都处于正常运行状态,若服务器发生宕机,为了不影响正在进行的业务以及给用户更好的体验,我们需要通过编写监控脚本对LVS的后台主机存活情况进行监控,当有服务器发生故障时,脚本会从LVS转发策略删除该服务器的转发规则;等到服务器恢复正常后,脚本也将把该服务器的转发规则重新加入LVS转发策略中;若所有的后台服务器都宕机了,则脚本会自动把虚拟ip的端口转发到本机端口,起到缓冲作用

前期准备

配置LVS负载均衡策略

详情可参考https://blog.51cto.com/14832653/2501128

编写监控脚本

#!/bin/bash

#虚拟IP

VIP=192.168.29.122

#本机IP

LIP=192.168.29.143

#绑定转发端口号

VPORT=80

#真实服务器端口号

RPORT=80

#LVS工作模式

TYPE=g

#设置日志

LOG=/tmp/ipvs.log

declare -i AS=0

declare -i flag=0

declare -a RS=("192.168.29.142" "192.168.29.144")

declare -a RW=(1 1)

declare -a RSSTATUS=(0 0)

#初始检查LVS配置情况

function initstatus(){

index=0

for((;index<2;index++))

do

ip=${RS[$index]}

num=$(ipvsadm -Ln|grep $ip |wc -l)

if [ $num -eq 1 ];then

RSSTATUS[$index]=1

let AS++

else

RSSTATUS[$index]=0

fi

done

}

#添加真实服务器

function addrs(){

`ipvsadm -a -t $VIP:$VPORT -r $1:$RPORT -$TYPE -w $2`

echo "$(date) add $1 to ipvsadm" >> $LOG

}

#删除真实服务器

function delrs(){

`ipvsadm -d -t $VIP:$VPORT -r $1`

echo "$(date) remove $1 from ipvsadm" >> $LOG

}

#检查真实服务器存活状态

function checkrs(){

index=0

for((;index<2;index++))

do

ip=${RS[$index]}

weight=${RW[$index]}

status_num=${RSSTATUS[$index]}

num=$(curl --connect-timeout 2 -ls http://$ip |wc -l )

if [[ $num -eq 1 && $status_num -eq 0 ]];then

addrs $ip $weight

RSSTATUS[$index]=1

let AS++

#当任意一台真实服务器恢复状态后,把转发到本机的规则删除

if [[ $AS -eq 2 && $flag -eq 1 ]];then

delrs $LIP

let AS--

flag=0

fi

elif [[ $num -eq 1 && $status_num -eq 1 ]];then

continue

elif [[ $num -eq 0 && $status_num -eq 1 ]];then

delrs $ip

RSSTATUS[$index]=0

let AS--

#若所有真实服务器均发生宕机,LVS把虚拟IP转发到本机处理

elif [[ $AS -eq 0 ]];then

addrs $LIP 1

let AS++

flag=1

fi

done

}

initstatus

#设定每隔五秒钟运行一次

while :

do

checkrs

sleep 5

echo "keep monitoring..."

done

测试验证

关闭node2服务

[root@node2 ~]# systemctl stop httpd.service

#查看日志信息

remove 192.168.29.142 from ipvsadm

#查看ipvsadm信息

[root@node1 ~]# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP node1:http rr

-> node3:http Route 1 0 0

把node3服务也进行关闭

[root@node3 ~]# systemctl stop httpd.service

#查看日志信息

remove 192.168.29.144 from ipvsadm

add 192.168.29.143 to ipvsadm

#查看ipvsadm信息

[root@node1 ~]# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP node1:http rr

重启服务

[root@node2 ~]# systemctl start httpd.service

[root@node3 ~]# systemctl start httpd.service

#查看ipvsadm信息

[root@node1 ~]# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP node1:http rr

-> node2:http Route 1 0 0

-> node3:http Route 1 0 0

#查看日志信息

add 192.168.29.142 to ipvsadm

remove 192.168.29.143 from ipvsadm

add 192.168.29.144 to ipvsadm

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值