標籤:sentinel redis叢集 master slave redis級聯
一、測試環境
master: 127.0.0.1 6379slave1: 127.0.0.1 6479slave2: 127.0.0.1 6579master-sentinel: 127.0.0.1 26379slave1-sentinel: 127.0.0.1 26479slave2-sentinel: 127.0.0.1 26579
二、下載安裝redis 2.8.3
wget http://download.redis.io/releases/redis-2.8.3.tar.gztar –zxvf redis-2.8.3.tar.gzcd redis-2.8.3make;make install(此處可用PREFIX參數將redis安裝到其他目錄)
三、配置測試環境
—-建立目錄:
cd /usr/localmkdir redis_clustermkdir redis_cluster/master_6379mkdir redis_cluster/slave_6479mkdir redis_cluster/slave_6579
—-配置redis:
master
cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/master_6379/cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/master_6379/6379-sentinel.confvi ./redis_cluster/master_6379/redis.conf(將對應配置修改成如下)
daemonize yes port 6379 requirepass vhreal masterauth vhreal appendonly no save "" slave-read-only yes
vi ./redis_cluster/master_6379/6379-sentinel.conf
port 26379 sentinel monitor mymaster 192.168.0.86 6379 2 sentinel auth-pass mymaster vhreal sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 900000
slave1
cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/slave_6479/cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/slave_6479/6479-sentinel.confvi ./redis_cluster/slave_6479/redis.conf(將對應配置修改成如下)
daemonize yes port 6479 requirepass vhreal masterauth vhreal appendonly no save "" slave-read-only yes slaveof 192.168.0.86 6379
vi ./redis_cluster/slave_6479/6479-sentinel.conf
port 26479 sentinel monitor mymaster 192.168.0.86 6379 2 sentinel auth-pass mymaster vhreal sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 900000
slave2
cp –a –R –p ~/redis-2.8.3/redis.conf ./redis_cluster/slave_6579/cp –a –R –p ~/redis-2.8.3/sentinel.conf ./redis_cluster/slave_6579/6579-sentinel.confvi ./redis_cluster/slave_6579/redis.conf(將對應配置修改成如下)
daemonize yes port 6579 requirepass vhreal masterauth vhreal appendonly no save "" slave-read-only yes slaveof 192.168.0.86 6379
vi ./redis_cluster/slave_6579/6579-sentinel.conf
port 26579 sentinel monitor mymaster 192.168.0.86 6379 2 sentinel auth-pass mymaster vhreal sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 900000
四、啟動叢集
注意:首次構建sentinel環境時,必須首先啟動master。
啟動master和master-sentinel:
redis-server /usr/local/redis_cluster/master-6379/redis.conf
redis-sentinel /usr/local/redis_cluster/master-6379/6379-sentinel.conf
複製會話,啟動slave1和slave1-sentinel:
redis-server /usr/local/redis_cluster/slave-6479/redis.conf
redis-sentinel /usr/local/redis_cluster/slave-6479/6479-sentinel.conf
複製會話,啟動slave2和slave2-sentinel:
redis-server /usr/local/redis_cluster/slave-6579/redis.conf
redis-sentinel /usr/local/redis_cluster/slave-6579/6579-sentinel.conf
查看master的狀態:
redis-cli -h 192.168.0.86 -p 6379
查看slave的狀態:
redis-cli –h 192.168.0.86 –p 6479
—-情境1:slave宕機
關閉slave1:
查看sentinel狀態,查看master的Replication資訊,此時只存在一個slave2 6579。
—-情境2:slave恢複
重新開啟slave1:
redis-server /usr/local/redis_cluster/slave-6479/redis.conf
查看sentinel狀態:
sentinel能快速的發現slave加入到叢集中:
—-情境3:master宕機
master-sentinel作為master 1的leader,會選取一個master 1的slave作為新的master。slave的選取是根據一個判斷DNS情況的優先順序來得到,優先順序相同通過runid的排序得到,但目前優先順序設定還沒實現,所以直接擷取runid排序得到slave 1。
然後發送命令slaveof no one來取消slave 1的slave狀態來轉換為master。當其他sentinel觀察到該slave成為master後,就知道錯誤處理常式啟動了。sentinel A然後發送給其他slave slaveof new-slave-ip-port 命令,當所有slave都配置完後,sentinel A從監測的masters列表中刪除故障master,然後通知其他sentinels。
關閉master:
查看sentinel狀態:
6379-sentinel:
自動將slave2即6579切換成master,原來的master變成slave。
6579-sentinel:
顯示了failover的過程:
—-情境4:master恢複
重新啟動原來的master:
redis-server /usr/local/redis_cluster/master-6379/redis.conf
查看sentinel狀態:
原來的master自動切換成slave,不會自動回復成master:
測試完成。
注意:若在sentinel已選出新主但尚未完成其它執行個體的reconfigure之前,重啟old master,則整個系統會出現無法選出new master的異常。
五、參考引用
- Redis Sentinel叢集方案–單機測試
- Redis: sentinel叢集的搭建和測試
- Redis伺服器搭建/配置/及Jedis用戶端的使用方法
Redis中sentinel叢集的搭建和Jedis測試 圖文教程[一]