redis+Sentinel+keepalived 實現集羣高可用

Redis   版本  Redis server v=3.2.12 sha=00000000:0 malloc=jemalloc-3.6.0 bits=64 build=7897e7d0e13773f

Keepalived 版本 Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2


原理:

Keepalived 由權重最高獲得虛擬地址,腳本執行不成功降低權重50

Sentinel 自動切換集羣 Master  Slave


主機名ip地址redisSentinelkeepalived 
node01172.16.50.111安裝安裝安裝
node02172.16.50.113安裝安裝安裝
node03172.16.50.115安裝安裝安裝


node01 node02 node03 安裝 

yum install redis  keepalived -y


node01配置redis

bind 0.0.0.0

node02 node03  配置redis

bind 0.0.0.0
slaveof 172.16.50.111 6379

啓動 node01 node02 node03 節點redis

 systemctl enable redis && systemctl start redis

node01查看slave狀態

redis-cli info Replication
# Replication
role:master
connected_slaves:2
slave0:ip=172.16.50.113,port=6379,state=online,offset=211,lag=0
slave1:ip=172.16.50.115,port=6379,state=online,offset=211,lag=0


配置Sentinel服務

protected-mode no
sentinel monitor mymaster 172.16.50.111 6379 2


node01 node02 node03 分別啓動Sentinel服務

systemctl enable redis-sentinel && systemctl start  redis-sentinel

查看node01 sentinel 日誌

12946:X 20 Feb 01:35:39.771 # Sentinel ID is 2c8b02a2536aa081f0b95e19e2948b5ac25e6306
12946:X 20 Feb 01:35:39.771 # +monitor master mymaster 172.16.50.111 6379 quorum 2
12946:X 20 Feb 01:35:39.772 * +slave slave 172.16.50.113:6379 172.16.50.113 6379 @ mymaster 172.16.50.111 6379
12946:X 20 Feb 01:35:39.789 * +slave slave 172.16.50.115:6379 172.16.50.115 6379 @ mymaster 172.16.50.111 6379
12946:X 20 Feb 01:36:25.103 * +sentinel sentinel 6eb0e3c142d97532d5558448cb09f5c038acc743 172.16.50.113 26379 @ mymaster 172.16.50.111 6379
12946:X 20 Feb 01:36:41.807 * +sentinel sentinel ed44244bb0357aa9cc70f3c3ddba466d30b4865c 172.16.50.115 26379 @ mymaster 172.16.50.111 6379

測試 sentinel  是否自動切換

停止掉node01 redis , 查看 sentinel  日誌

12946:X 20 Feb 01:40:32.817 # +sdown master mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:32.870 # +odown master mymaster 172.16.50.111 6379 #quorum 2/2
12946:X 20 Feb 01:40:32.870 # +new-epoch 1
12946:X 20 Feb 01:40:32.870 # +try-failover master mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:32.888 # +vote-for-leader 2c8b02a2536aa081f0b95e19e2948b5ac25e6306 1
12946:X 20 Feb 01:40:32.961 # ed44244bb0357aa9cc70f3c3ddba466d30b4865c voted for 2c8b02a2536aa081f0b95e19e2948b5ac25e6306 1
12946:X 20 Feb 01:40:32.970 # 6eb0e3c142d97532d5558448cb09f5c038acc743 voted for 2c8b02a2536aa081f0b95e19e2948b5ac25e6306 1
12946:X 20 Feb 01:40:33.006 # +elected-leader master mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:33.006 # +failover-state-select-slave master mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:33.107 # +selected-slave slave 172.16.50.115:6379 172.16.50.115 6379 @ mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:33.107 * +failover-state-send-slaveof-noone slave 172.16.50.115:6379 172.16.50.115 6379 @ mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:33.174 * +failover-state-wait-promotion slave 172.16.50.115:6379 172.16.50.115 6379 @ mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:33.678 # +promoted-slave slave 172.16.50.115:6379 172.16.50.115 6379 @ mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:33.678 # +failover-state-reconf-slaves master mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:33.758 * +slave-reconf-sent slave 172.16.50.113:6379 172.16.50.113 6379 @ mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:34.092 # -odown master mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:34.662 * +slave-reconf-inprog slave 172.16.50.113:6379 172.16.50.113 6379 @ mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:35.724 * +slave-reconf-done slave 172.16.50.113:6379 172.16.50.113 6379 @ mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:35.800 # +failover-end master mymaster 172.16.50.111 6379
12946:X 20 Feb 01:40:35.800 # +switch-master mymaster 172.16.50.111 6379 172.16.50.115 6379
12946:X 20 Feb 01:40:35.800 * +slave slave 172.16.50.113:6379 172.16.50.113 6379 @ mymaster 172.16.50.115 6379
12946:X 20 Feb 01:40:35.801 * +slave slave 172.16.50.111:6379 172.16.50.111 6379 @ mymaster 172.16.50.115 6379


Redis  Master 自動切換到 172.16.50.115 , 登錄 172.16.50.115 查看狀態

# Replication
role:master
connected_slaves:1
slave0:ip=172.16.50.113,port=6379,state=online,offset=17056,lag=1


測試完成啓動node01 redis , 查看 sentinel  日誌

12946:X 20 Feb 01:41:05.843 # +sdown slave 172.16.50.111:6379 172.16.50.111 6379 @ mymaster 172.16.50.115 6379
12946:X 20 Feb 01:42:56.146 # -sdown slave 172.16.50.111:6379 172.16.50.111 6379 @ mymaster 172.16.50.115 6379
12946:X 20 Feb 01:43:06.074 * +convert-to-slave slave 172.16.50.111:6379 172.16.50.111 6379 @ mymaster 172.16.50.115 6379


node01 node02 node03 配置Keepalived 服務

! Configuration File for keepalived

global_defs {
  router_id  node02
}

vrrp_script chk_redis {
    script "/etc/keepalived/check_redis.sh"
    interval 2
    weight -50
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
       chk_redis
    }
    virtual_ipaddress {
        172.16.50.135
    }
}


腳本/etc/keepalived/check_redis.sh 內容如下:

#!/bin/bash
ALIVE=`/usr/bin/redis-cli PING`
rstatus=$(/usr/bin/redis-cli info Replication | grep "role" | awk -F ':' '{print $2}')
a=$(echo $rstatus | grep "master")

if [ "$ALIVE" == "PONG" ] && [ "$a" != "" ] ; then  # 判斷redis是否運行,及是否爲master
  exit 0
else
  exit 1
fi


node01 node02 node03 分別啓動Keepalived 服務

systemctl enable keepalived && systemctl start keepalived


當 Redis Master 在某一個節點上 , 虛擬IP就會漂移到這節點


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章