小时? 发表于 2018-11-7 07:08:03

redis主从实现10秒检查与恢复

#!/bin/bash  

  
DATE=`date +%Y%m%d%M%s`
  
REDIS_DIR=/usr/local/redis
  
REDIS2_DIR=/usr/local/redis2
  
BIN_DIR=/usr/local/redis/bin
  
DATA1_DIR=/usr/local/redis/data
  
DATA2_DIR=/usr/local/redis2/data
  
PORT1=6378
  
PORT2=6379
  

  
function BACKUP_RDB {
  
    ps -ef |grep $PORT2 >/dev/null
  
    if[ $? -eq 0 ];then
  
      ${BIN_DIR}/redis-cli -p $PORT2 bgsave >/dev/null
  
      if [ $? -eq 0 ];then
  
            echo -e "\033[31m MASTER REDIS DOWN AND SLAVE bgsave DONE\033[0m"
  
            ${BIN_DIR}/redis-cli -p $PORT2 SLAVEOF NO ONE >/dev/null
  
      fi
  
   fi
  
}
  

  
function CP_RDB {
  
    [ -d ${DATA1_DIR}/redisbackup ]|| mkdir ${DATA1_DIR}/redisbackup
  
    if [ -f $DATA2_DIR/dump.rdb ];then
  
      mv ${DATA1_DIR}/dump.rdb${DATA1_DIR}/redisbackup/dump.rdb.$DATE
  
      cp ${DATA2_DIR}/dump.rdb${DATA1_DIR}/
  
    fi
  
}
  

  
functionSTART_REDIS {
  
    KEY2_NUM=`${BIN_DIR}/redis-cli -p $PORT2 INFO|grep db*.key |awk -F[:=,] '{total+=$3}END{print total}'`
  
    ${BIN_DIR}/redis-server ${REDIS_DIR}/etc/redis.conf
  
    netstat -tnlp |grep "$PORT1" >/dev/null
  
    a=$?
  
    if [ $a -ne 0 ];then
  
      while [ $a -ne 0 ];do
  
            sleep 2
  
            netstat -tnlp | grep "127.0.0.1:$PORT1" 1>/dev/null 2>/dev/null
  
            a=$?
  
      done
  
      echo -e "\033[32m MASTER REDIS RUNNING ........\033[0m"
  
      sleep 7
  
      KEY1_NUM=`${BIN_DIR}/redis-cli -p $PORT1INFO|grep db*.key |awk -F[:=,] '{total+=$3}END{print
  

  
total}'`
  
#      echo ${KEY1_NUM}
  
      if [ $KEY1_NUM -ge $KEY2_NUM ];then
  
            ${BIN_DIR}/redis-cli -p $PORT2 SLAVEOF 127.0.0.1 $PORT1 >/dev/null
  
            echo -e "\033[32m MASTER AND SLAVE are Normal sync \033[0m"
  
      else
  
            echo -e "\033[31m KEY NUM are not equal, MASTER AND SLAVE are not Normal sync,place to check ! \033[0m"
  
            break
  
      fi
  
    else
  
      echo -e "\033[32m MASTER REDIS RUNNING ........\033[0m"
  
      sleep 7
  
      KEY1_NUM=`${BIN_DIR}/redis-cli -p $PORT1 INFO|grep db*.key |awk -F[:=,] '{total+=$3}END{print total}'`
  
#      echo ${KEY1_NUM}
  
      if [ $KEY1_NUM -ge $KEY2_NUM ];then
  
            ${BIN_DIR}/redis-cli -p $PORT2 SLAVEOF 127.0.0.1 $PORT1 >/dev/null
  
            echo -e "\033[32m MASTER AND SLAVE are Normal sync \033[0m"
  
      else
  
            echo -e "\033[31m KEY NUM are not equal, MASTER AND SLAVE are not Normal sync,place to check ! \033[0m"
  
            break
  
      fi
  
    fi
  
}
  

  

  
while true;do
  
    sleep 10
  
    netstat -tnlp | grep "127.0.0.1:$PORT1" 1>/dev/null 2>/dev/null
  
    TRAP1=$?
  
    ps -ef |grep "$PORT1" >/dev/null
  
    TRAP2=$?
  
    if [ $TRAP1 -ne0 ] || [ $TRAP2 -ne0 ];then
  
      #echo redis-master down
  
      BACKUP_RDB
  
      CP_RDB
  
      START_REDIS
  
    fi
  
done


页: [1]
查看完整版本: redis主从实现10秒检查与恢复