Redis + keepalived 高可用行配置检测脚本

news/2024/7/16 5:09:06

Redis 在生产配置中;除redis集群、哨兵模式之外;主从模式还是比较普遍的。

配置 redis 多主从;由 keepalived 做 VIP 地址漂移。可以实现redis的高可用性。

 

keepalived 配置示例;(master 主节点配置,backup根据更改就可以了。)

! Configuration File for keepalived
global_defs {
   router_id redis1
}

vrrp_script chk_redis 
{ 
     script "/etc/keepalived/scripts/redis_check.sh" 
     interval 5 
     timeout 10
     fall 10
     rise 3     
}

vrrp_instance redis {
     state MASTER
     interface eth0
     virtual_router_id 99
     priority  101
     advert_int 10
         authentication {
         auth_type PASS
         auth_pass 12345
    }
    virtual_ipaddress {
                 172.16.2.36/24
    }
    track_script { 
         chk_redis 
    } 
     notify_master "/etc/keepalived/scripts/redis_master.sh"
     notify_backup "/etc/keepalived/scripts/redis_backup.sh"
     notify_fault "/etc/keepalived/scripts/redis_fault.sh" 
     notify_stop "/etc/keepalived/scripts/redis_stop.sh"
}

Redis 状态检测脚本。

redis_check  Redis 状态检测;

#!/bin/bash 
ports=(6379 6389 6399)
port_num=${#ports[@]}
pong_num=0
LOGFILE="/opt/keepalived/keepalived-redis-check.log"
echo '-----------------' >> $LOGFILE

for port in ${ports[*]}
do
    if [ $port -eq 6374 ] ;then
        ALIVE=`/usr/bin/redis-cli -p $port -h 172.16.2.56 -a tkfJfnMjvniitHDG PING`
    else
        ALIVE=`/usr/bin/redis-cli -p $port -h 172.16.2.56 -a ffdca1b6f2d4c6d4  PING`
    fi
    echo "[CHECK]" >> $LOGFILE
    date >> $LOGFILE
    if [ "$ALIVE" == "PONG" ];then
        pong_num=$[$pong_num+1]
        echo "Success: redis-cli -p $port PING $ALIVE" >> $LOGFILE 2>&1
    else 
        echo "Failed:redis-cli -p $port PING $ALIVE " >> $LOGFILE 2>&1
    fi
done

if [ $port_num -eq $pong_num ];then
    echo "check is ok" >> $LOGFILE
    exit 0
else
    echo "check is error" >> $LOGFILE
    exit 1
fi

master 检测;

#!/bin/bash
ports=(6379 6389 6399)
port_num=${#ports[@]}
LOGFILE="/opt/keepalived/keepalived-redis-state.log"
echo '-------------' >> $LOGFILE
for port in ${ports[*]}
do
    echo "[master]" >> $LOGFILE
    date >> $LOGFILE
    echo "Being master...." >> $LOGFILE 2>&1
    echo "Run MASTER cmd ..." >> $LOGFILE 2>&1
    echo "Run -p $port SLAVEOF NO ONE cmd ..." >> $LOGFILE
    if [ $port -eq 6374 ];then
        /usr/bin/redis-cli -h 172.16.2.56 -a 123456798 -p $port slaveof no one >> $LOGFILE 2>&1
    else
        /usr/bin/redis-cli -h 172.16.2.56 -a 123456789 -p $port slaveof no one >> $LOGFILE 2>&1
    fi
done

backup 检测;

#!/bin/bash
ports=(6379 6389 6399)
port_num=${#ports[@]}
LOGFILE="/opt/keepalived/keepalived-redis-state.log"
other_ip="172.16.2.57"
echo '----------------' >> $LOGFILE
for port in ${ports[*]}
do
    echo "[backup]" >> $LOGFILE
    date >> $LOGFILE
    echo "Being backup...." >> $LOGFILE 2>&1
    echo "Run BACKUP cmd ..." >> $LOGFILE 2>&1
    echo "Run -p $port SLAVEOF $other_ip cmd ..." >> $LOGFILE
    if [ $port -eq 6374 ];then
        /usr/bin/redis-cli -h 172.16.2.56 -p $port -a 123456798 slaveof $other_ip $port >> $LOGFILE 2>&1
    else
        /usr/bin/redis-cli -h 172.16.2.56 -p $port -a 123456789 slaveof $other_ip $port >> $LOGFILE 2>&1
    fi
done

redis_fault  服务错误检测;

#!/bin/bash 
LOGFILE=/opt/keepalived/keepalived-redis-state.log 
echo "[fault]" >> $LOGFILE 
date >> $LOGFILE

redis 服务停止检测;

#!/bin/bash 
LOGFILE=/opt/keepalived/keepalived-redis-state.log 
echo "[stop]" >> $LOGFILE 
date >> $LOGFILE

 

 

转载于:https://www.cnblogs.com/sharesdk/p/10009246.html


http://www.niftyadmin.cn/n/4556740.html

相关文章

.net里的timer

}} ElapsedEventArgs e) { Console.WriteLine("The Elapsed event was raised at {0}" using System;using System.Timers;//在这个空间下面public class Timer1{ private static System.Timers.Timer aTimer; public static void Main() { aTimer new System.Timer…

jenkins环境搭建(一)

1 安装 rpm -ivh jenkins-2.190.3-1.1.noarch.rpm2 修改配置 vim /etc/sysconfig/jenkins#用户 JENKINS_USER"root" #端口 JENKINS_PORT"8000"3 启动jenkins systemctl start jenkins #启动失败,查看日志 journalctl -xe #建立软连接 ln -s …

Maven 梳理 - maven新建web项目提示javax.servlet.http.HttpServlet was not found on the Java Build Path...

方法一&#xff1a; <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> 方法二&#xff1a; Java Bui…

C语言好学么。

好不好学 我想没有问题 ||| 还是很好学的 看你怎么学 你一定会学好的了 ||| 不好学 ||| 只要你是学理科的 所以你进大学了如果想学好C语言的话 c语言和高等数学有联系的 认真的学就很简单 说难也难 我也是当时是从零开始学习的 ||| 我觉得不难学 就必须得去吧高等数学搞好 怎么…

Jenkins集成Gitlab、Jdk、Maven(二)

1 集成Gitlab 1.1 安装插件 Credentials Binding1.2 git安装 #Jenkins 服务器上要有git环境 yum install git -y #查看版本 git --version1.3 生成公钥/私钥 #生成命令 ssh-keygen -t rsa cd /root/.ssh/ #查看公钥 cat id_rsa.pub #查看私钥 cat id_rsa1.4 gitlab设置公…

c语言的一些问题

将这些输入到 TruboC 即32767 因为最大的正数为0111111111111111 加一后就变成1000000000000000 也就是最大的负数了因为最小的负数为1000000000000000 本身也是个结果 打字总会吧 答案补充 自己做不出来 自己求结果不是更好么 ||| //溢出问题://最大值1变成最小值 即-32768//最…

散列--P1047 校门外的树

题目描述 某校大门外长度为L的马路上有一排树&#xff0c;每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴&#xff0c;马路的一端在数轴0的位置&#xff0c;另一端在L的位置&#xff1b;数轴上的每个整数点&#xff0c;即0,1,2,…,L&#xff0c;都种有一棵树。 …

有关C语言的数据统计和编程问题 高手请进

"); printf("/n");}main(int argc i1 fn); for(i0;i<50;i) { if(result[i] 代码如下&#xff1a;#include "stdafx.h"#include <stdio.h>#include <malloc.h>#include <ctype.h>#include <stdlib.h>#include <math.h&g…