背景說明:html
這裏採用1主2從的redis集羣,3個sentinel搭建高可用redis集羣。redis
一,關於搭建redis-sentinel高可用以前,咱們必需要了解redis主從搭建redis-sentinel的基礎。vim
redis-sentinel功能:服務器
二, redis主從安裝測試
詳情見3d
http://www.javashuo.com/article/p-ouwmdztt-cs.html日誌
三,安裝redis-sentinel , 我這邊3個節點都是在一臺服務器上。htm
cd /usr/local/src
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
tar -zxvf redis-3.0.7.tar.gz
cd redis-3.0.7
make
make PREFIX=/usr/local/redis-3.0.7 install
ln -s /usr/local/redis-3.0.7 /usr/local/redis
mkdir -p /usr/local/redis/conf
cp sentinel.conf /usr/local/redis/conf/sentinel-26379.conf (複製源碼中的哨兵配置文件)
mkdir -p /usr/local/redis/logs
vim /usr/local/redis/conf/sentinel-26379.conf ,改爲以下: 10.211.55.7是redis的主,mymaster是隨意取的名字blog
port 26379 dir "/tmp" logfile "/usr/local/redis/logs/sentinel-26379.log" daemonize yes sentinel monitor mymaster 10.211.55.7 6379 2 sentinel auth-pass mymaster linlin sentinel down-after-milliseconds mymaster 15000 sentinel failover-timeout mymaster 120000 sentinel parallel-syncs mymaster 1 #發生切換以後執行的一個自定義腳本:如發郵件、vip切換等 #sentinel notification-script <master-name> <script-path>
vim /usr/local/redis/conf/sentinel-26380.conf進程
port 26380 dir "/tmp" logfile "/usr/local/redis/logs/sentinel-26380.log" daemonize yes sentinel monitor mymaster 10.211.55.7 6379 2 sentinel down-after-milliseconds mymaster 15000 sentinel failover-timeout mymaster 120000 sentinel auth-pass mymaster linlin sentinel config-epoch mymaster 0 #發生切換以後執行的一個自定義腳本:如發郵件、vip切換等 #sentinel notification-script <master-name> <script-path>
vim /usr/local/redis/conf/sentinel-26381.conf
port 26381 dir "/tmp" logfile "/usr/local/redis/logs/sentinel-26381.log" daemonize yes sentinel monitor mymaster 10.211.55.7 6379 2 sentinel down-after-milliseconds mymaster 15000 sentinel failover-timeout mymaster 120000 sentinel auth-pass mymaster linlin sentinel config-epoch mymaster 0 #發生切換以後執行的一個自定義腳本:如發郵件、vip切換等 #sentinel notification-script <master-name> <script-path>
三,啓動redis-sentinel
cd /usr/local/redis/bin
./redis-sentinel ../conf/sentinel-26379.conf
./redis-sentinel ../conf/sentinel-26380.conf
./redis-sentinel ../conf/sentinel-26381.conf
啓動以後 sentinel節點的配置文件,會默認生成部分配置段,該配置段其實就是標註從節點和master節點已經sentinel節點的。
固然,若是發生故障轉移,redis中的配置也會發生變化。
四,查看日誌,簡單分析
sentinel-26379的日誌,其餘節點相似,這也是咱們爲何沒在redis-sentinel節點中配置從節點和其餘sentinel節點的緣由。他們會經過消息訂閱進行數據交換。
五,模擬故障,查看故障是否轉移
master端自動down掉,爲此,這邊直接使用kill命令演示。
master端:已經kill掉master端進程
查看日誌:
master(6379)端日誌: 無日誌生成
slalve1 (6380)端日誌:
丟失鏈接,放棄原先儲存的master信息,並嘗試繼續鏈接,可是一直被拒絕。拒絕的時間31s,進行故障轉移的時間爲47s,故障轉移完成時間爲48s。(爲啥這麼快,其實跟我redis沒有數據有很大關係 哈哈)
slave2 (6381)端日誌:
sentinel-26379端日誌:
sentinel-26380端日誌:
sentinel-26381端日誌:
從上述日誌能夠發現,故障已經轉移,10.211.55.7 6381已經成爲新的master,而原先的6379已經被下線了,可是仍然被關注中。
登錄最新的master端查看:
上述,就是故障轉移成功了。接下來咱們啓動最先的master,查看是否會從新加入到redis集羣中。
以下,能夠發現原先的master,已經成爲slave了。
以上,就是redis sentinel集羣搭建的過程。測試過,若是一個sentinel掛掉,自動轉移仍是能夠的哦。