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的朋友来说,理解起来比较费劲,这篇文章主要讲思路,而不是一上来就讲结果.我写文章,总是希望能把自己的思考过程尽量能表达出来,能让大家知道每一个设计背后的思考的东 ...
 
随机推荐
- Python标准模块--Iterators和Generators
			
1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...
 - WebApi基于Token和签名的验证
			
最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久 ...
 - 从国内流程管理软件市场份额看中国BPM行业发展
			
随着互联网+.中国制造2025.工业4.0等国家战略的支持与引导,企业在数字经济时代的信息化表现惊人,越来越多企业认识到,对于企业的发展来说,信息自动化远远还不够,企业的战略.业务和IT之间需保持高度 ...
 - Android系统默认对话框添加图片
			
开发工具Android Studio 今天公司UI要求软件对话框改成加图片的,以前没有做过,所以就学习了一下,废话不多说, 看效果: 创建XML文件dialog_lsit_item.xml <L ...
 - 信息安全-1:python之playfair密码算法详解[原创]
			
转发注明出处: http://www.cnblogs.com/0zcl/p/6105825.html 一.基本概念 古典密码是基于字符替换的密码.加密技术有:Caesar(恺撒)密码.Vigenere ...
 - 在禅道中实现WORD等OFFICE文档转换为PDF进行在线浏览
			
条件: 安装好禅道的服务器 能直接浏览PDF的浏览器(或通过 安装插件实现 ) 文档转换服务程序(建议部署在另一台服务器上) 实现 原理: 修改禅道的文件预览功能(OFFICE文档其使用的是下 ...
 - MongoDB学习笔记四—增删改文档下
			
$slice 如果希望数组的最大长度是固定的,那么可以将 $slice 和 $push 组合在一起使用,就可以保证数组不会超出设定好的最大长度.$slice 的值必须是负整数. 假设$slice的值为 ...
 - [django]数据导出excel升级强化版(很强大!)
			
不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...
 - hadoop 2.4 遇到的问题
			
不管出什么问题,首先查看日志. 在启动过hadoop的前提下,打开浏览器,输入http://localhost:50070 点击Utilities下的logs,选择hadoop-root-datano ...
 - 基于AngularJs的上传控件-angular-file-upload
			
今天跟大家分享的是一个依赖于angular的上传控件. 前段时间做项目遇到一个需求是上传文件,大概需要实现的样式是这样子的,见下图: 需要同时上传两个文件.并且规定文件格式和文件大小.因为前端框架使用 ...