Redis主従高可用性+主従関係の自動切り替え

17854 ワード

Redis主従高可用性+主従関係の自動切り替え


マシン
IP
db01
192.168.0.51(メイン)
db02
192.168.0.52(から) : keepalived MASTER BACKUP Redis

db01-keepalived

! Configuration File for keepalived
global_defs {
     
   router_id LVS_DEVEL
   script_user root
   enable_script_security
}
vrrp_script check_redis {
     
    script "/etc/keepalived/redis-check.sh 127.0.0.1 password"
    interval 2
    weight -20
    fall 3
    rise 1
}
vrrp_instance VI_1 {
     
    state BACKUP #      BACKUP,     MASTER     ,  VIP
    interface ens33
    virtual_router_id 51
    priority 100
    nopreempt
    advert_int 1
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
    unicast_src_ip 192.168.0.51
    unicast_peer {
     
        192.168.0.52
    }
    virtual_ipaddress {
     
        192.168.0.55/24
    }
    track_script {
     
    }
    notify_master "/etc/keepalived/redis-master.sh 127.0.0.1 192.168.0.52 6379"
    notify_backup "/etc/keepalived/redis-backup.sh 127.0.0.1 192.168.0.52 6379"
}


db02-keepalived

! Configuration File for keepalived
global_defs {
     
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_script check_redis {
     
    script "/etc/keepalived/redis-check.sh 127.0.0.1"
    interval 2
    weight -20
    fall 3
    rise 1
}
vrrp_instance VI_1 {
     
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
     
        auth_type PASS
        auth_pass 1111
    }
    unicast_src_ip 192.168.0.52
    unicast_peer {
     
        192.168.0.51
    }
    virtual_ipaddress {
     
        192.168.0.55/24
    }
    track_script {
     
        check_redis
    }
    notify_master "/etc/keepalived/redis-master.sh 127.0.0.1 192.168.0.51 6379"
    notify_backup "/etc/keepalived/redis-backup.sh 127.0.0.1 192.168.0.51 6379"
}

検出スクリプト

x
==========================
# db01&db02,redis-mster.sh
==========================
#!/bin/bash
#   redis      ,         ,       ,      
LOG_FILE=/etc/keepalived/redis.log
RE_CLI="/opt/redis-6.2.1/src/redis-cli -h $1"
function check_redis(){
     
        #   redis      
        if [ $(ps -aux|grep redis-server|grep -v grep|wc -l) -eq 0 ]; then
                echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis     ") >> $LOG_FILE
                /opt/redis-6.2.1/src/redis-server /opt/redis-6.2.1/redis.conf &>/dev/null
                #        redis  
                if [ $? -eq 0 ]; then
                        echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis      ") >> $LOG_FILE
                else
                        echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis      ,  Keepalived") >> $LOG_FILE
                        systemctl stop keepalived.service
                fi
        else
                echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis      ") >> $LOG_FILE
        fi
}
function erase_relation(){
     
        #   Redis    
        $RE_CLI slaveof NO ONE &> /dev/null
        echo $(date "+%Y-%m-%d %H:%M:%S:MASTER-Redis        ") >> $LOG_FILE
}
check_redis
erase_relation

====================================
# db01&db02,redis-backup.sh
=====================================
#!/bin/bash
#:  Redis     ,   
LOG_FILE=/etc/keepalived/redis.log
RE_CLI="/opt/redis-6.2.1/src/redis-cli -h $1"
function check_redis(){
     
        #   redis      
        if [ $(ps -aux|grep redis-server|grep -v grep|wc -l) -eq 0 ]; then
                echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis     ") >> $LOG_FILE
                /opt/redis-6.2.1/src/redis-server /opt/redis-6.2.1/redis.conf &>/dev/null
                #        redis  
                if [ $? -eq 0 ]; then
                        echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis      ") >> $LOG_FILE
                else
                        echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis      ,  Keepalived") >> $LOG_FILE
                        systemctl stop keepalived.service
                fi
        else
                echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis      ") >> $LOG_FILE
        fi
}
function slave_redis(){
     
        #           
        $RE_CLI slaveof NO ONE &>/dev/null
        $RE_CLI slaveof $2 $3 &>/dev/null
        echo $(date "+%Y-%m-%d %H:%M:%S:BACKUP-Redis  $2  ") >> $LOG_FILE
}
check_redis
slave_redis $1 $2 $3 #             ,               


===========================
# redis-check.sh
===========================
#!/bin/bash
/opt/redis-6.2.1/src/redis-cli -h $1 PING &>/dev/null
if [ $? -ne 0 ]; then
        systemctl stop keepalived
else
        exit 0
fi

# db01    
2021-05-01 08:18:53:BACKUP-Redis     
2021-05-01 08:18:53:BACKUP-Redis      
2021-05-01 08:18:53:BACKUP-Redis  192.168.0.52  
2021-05-01 08:18:58:MASTER-Redis      
2021-05-01 08:18:58:MASTER-Redis        
2021-05-01 08:19:52:BACKUP-Redis      
2021-05-01 08:19:52:BACKUP-Redis  192.168.0.52  
 
# db02    
2021-05-01 08:18:53:BACKUP-Redis     
2021-05-01 08:18:53:BACKUP-Redis      
2021-05-01 08:18:53:BACKUP-Redis  192.168.0.51  
2021-05-01 08:19:28:MASTER-Redis      
2021-05-01 08:19:28:MASTER-Redis