閱讀目錄
使用Redis Sentinel實現Redis HA。
閱讀此文前,先閱讀文章:《【Redis】配置redis主從復制》
http://www.cnblogs.com/ssslinppp/p/5661419.html
作者:ssslinppp
配置redis主從IP和port:
| master and slave | ip | port |
| master | 127.0.0.1 | 6379 |
| slave1 | 127.0.0.1 |
6380 |
| slave2 | 127.0.0.1 |
6381 |
一、配置Sentinel.conf
上文中已經創建的主從設備,截圖如下:

如上圖所示:
- master:6379
- slave1:6380
- slave2:6380
sentinel配置文件如下:
#sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 1
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 18000
sentinel parallel-syncs mymaster 1
解釋說明如下:
>>> sentinel monitor mymaster
127.0.0.1 6379 1
- mymaster :為master redis的名稱;
- ip和port指定了6379端口的Redis為master;
- quorum:一般情況下會啟動多個redis sentinel作為分布式使用,當master掛掉之后,需要從若干個slave中推選出1個slave作為新的master,並將其他slave的slaveof設置指向這個新的master。而判斷master redis是否掛掉,需要sentinel 說了算,只有不少於quorum個sentinel認為master redis掛掉,才會進行failover。因為這里只啟動了一個sentinel,所以配置quorum為1,若是啟動了多個sentinel用於分布式,可以將quorum設置>1。
>>>
sentinel down-after-milliseconds mymaster 30000
表示當master redis 30s 沒有應答時,就可以斷定master掛掉了,但需要結合上面配置的quorum一起。
>>>
sentinel failover-timeout mymaster 18000
若sentinel在該配置時間內沒有完成failover操作(即故障時master/slave自動切換),則認為本次failover失敗。
>>>
sentinel parallel-syncs mymaster 1
指定在failover過程中,同時被sentinel reconfigure的最大slave實例數。由於reconfigure過程中,對應的slave會中斷響應客戶的請求,故為避免所有的slave同時不可用,該值需適當配小。
二、啟動Redis Sentinel
./src/redis-sentinel sentinel.conf
從上可以看出,master redis 為6379,而slave又兩個,分別為:6380和6381.
此時在去觀察sentinel.conf,會發現sentinel.conf發生了變化,如下所示:
- slave 6380的日志記錄:
- 再看看sentinel的提示信息:
- 再來觀察sentinel.conf
可以對比最初的sentinel.conf
此時再分別看看6379/6380/6381的redis.conf:
- 6379的redis.conf
分2種情況
情況1:當6379(原先的master redis)關閉后,還未重啟,此時的redis.conf文件內沒有slaveof的配置;
情況2:當6379服務啟動后,會在redis.conf的最后添加slaveof的配置,如下:
同時可以看到sentinel輸出如下信息:
e
此時看看6379的日志信息:
- 6380的redis.conf
- 6381的redis.conf
已經將slaveof自動修改為:6380(新的master)
測試新的同步信息:
從上面的輸出結果可以看出,redis 主從復制依然有效。
四、重新切換為最初的master
前面我們看到了當master掛掉時,sentinel會自動的從slave中挑選出一個作為master,並重新配置各redis實例的配置文件。
當之前掛掉的master又重啟后,如果希望還是還原到原先的主從配置,可以通過如下操作來進行:
登錄到sentinel,使用命令:
redis-cli -h 127.0.0.1 -p 26379 #26379為sentinel的端口
執行語句:
sentinel failover mymaster
接下來我們來看看是否還原到之前的主從配置:
- 先看看sentinel的輸出信息:
接下來看看3個redis.conf是否自動變化了(reconfigure)
- 6379的redis.conf
全文搜索slaveof,沒有此配置選項,說明已經發生了變化,因為6379此時就是master redis。
- 6380的redis.conf
在最后添加了:slaveof 127.0.0.1 6379;
說明6380已經從master重新變化為slave了。
- 6381的redis.conf
還可以通過如下方式進行說明:
五、參考鏈接
《【Redis】配置redis主從復制》
http://www.cnblogs.com/ssslinppp/p/5661419.html
《Configuring Redis High Availability》
http://www.veritas.com/community/blogs/configuring-redis-high-availability
《Windows下Redis Sentinel部署》
http://bbs.redis.cn/forum.php?mod=viewthread&tid=715
