Redis HA 配置

daniel
androvideo
Published in
4 min readApr 26, 2018

--

最近在 kubernetes上建立redis HA,雖然用helm就可以很輕鬆地建立起來了,但還是要了解一下redis HA大致上怎麼運作的,因此在這邊稍微介紹一下Redis HA中,需要哪些角色,跟大略的運作方式。

Redis HA,需要三個角色才能運作,Master, Slave, Sentinel,下面分別介紹他們的功用跟基本配置。

Master

用來接受寫資料的redis,基本上就是啟動一個redis就好了,預設就是master。

Slave

Slave需要跟Master做資料上的同步,因此需要在配置文件上加入下列一行

slaveof <master-ip> <master-port>

重啟redis之後,redis就會變成slave,slave只能讀,不能寫,可以用下列指令來檢查redis目前的角色

redis-cli info replication

建立好master與slave之後,接下來就是要預防master掛掉的問題了,master掛掉後,就需要slave上來當作master,下面解釋要如何進行切換。

Sentinel

Sentinel(哨兵)是用來監控master是不是還活著,如果master沒有回應的話,就會彼此投票,從slave選出一台master這樣,下面會解釋一下他的設定檔

# 這台sentinel的id
sentinel myid <ID>
# GROUP_NAME就隨便亂取就好了,特別需要解釋的應該是quorum,這代表的是需要幾個sentinel同意master已經掛掉了
# 當有指定數量的sentinel同意master掛掉了,就會啟動failover
sentinel monitor <GROUP_NAME> <MASTER_IP> <MASTER_PORT> <QUORUM>
# master多少milliseconds沒有回應則代表master掛掉了
sentinel down-after-milliseconds <GROUP_NAME> <MILLISECONDS>
# 災難復原要在多少時間內做完,沒做完則為timeout
sentinel failover-timeout <GROUP_NAME> <MILLISECONDS>
bind 0.0.0.0# 當新的master被選出來之後,同時有多少台slave可以跟master同步
# 如果有十台slave,而number設定為1,則需要同步十次
# 如果設定為10,則只需要同步一次,所以數字越小時間越久
sentinel parallel-syncs <GROUP_NAME> <NUMBER>
port 26379dir "/"sentinel client-reconfig-script <GROUP_NAME> /usr/local/bin/promote.sh# 目前的大家認同的版本號
sentinel config-epoch <GROUP_NAME> 0
# 目前leader的版本號
sentinel leader-epoch <GROUP_NAME> 0
# slave的位置
sentinel known-slave <GROUP_NAME> <SLAVE_IP> <SLAVE_PORT>
# 其他sentinel的位置,這邊的sentinel id就是指上面設定的myid
sentinel known-sentinel <GROUP_NAME> <SENTINEL_IP> <SENTINEL_PORT> <SENTINEL_ID>
# 目前自己的版本號
sentinel current-epoch 0

啟動sentinel

# 兩行指令是相同意思
./redis-sentinel <sentinel.conf>
./redis-server <sentinel.conf> --sentinel

檢查

可以透過下列指令檢查

redis-cli -p 26379 info sentinel

另外需要注意的就是sentinel的數量要是奇數個,不然可能會選不出新的master。

--

--