美文网首页系统运维专家
Redis故障转移脚本

Redis故障转移脚本

作者: Dakini_Wind | 来源:发表于2019-07-06 14:51 被阅读0次

    适用于一主一从,通过脚本管理故障转移,架构如下:


    架构图.png

    脚本大致思路如下:


    流程图.png

    start_server.sh

    #!/bin/bash
    
    single=0 #单机状态
    
    if [ $# -eq 3 ]; then
        ip_out=$1
        ip_in=$2
        ip_my=$3
    else
        ip_out="219.219.68.1" #网关 ip
        ip_in="219.219.68.134" #另一台redis ip
        ip_my="219.219.68.135" #本机ip
    fi
    
    Ping_Out(){
        ping $ip_out -c 1 -w 1 >> ping.log
    }
    Ping_In(){
        ping $ip_in -c 1 -w 1 >> ping.log
    }
    Ping_O(){
        Ping_In
        if [ $? -ne 0 ] ;then
            test 1 -eq 0
        else
            redis-cli -h $ip_in -p 7000 PING 2>&1 | grep PONG
        fi
    }
    Wait_DisConn(){
        conn_status=0 #主从连接正常   
        until [ $conn_status -ne 0 ] 
        do
            echo "主从连接正常,5s后重新检测"
            sleep 5
            Ping_O
            conn_status=$?
        done
        echo "主从连接断开"
    }
    
    
    while true
    do 
            
        #主从连接良好,不需要改变
        Ping_O
        if [ $? -eq 0 ] ;then
            #等待断开
            Wait_DisConn
            single=0
        fi
    
        Ping_Out
        net_status=$?
        
        #与路由连接正常
        if [ $net_status -eq 0 -a $single -eq 0 ] ;then
            ./redis_master.sh $ip_my
            single=1
        elif [ $net_status -ne 0 ] ;then
            while true
            do  
                ROLE=`redis-cli -h $ip_in -p 7000 ROLE 2>&1 | grep master`
                if [ "$ROLE" ] ;then 
                    ./redis_backup.sh $ip_in
                    break
                fi
                sleep 5
            done
                
        fi
    
        sleep 5 #每隔5s检测一次
    
    done
    
    

    redis_master.sh

    #!/bin/bash
    
    sleep 10
    
    echo "[master]"
    echo "Being master...." 
    echo "Run SLAVEOF cmd ..."
    
    redis-cli -p 7000 SLAVEOF $1 7000
    if [ $? -ne 0 ];then
        echo "data rsync fail."
    else
        echo "data rsync OK."
    fi
    
    sleep 10 #延迟10秒以后待数据同步完成后再取消同步状态 
    
    echo "Run SLAVEOF NO ONE cmd ..."
    
    redis-cli -p 7000 SLAVEOF NO ONE
    
    if [ $? -ne 0 ];then
        echo "Run SLAVEOF NO ONE cmd fail."
    else
        echo "Run SLAVEOF NO ONE cmd OK."
    fi
    

    redis_backup.sh

    #!/bin/bash 
    
    echo "[backup]" 
    echo "Being slave...."
    
    sleep 10 #延迟10秒待数据被对方同步完成之后再切换主从角色 
    
    echo "Run SLAVEOF cmd ..."
    
    redis-cli -p 7000 SLAVEOF $1 7000
    

    相关文章

      网友评论

        本文标题:Redis故障转移脚本

        本文链接:https://www.haomeiwen.com/subject/ffvphctx.html