zoukankan      html  css  js  c++  java
  • Redis + keepalived 高可用行配置检测脚本

    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
  • 相关阅读:
    js中当call或者apply传入的第一个参数是null/undefined时,js函数内执行的上下文环境是什么?
    闭包的实现原理和作用以及堆栈溢出和内存泄漏原理和相应解决办法
    JavaScript的作用域和作用域链
    词法作用域和动态作用域
    理解 es6 中class构造以及继承的底层实现原理
    new一个对象的详细过程,手动实现一个 new操作符
    实现继承的几种方式以及他们的优缺点
    理解JavaScript的执行上下文栈,可以应用堆栈信息快速定位问题
    原型和原型链-instanceof的底层实现原理
    js判断变量未定义
  • 原文地址:https://www.cnblogs.com/sharesdk/p/10009246.html
Copyright © 2011-2022 走看看