1. 程式人生 > >redis 主從配置,自動切換

redis 主從配置,自動切換

redis keepalived

聲明: 此文中所用配置方式和腳本邏輯並非原創,腳本和配置都經過本人測試和優化。

基礎信息

  • 軟件版本:
    CentOS7.2.1511 Keepalived v1.3.4 Redis3.2.4
  • IP信息:
    • master: 192.168.56.11
    • slave: 192.168.56.12
    • vip: 192.168.56.100
  • Redis配置:
    • 安裝目錄:/usr/local/redis
    • 數據目錄:/data4/redisdata
    • 配置文件:/usr/local/redis/redis.conf
  • Keepalived配置:

    • 安裝目錄:/usr/local/keepalived
    • 配置文件:/etc/keepalived/keepalived.conf
  • 腳本軟件包:http://down.51cto.com/data/2444547
    • master 腳本壓縮包放在master主機,slave腳本壓縮包放在slave主機。

初始環境配置(master和slave上都進行操作)

  1. 關閉防火墻,SeLinux,配置yum源。
  2. 安裝必要的軟件:

    yum -y install gcc gcc+ openssl openssl-devel  tcl wget -y
  3. 安裝redis

    
    cd /home
    wget http://download.redis.io/releases/redis-3.2.4.tar.gz
    tar -xf ./redis-3.2.4.tar.gz
    mv redis-3.2.4 /usr/local/
    cd /usr/local/redis-3.2.4/deps/
    make hiredis lua jemalloc linenoise
    cd ..
    make test
    make 
    make install
    mkdir -p /usr/local/redis/bin
    mkdir -p /data4/redisdata
    cd /usr/local/redis-3.2.4/src
    cp redis-benchmark redis-check-aof redis-cli redis-server mkreleasehdr.sh /usr/local/redis/bin/
    cd /usr/local/redis-3.2.4
    cp redis.conf /usr/local/redis/
    cp /usr/local/bin/redis-cli  /usr/bin/
  4. 安裝keepalived

    cd /home
    wget http://www.keepalived.org/software/keepalived-1.3.4.tar.gz
    tar xf keepalived-1.3.4.tar.gz 
    cd keepalived-1.3.4
    ./configure 
    make
    make install

Redis主從配置

  1. 在master上修改配置文件/usr/local/redis/redis.conf參數

    bind 0.0.0.0
    daemonize yes
    dir /data4/redisdata

    slave 上修改相同的信息,並添加slaveof的配置:

    bind 0.0.0.0
    daemonize yes
    dir /data4/redisdata
    slaveof 192.168.56.11 6379
  2. master和slave上為redis配置單獨用戶並啟動服務

    useradd redisuser
    passwd redisuser
    chown -R redisuser:redisuser /usr/local/redis/redis.conf
    chown -R redisuser:redisuser /usr/local/redis/bin/redis-server
    chown redisuser /data4/redisdata
    su - redisuser
    cd /usr/local/redis
    ./bin/redis-server ./redis.conf
  3. Redis口令信息:

    username: redisuser
    password: redi13%&

Keepalived 主備配置

  1. 在master節點修改/etc/keepalived/keepalived.conf為如下配置:

    global_defs {
       lvs_id LVS_redis
    }
    vrrp_script chk_redis { 
        script "/etc/keepalived/scripts/redis_check.sh"
        weight -20
        interval 2                                     
    } 
    
    vrrp_instance VI_1 { 
        state backup                            
        interface eth0                          
        virtual_router_id 51
        nopreempt
        priority 200      
        advert_int 5                      
        track_script { 
            chk_redis                     
        } 
        virtual_ipaddress { 
             192.168.56.100
        }
        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 
    }
  2. Keepalived 的Backup節點修改/etc/keepalived/keepalived.conf配置文件內容為如下配置:

    
    global_defs {
      lvs_id LVS_redis
    }
    
    vrrp_script chk_redis { 
        script "/etc/keepalived/scripts/redis_check.sh"   
        weight  -20 
        interval 2                                       
    } 
    vrrp_instance VI_1 { 
        state backup                                
        interface eth0                              
        virtual_router_id 51 
        priority 190    
        advert_int  5                            
        track_script { 
             chk_redis                   
        } 
        virtual_ipaddress { 
             192.168.56.100                    
        } 
        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 
    }
  3. 添加主備keepalived狀態腳本文件
    • 上傳腳本壓縮包到/etc/keepalived/目錄下,解壓到scripts目錄,並添加腳本執行權限。
    • 創建日誌記錄目錄:
      mkdir /var/log/keepalived/
  4. 啟動keepalived

    先啟動主節點keepalved,再啟動slave節點

    systemctl start keepalived
  5. 查看keepalived和redis工作狀態

    • 主節點上查看有vip,從節點上無vip
    ip a|grep gl
    • 主redis為master狀態,從節點為slave狀態
      redis-cli  info replication
  6. 測試redis+keepalived主從是否正常

    • 分別依次關閉master上的redis和keepalived,查看主從狀態和vip飄移情況。
    • 查看master和slave上的各項日誌情況:
    tail -f /var/log/keepalived/redis-state.log 
    tail -f /var/log/messages

    故障處理

    當redis-master出現問題停機或者應用終止後,需要對進行故障排查,正確的恢復啟動順序如下:

    1. 使用redisuser 啟動masrer,並與當前的slave(此時已經切換為master)進行數據同步:
     su - redisuser 
     cd /usr/local/redis
     ./bin/redis-server ./redis.conf  #啟動redis
     netstat -lntp
     sh /etc/keepalived/scripts/redis_backup.sh # 使用腳本同步redis
     redis-cli  info replication  #查看同步狀態
    1. 同步完成之後切換為root,啟動keepalived,此時由於是不搶占模式,VIP仍然在slave上。
    [root@ost-redis1 ~]# systemctl start keepalived
    [root@ost-redis1 ~]# redis-cli  INFO replication
    1. 重啟備用節點的keepalived,腳本自動完成主備切換
    [root@ost-redis2 ~]# systemctl restart keepalived
    [root@ost-redis2 ~]# redis-cli  INFO replication

redis 主從配置,自動切換