栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

keepalived 根据vip在主从环境中只启动一台服务的情况,自己编写脚本控制只启动一台服务

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

keepalived 根据vip在主从环境中只启动一台服务的情况,自己编写脚本控制只启动一台服务

环境情况!

服务器上运行着自己编写的一个服务,后来因为后面像一个服务器发现负载过高,调查问题时!

发现后端服务器处理了两次,这个服务把收到的数据存放到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

还是那句话:

                    ⚠:我依旧是那个不懂技术的小白!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/751087.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号