redis与keepalive合用,检测机制修订

近期又被自己造的keepalive检测机制搞了,直接上最新优化后的脚本:

############start scripts
killall -0 redis-server
if [ "$?" -eq 0 ]; then
        echo good
        exit 0
else
        LOGFILE=/var/log/keepalived-redis-state.log
        echo "[check_fail_log]" >> $LOGFILE
        date >> $LOGFILE
        killall -0 redis-server
        if [ "$?" -ne 0 ]; then
                echo killall_bad_two >> /var/log/keepalived-redis-state.log
                numprocess1=`netstat -tnpl | grep 6379 -c`
                numprocess2=`ps -ef | grep redis-server | grep -c 6379`
                if [[ ${numprocess1} -lt 1 ]] && [[ ${numprocess2} -lt 1 ]]; then
                        echo process_bad_three >> /var/log/keepalived-redis-state.log
                        #start judge status
                        /etc/init.d/redis status
                        if [[ $? -eq 0 ]]; then
                                echo good
                                exit 0
                        else
                                echo status_bad_four >> /var/log/keepalived-redis-state.log
                                /etc/init.d/redis status >> /var/log/keepalived-redis-state.log
                                ####start last judge
                                ALIVE=`/usr/bin/redis-cli -p 6379 PING`
                                if [ "$ALIVE" != "PONG" ]; then
                                        echo ping_bad_five >> /var/log/keepalived-redis-state.log
                                        exit 1
                                else
                                        exit 0
                                fi
                                ###end last judge
                        fi
                        #end judge status
                        else
                        exit 0
                fi
        else
                exit 0
        fi
fi
############end scripts

目前的判断为:
第一层: 重试两次 进程信号判断。
第二层: netstat 及 ps -ef 判断
第三层: /etc/init.d/redis status 返回码判断。
第四层: redis ping   返回码判断。

以上每一层失败,都会打印日志。失败后说明redis进程及业务访问出现问题,正式开始启动切换操作。
测试环境测试效果。
日志记录:
[check_fail_log]
Thu May 19 09:46:23 CST 2016
killall_bad_two
process_bad_three
status_bad_four
redis-server is stopped
ping_bad_five
时间: 2024-08-30 02:51:32

redis与keepalive合用,检测机制修订的相关文章

TCP 连接与TCP keep alive 保活检测机制

生产环境中一台2核4G的linux服务器TCP连接数时常保持在5-7w间徘徊,查看日志每秒的请求数也就100-200,怎么会产生这么大的TCP连接数.检查了下客户端上行的HTTP协议,Connection 头字段是Keep-Alive,并且客户端在请求完之后没有立即关闭连接.而服务端的设计也是根据客户端来的,客户端上行如果Connection:Keep-Alive,服务端是不会主动关闭连接的.在客户端与服务端交互比较频繁的时候,这样的设计还是比较合理的,可以减少TCP的重复握手.显然如果只交互一

Redis Cluster架构和设计机制简单介绍

之前另一篇文章也介绍了 Redis Cluster (link,在文章的后半部分) 今天看到这一篇,简单说一下(http://hot66hot.iteye.com/blog/2050676) 作者的目标:Redis Cluster will support up to ~1000 nodes. 赞... 目前redis支持的cluster特性(已测试): 1):节点自动发现 2):slave->master 选举,集群容错 3):Hot resharding:在线分片 4):集群管理:clust

TCP KEEP-ALIVE和TCP_USER_TIMEOUT机制

正常通信的情况下,send函数发送成功会返回发送数据的字节数.当有错误发生时,send返回-1,全局变量errno被设置.很多情况下,send返回-1是由于连接被对端关闭(对端发送了RST或者FIN包),这种情况errno会被设置为ECONNRESET(Connection reset by peer). 可是在对端的网线被拔.网卡被卸载或者禁用的时候,对端没有机会向本地操作系统发送TCP RST或者FIN包来关闭连接.这时候操作系统不会认为对端已经挂了.所以在调用send函数的时候,返回的仍然

Android 源码系列之<十四>从源码的角度深入理解LeakCanary的内存泄露检测机制(下)

转载请注明出处:http://blog.csdn.net/llew2011/article/details/52958567 在上边文章Android 源码系列之<十三>从源码的角度深入理解LeakCanary的内存泄露检测机制(中)由于篇幅原因仅仅向小伙伴们讲述了在Android开发中如何使用LeakCanary来检测应用中出现的内存泄露,并简单的介绍了LeakCanary的相关配置信息.根据上篇文章的介绍我们知道LeakCanary为了不给APP进程造成影响所以新开启了一个进程,在新开启的

Android 源码系列之&lt;十三&gt;从源码的角度深入理解LeakCanary的内存泄露检测机制(中)

转载请注明出处:http://blog.csdn.net/llew2011/article/details/52958563 在上篇文章Android 源码系列之<十二>从源码的角度深入理解LeakCanary的内存泄露检测机制(上)中主要介绍了Java内存分配相关的知识以及在Android开发中可能遇见的各种内存泄露情况并给出了相对应的解决方案,如果你还没有看过上篇文章,建议点击这里阅读一下,这篇文章我将要向大家介绍如何在我们的应用中使用square开源的LeakCanary库来检测应用中出

通过Gradle Plugin实现Git Hooks检测机制

背景 项目组多人协作进行项目开发时,经常遇到如下情况:如Git Commit信息混乱,又如提交者信息用了自己非公司的私人邮箱等等.因此,有必要在Git操作过程中的适当时间点上,进行必要的如统一规范.安全检测等常规性的例行检测. 面对此类需求,Git为我们提供了Git Hooks机制.在每个项目根目录下,都存在一个隐藏的.git目录,目录中除了Git本身的项目代码版本控制以外,还带有一个名为hooks的目录,默认情况下,内置了常用的一些Git Hooks事件检测模板,并以.sample结尾,其内部

redis(一)内部机制的介绍和启动过程

redis(一)内部机制的介绍和启动过程 redis的基本介绍 redis服务端 redis客户端 redis的持久化 redis中的文件事件和时间时间 redis的启动过程 redis的基本介绍 redis是一种非关系型数据库,采用=key,value的形式来存储数据.key是二进制数据,对于value的数据类型,redis支持string.hash.list.set.sorted set五种类型.对于单个redis实例,内部使用多线程通信,但是对外采用RESP单线程通信协议,在TCP层通过二

Redis常用API和持久化机制

Redis常用API和持久化机制 一.Redis常用API---参考命令:http://redisdoc.com/geo/index.html Redis支持的数据类型比较广泛,例如:string(字符串).list(链表).set(集合).hash(哈希类型和zset(sorted set --有序集合) key keys * exists key 判断某个key是否存在 move key db 当前库就没有了,到指定的库中去了 expire key 为给定的key设置过期时间 ttl key

Redis系列之----Redis的两种持久化机制(RDB和AOF)

Redis的两种持久化机制(RDB和AOF) 什么是持久化 ???Redis的数据是存储在内存中的,内存中的数据随着服务器的重启或者宕机便会不复存在,在生产环境,服务器宕机更是屡见不鲜,所以,我们希望Redis能够将数据从内存中以某种形式保存到磁盘中,使得重启的时候可以加载磁盘中的文件记录恢复数据,这一过程便是Redis的持久化. ???Redis支持两种持久化机制,一种是RDB,另一种是AOF.Redis默认情况下使用RDB方式进行持久化.两种持久化可以单独使用其中的一种,也可以二者结合使用,