[料理佳餚] 使用 Redis-Sentinel 打造 Redis 的 HA

Redis 到目前為止都還是以單執行緒的方式在執行,要多個 Redis 就要多設定幾個 instance,這樣如果 Redis crash 了怎麼辦?預設我們可以從 master 的設定檔去設定 slave 是誰,但是 slave 預設是 read-only,而且當 master crash 的時候,不手動做 master、slave 的身份互換,slave 是無法接手 master 的工作,這時候我們可以利用 Redis 內建的 Redis-Sentinel 的工具來解決 failover 的問題。

設定 slave 的 master

首先我們必須先從 redundant Redis instance 的設定檔中找到 slaveof <masterip> <masterport> 這個參數如果不設定,預設就是 master 身份,只要一設定之後,就是擔任某 master 的 redundant instance。

準備 Redis-Sentinel 設定檔

最基本最基本的設定值如下:

port 26379
daemonize yes
dir /tmp

# master1
# 至少需要幾個 sentinel 同意,master_6379 才算失效,自動 failover。
sentinel monitor master_6379 127.0.0.1 6379 1

# 多少毫秒數內沒有回應,master_6379 就算失效。
sentinel down-after-milliseconds master_6379 1000

# 當 failover 發生時,最多可以有多少個 slave 從新的 master 同步資料。
sentinel parallel-syncs master_6379 1

# 多少毫秒數內沒有 failover 成功,就算 failover 失敗。
sentinel failover-timeout master_6379 180000


# master2
...

每個 sentinel 可以監視多個 master instance,所以只要有多個 master 就可以一直往下加,另外有關於這些參數所代表的意義可以參考官網的說明 Redis Sentinel Documentation

啟動 Redis-Sentinel

# Start sentinel
/usr/local/bin/redis-sentinel /etc/redis/sentinel_6379.conf

檢查 Redis-Sentinel 狀態

Redis-Sentinel 啟動後可以透過下面的指令得到 Redis-Sentinel 的相關資訊。

# Check sentinel
redis-cli -h 127.0.01 -p 26379 info sentinel

以上是伺服器端的配置,至於 Application 就要自己想辦法去切換了。

參考資料