使用shell脚本检测lvs中realserver状态,并实现自动删除已挂机主机

#!/bin/sh

# Describe:check the real server status

# History:2015-08-25 22:21:38

# Author:Tim

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH

VIP=192.168.1.121

DIP=192.168.1.112

RIP=("192.168.1.122" "192.168.1.123")

VPORT=80

STATUS=(0 0)

TYPE=g

SCHEMA=rr

WEIGHT=(1 3)

let COUNT=0

initstats() {

local I

for I in `seq 0 1`;do

if ipvsadm -L -n |grep ${RIP[$I]} &>/dev/null ;then

STATUS[$I]=1

else

STATUS[$I]=0

fi

done

}

#初始化realserver状态

add() {

ipvsadm -a -t $VIP:$CPORT -r ${RIP[$1]} -$TYPE -w ${WEIGHT[$1]}

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

}

#添加realserver

del() {

ipvsadm -d -t $VIP:$CPORT -r ${RIP[$1]}

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

}

#删除realserver

check() {

if curl --connect-timeout 1 http://$1 &>/dev/null;then

return 0

else

return 1

fi

}

#检测realserver状态

initstats

while :;do

for N in `seq 0 1`;do

if check ${RIP[$N]} ;then

if [ ${STATUS[$N]} -eq 0 ] ;then

add $N &&STATUS[$N]=1 && echo "`date +%F-%T` , ${RIP[$N]} is back">>/var/log/ipvs

fi

else

if [ ${STATUS[$N]} -eq 1 ];then

del $N &&STATUS[$N]=0 &&echo "`date +%F-%T`, ${RIP[$N]} is gone" >>/var/log/ipvs

fi

fi

done

if [ ${STATUS[0]} -eq 0 -a ${STATUS[1]} -eq 0 ] ;then

ipvsadm -a -t $VIP:$CPORT -r $DIP -$TYPE

else

ipvsadm -d -t $VIP:$CPORT -r $DIP &>/dev/null

fi

sleep 5

done

注:此脚本是学习马哥linux视频教程时编写。

时间: 2024-12-24 09:42:37

使用shell脚本检测lvs中realserver状态,并实现自动删除已挂机主机的相关文章

shell脚本修改json中某个字段的值

shell脚本修改json中某个字段的值 思路:通过awk来找到旧数据,然后用sed来替换旧数据 源码 config.json { "name": "the_name", "id": "132869", "content_url": "https://hot.example.com/", "enable_feature1": "true", &qu

LVS集群的基本原理、LVS/NAT模式的配置、LVS/DR模式的配置、编写自动脚本检查LVS上realserver健康性

Linux 虚拟服务器(LVS)由章文嵩在国防科技大学就读博士期间创建利用LVS可以实现高可用的.可伸缩的Web.Mail.Cache和Media等网络服务,已经被集成到linux内核里了. 1.什么是集群? 使用一组服务器提供相同的服务2.使用集群的目的? 增强可靠性   降低成本   提高可扩展性   提高性能3.集群分类? HPC 高性能计算集群    (气象   航天   航空)    LB    负载均衡集群 (平均地分摊处理)    * LVS    hproxy HA    高可用

Saiku数据库迁移后的刷新脚本-Shell脚本读取数据库中的数据(二十三)

Saiku数据库迁移后的刷新脚本 之前有谈过对saiku中的数据进行刷新,因为saiku默认会从缓存中查询数据,但是配置不使用缓存又会效率低下... 所以这里就需要做一个数据刷新,每次ETL之后都需要执行一遍数据刷新脚本. 刷新脚本主要分为两部分 1.使用shell命令从数据库中读取已有的用户信息 (因为已经做过数据迁移,数据库已经从h2转为我们自己的mysql) saikuRefresh.sh #!/bin/bash #数据库连接信息 HOSTNAME="10.11.22.33" #

WyBox使用shell脚本检测io口是否正常

1. 修改mt7620a.dts文件,把gpio管脚复用全都定义为通用gpio /dts-v1/; /include/ "mt7620a.dtsi" / { compatible = "ralink,mt7620a-eval-board", "ralink,mt7620a-soc"; model = "Ralink MT7620a + MT7610e evaluation board"; [email protected]10

利用shell脚本统计文件中出现次数最多的IP

比如有如下文件test.txt 1  134.102.173.43 2  134.102.173.43 3  134.102.171.42 4  134.102.170.9 要统计出现次数最多的IP可以利用以下shell脚本: cat test.txt | awk '{print $2}' | sort | uniq -c | sort -n -r | head -n 1 [原创]统计IP次数最多的 一条还是很常见,很实用,很简单的命令 netstat -ntu Active Internet

linux shell脚本检测硬盘磁盘空间 邮件报警

使用 http://www.weiruoyu.cn/?p=368 shell脚本监控硬盘空间剩余空间 邮件报警 1.先观察一下磁盘,和如何使用脚本 [[email protected] ~]# df -h 文件系统              容量  已用 可用 已用% 挂载点 /dev/mapper/VolGroup00-LogVol00 8.9G  2.6G  5.9G  31% / /dev/sda1              99M   13M   82M  13% /boot tmpfs

shell脚本和ansible实践MariaDB源码编译自动安装

在前面的博客中已经演示,通过脚本实现MySQL通用二进制的安装,下面通过演示用脚本实现源码编译MariaDB实现自动化,在大规模部署多台MariaDB时,这里使用ansible来实现其自动化部署,可以大大简化运维工程师的时间. 先讲解脚本在本地自动化安装MariaDB,结合上一篇博客和前面自动化实现的MySQL通用二进制格式的安装. 环境:Centos 6.6      mariadb-10.0.13.tar.gz    node5(hostname)   2块硬盘:1块是系统用.1块是作为My

安卓循环录像,检测内存卡容量,少于一定值自动删除指定文件夹

循环录像,听起来是不是很高大上,其实原理就是检测内存卡容量,少于一定值就自动删除指定的文件夹,这个做监控或者行车记录仪会用得着. /**  * 循环录像,当内存卡容量少于300M时,自动删除视频列表里面的第一个文件  */ private void xunhuanluxiang() { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { File path = Environment.ge

shell 脚本检测端口状态

方法一: # cat check_port.sh #!/bin/bash cat ip.txt|while read line do /usr/bin/nc -w 1 -z $line > /dev/null 2>&1 if [ $? -eq 0 ] then echo telnet $line ok sleep 1 else echo telnet $line fail fi done # cat ip.txt 124.234.83.15 80 124.234.83.10 80 原文