keepalive的不足,如何处理
MySQL(或者其它服务)的keepalived高可用监控脚本
开发脚本需求:我们知道,keepalive是基于虚拟ip的存活来判断是否抢占master的机制的,但是如果我们做了MySQL的keepalived的高可用的时候,就要考虑一种情况的发生,那就是如果机器网卡并没有断,二十由于MySQL服务的不稳定,或者人为的误操作,导致的服务关闭,会引起的结果就是,keepalive并不会切换,因为并不是主master的虚拟ip不存在,而是服务已经停止了,这种情况如果不及时切换到backup会导致的问题,大家可想而知,所以在此和大家分享一个监控keepalive主master服务的脚本
实现的功能:当主master机器(vip所在的机器)服务down了 会关闭自身的keepalive服务,让vip切换到备机,这样服务才能保持可用。大家可以看到,不管用keepalive做什么服务的高可用,只要你把监听的端口号作为监控判断的对象,其实这是一个适用范围特别广泛的脚本,希望大家能尽量写出通用脚本,这样可以提升思维的能力!如果写的有不好的地方请多指正。
#!/bin/sh
#author feifei
#date
#email eeeee@qq.com
#version 1.0
#function guard mysql service
. /etc/init.d/functions
#define var
#usage(使用方法)
if [ $# -ne ];then
echo "usage:sh $0 {tcp_port}"
exit
fi
#define var(用netstat是我们进行判断服务是否存活的重要依据,可以基于服务名,或者端口号,建议最好是端口号,因为端口号有唯一性)
check=`netstat -lnutp|grep $|wc -l` #check if there is already have a same monitoring exit(守护进程的脚本,必须要判断是否已经存在一个相同的监控,不然导致资源浪费)
count=`ps -ef|grep "$0 $1"|grep -v "grep"|wc -l` if [ $count -gt ];then
echo -e "\nERROR:There is already have a same monitoring!"
exit
fi function dmail(){
echo "$1-$(hostname):down" >/var/log/$.log
mail -s "$1-$(hostname):down" @qq.com </var/log/$.log
} function umail(){
echo "$1-switch-success" >/var/log/$.log
mail -s "$1-switch-success" @qq.com </var/log/$.log
} #check=`namp 192.168.1.21 $|grep open|wc -l`(也可以用nmap命令监控一个主机某个端口号是否开启,功能类似nestat和ss)
if [ $check -eq ];then
echo "$1 is not listening!pls input again!"
exit
else
while true
do
if [ `netstat -lnutp|grep $|wc -l` -eq ];then
echo
dmail $
/etc/init.d/keepalived stop
sleep
ping -c -W 192.168.1.22 &>/dev/null
if [ $? -eq ];then
echo
umail $
break
else
echo "$1-swith-failed" >/var/log/$.log
mail -s "$1-switch-failed" @qq.com </var/log/$.log
break
fi
fi
done
fi
脚本简单说明:
1.运行的条件:当前监控的端口号必须是监听状态,如果没启用会提示先启动服务
2.实现原理:实现监控的原理是用while循环+if判断
3.失败的处理机制:如果有心思的同学可以尝试,在服务down了之后,加上一些处理措施,比如说,让服务尝试重启,如果重启成功继续监控,不成功则关闭keepalive
4.事件的记录:每一个过程的成功与否,都要记录到相应的文件,如果有必要,进行邮件通知(一个好的运维,要懂得进行必须的故障记录,方便日后总结)
ps.不是特别难的脚本,重在梳理过程,如果有不妥的地方希望大家指正。
keepalive的不足,如何处理的更多相关文章
- 服务器如何处理http请求
1.需求 了解服务端如何处理http请求,了解基本的处理流程 2.实战 处理http请求分为7个步骤 2.1 Tcp连接 建立一条tcp链接,(若之前不存在持久链接keep-alive),把客户端的i ...
- Vue路由开启keep-alive时的注意点
Vue路由开启keep-alive时的注意点 这个不是业务的要求,但是看到每次进入页面就重新渲染DOM然后再获取数据更新DOM,觉得作为一个前端工程师有必要优化下的加载逻辑,正好vue提供了 ke ...
- ASP.NET Core应用针对静态文件请求的处理[3]: StaticFileMiddleware中间件如何处理针对文件请求
我们通过<以Web的形式发布静态文件>和<条件请求与区间请求>中的实例演示,以及上面针对条件请求和区间请求的介绍,从提供的功能和特性的角度对这个名为StaticFileMidd ...
- Nginx如何处理一个请求
看了下nginx的官方文档,其中nginx如何处理一个请求讲解的很好,现在贴出来分享下.Nginx首先选定由哪一个虚拟主机来处理请求.让我们从一个简单的配置(其中全部3个虚拟主机都在端口*:80上监听 ...
- ASP.NET Core管道深度剖析(3):管道是如何处理HTTP请求的?
我们知道ASP.NET Core请求处理管道由一个服务器和一组有序的中间件组成,所以从总体设计来讲是非常简单的,但是就具体的实现来说,由于其中涉及很多对象的交互,我想很少人能够地把它弄清楚.为了让读者 ...
- 大话keepalive
大话keepalive 我们说到keepalive的时候,需要先明确一点,这个keepalive说的是tcp的还是http的. tcp的keepalive是侧重在保持客户端和服务端的连接,一方会不定期 ...
- HttpsURLConnection 利用keepAlive特性进行优化一例
最近项目中,遇到一个报错: java.lang.OutOfMemoryError: unable to create new native thread 报错的场景是:一个消息的群发,群里总共有50多 ...
- 修改socket为keepAlive
参考文章:http://blog.csdn.net/ctthuangcheng/article/details/8596818 [root@mdw- gpadmin]# vi /etc/sysctl. ...
- ENode框架Conference案例分析系列之 - 事件溯源如何处理重构问题
前言 本文可能对大多数不太了解ENode的朋友来说,理解起来比较费劲,这篇文章主要讲思路,而不是一上来就讲结果.我写文章,总是希望能把自己的思考过程尽量能表达出来,能让大家知道每一个设计背后的思考的东 ...
随机推荐
- .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍
1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...
- SQL Server-聚焦IN VS EXISTS VS JOIN性能分析(十九)
前言 本节我们开始讲讲这一系列性能比较的终极篇IN VS EXISTS VS JOIN的性能分析,前面系列有人一直在说场景不够,这里我们结合查询索引列.非索引列.查询小表.查询大表来综合分析,简短的内 ...
- Newtonsoft.Json设置类的属性不序列化
参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...
- C#各种同步方法 lock, Monitor,Mutex, Semaphore, Interlocked, ReaderWriterLock,AutoResetEvent, ManualResetEvent
看下组织结构: System.Object System.MarshalByRefObject System.Threading.WaitHandle System.Threading.Mutex S ...
- 真假4K电视验证:一张图足矣
国庆期间笔者逛了一下电视卖场,考虑到国内电视台以及宽带的情况,1080P至少还能用十年,所以只想要个2k电视就够了.然而事与愿违,卖场中八成的都是4k电视,清一色的4k电视让人眼花缭乱.难道4k面板技 ...
- thinkphp数据的查询和截取
public function NewsList(){ $this->assign('title','news'); $p = I('page',1); $listRows = 6; $News ...
- JAVA面试题
在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...
- SuperMap-iServer-单点登录功能验证(CAS)
SuperMap-iServer-单点登录功能验证(CAS) 1.测试目的: 验证SuperMap-iServer使用CAS单点登录的功能是否正常. 2.测试环境: SuperMap-iServer8 ...
- MyEclipse对Maven的安装
好记性不如烂笔头,记录一下. 操作系统:windows 7 MyEclipse2015 JDK1.7 maven的下载链接,点这里下载apache-maven-3.0.4-bin.tar.gz. 下载 ...
- grunt配置任务
这个指南解释了如何使用 Gruntfile 来为你的项目配置task.如果你还不知道 Gruntfile 是什么,请先阅读 快速入门 指南并看看这个Gruntfile 实例. Grunt配置 Grun ...