美文网首页系统运维专家
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