环境情况!
服务器上运行着自己编写的一个服务,后来因为后面像一个服务器发现负载过高,调查问题时!
发现后端服务器处理了两次,这个服务把收到的数据存放到mq中,后面服务器处理时去mq中取!
从后面服务器处理的log中发现处理了两次相同的数据,导致后面的服务器负载高!关掉一台后,发现后面服务器负载减少了一半!
后面提出需求!因为keepalived是根据redis的master/slave主机做了vip!所以,可根据vip(redis-master)在哪台机器,自己的服务就在哪台服务器上运行!另一台则不运行!当vip发生飘移时!自己的服务也根据vip一起切换!
废话少说!直接上操作!
思路和解释在下面注解!
#!/bin/bash
#create user github:Xiaopei147
#create date 2022/2/28 08:00:00(CST)
#add to github date 2022/3/2 14:30(CST)
#####################################################
##⚠⚠⚠⚠⚠⚠⚠⚠The copyright of this script is mine##
##⚠⚠⚠⚠⚠⚠⚠⚠ 这个脚本的版权是我 ##
#####################################################
ip_c=`/sbin/ip a |grep "scope global eth0" |wc -l`
status=`/sbin/service xxx status |grep "running"|wc -l`
stop=`/sbin/service xxx status |grep "stopped" |wc -l`
date=`/bin/date`
pid=`ps -ef |grep xxx |grep -v grep |awk '{print $2}'`
if [ $ip_c -eq 2 ]
then
#/sbin/service xxx status >>/tmp/vip.log
if [ $status -ne 1 ]
then
echo "========" >>/tmp/vip.log
echo "服务重启" >>/tmp/vip.log
echo $date >>/tmp/vip.log
echo "ip数量是:$ip_c" >>/tmp/vip.log
echo "服务状态是:$status(1.start 0.no start)" >>/tmp/vip.log
/bin/kill $pid >>/tmp/vip.log 2>&1
rm -rf /var/run/xxx.pid >>/tmp/vip.log
/sbin/service xxx restart >>/tmp/vip.log
if [ $status -ne 1 ]
then
/bin/bash vip.sh;
else
echo "service restart"
fi
else
echo "service is ok" >>/dev/null
fi
else
if [ $stop -ne 1 ]
then
echo "========" >>/tmp/vip.log
echo "服务关闭" >>/tmp/vip.log
echo $date >>/tmp/vip.log
echo "ip数量是:$ip_c" >>/tmp/vip.log
echo "服务状态是:$status(1.start 0.no start)" >>/tmp/vip.log
/sbin/service xxx stop >>/tmp/vip.log
else
echo "" >/dev/null
fi
fi
注释:
ip_c:查看vip是否存在于本机;
status:查看服务是否是running状态,注意,这只是我的服务的状态,不同服务需要修改关键字&服务名
stop:查看服务是否是stoped状态,和上面status一样,这只是我的服务的状态,不同服务需要修改关键字&服务名,区分服务状态时会用到!
pid:提取服务的pid!下面重启服务时会用到pid!
思路:
首先判断vip是否在本机,如果在,则判断服务是否开启;如果不在,则判断服务是否开启,如果是开启则stop服务!
如果在本机,服务没有开启的话。会restart服务,在此之前,会把ip数量和服务状态输出到log中!
最后!
GitHub源码地址:
https://github.com/Xiaopei147/vips
还是那句话:
⚠:我依旧是那个不懂技术的小白!



