1. 程式人生 > >redis:sentinel配置及測試

redis:sentinel配置及測試

參考原理:

http://www.redis.cn/topics/sentinel.html
https://segmentfault.com/a/1190000002680804

結構:

192.168.56.159 6379 master
192.168.56.159 6380 slave
192.168.56.159 26379 sentinel
192.168.56.159 26380 sentinel
簡單測試

sentinel配置檔案

port 26379
daemonize yes
logfile "/data/redis/redis_sentinel/26379/sentinel.log"
dir "/data/redis/redis_sentinel/26379"

sentinel monitor mymaster 192.168.56.159 6379 1
sentinel down-after-milliseconds mymaster 15000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel auth-pass mymaster xxx
sentinel client-reconfig-script mymaster /data/scripts/redis.sh

啟動sentinel
redis-sentinel sentinel.conf
檢視日誌
6622:X 25 Jul 15:14:20.113 # Sentinel runid is 6b52acf5d95573a1f0b629d5aa2e203ca5be8fa9
6622:X 25 Jul 15:14:20.113 # +monitor master mymaster 192.168.56.159 6379 quorum 1
6622:X 25 Jul 15:14:20.114 * +slave slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379

再啟動26380埠的sentinel,檢視26379的日誌
6622:X 25 Jul 15:18:33.936 * +sentinel sentinel 192.168.56.159:26380 192.168.56.159 26380 @ mymaster 192.168.56.159 6379

登入任意埠的sentinel檢視資訊
[
[email protected]
scripts]redis-cli -p 26380 info Sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 master0:name=mymaster,status=ok,address=192.168.56.159:6379,slaves=1,sentinels=2

測試:
停掉slave 6380
6622:X 25 Jul 15:21:35.262 # +sdown slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379

啟動slave 6380
6622:X 25 Jul 15:22:36.074 * +reboot slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379
6622:X 25 Jul 15:22:36.130 # -sdown slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379

停掉sentinel 26379
6666:X 25 Jul 15:24:03.631 # +sdown sentinel 192.168.56.159:26379 192.168.56.159 26379 @ mymaster 192.168.56.159 6379
啟動sentinel 26379
6666:X 25 Jul 15:24:35.313 # -sdown sentinel 192.168.56.159:26379 192.168.56.159 26379 @ mymaster 192.168.56.159 6379
6666:X 25 Jul 15:24:37.315 * -dup-sentinel master mymaster 192.168.56.159 6379 #duplicate of 192.168.56.159:26379 or e64490cfd0f4e1cb2c3a7be53657a00c68defe99
6666:X 25 Jul 15:24:37.315 * +sentinel sentinel 192.168.56.159:26379 192.168.56.159 26379 @ mymaster 192.168.56.159 6379

停掉master 6379
sentinel-26379日誌
6732:X 25 Jul 15:28:21.904 # +sdown master mymaster 192.168.56.159 6379
6732:X 25 Jul 15:28:21.904 # +odown master mymaster 192.168.56.159 6379 #quorum 1/1
6732:X 25 Jul 15:28:21.904 # +new-epoch 1
6732:X 25 Jul 15:28:21.905 # +try-failover master mymaster 192.168.56.159 6379
6732:X 25 Jul 15:28:21.916 # +vote-for-leader e64490cfd0f4e1cb2c3a7be53657a00c68defe99 1
6732:X 25 Jul 15:28:21.928 # 192.168.56.159:26380 voted for e64490cfd0f4e1cb2c3a7be53657a00c68defe99 1
6732:X 25 Jul 15:28:21.993 # +elected-leader master mymaster 192.168.56.159 6379
6732:X 25 Jul 15:28:21.993 # +failover-state-select-slave master mymaster 192.168.56.159 6379
6732:X 25 Jul 15:28:22.085 # +selected-slave slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379
6732:X 25 Jul 15:28:22.085 * +failover-state-send-slaveof-noone slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379
6732:X 25 Jul 15:28:22.161 * +failover-state-wait-promotion slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379
6732:X 25 Jul 15:28:22.982 # +promoted-slave slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379
6732:X 25 Jul 15:28:22.982 # +failover-state-reconf-slaves master mymaster 192.168.56.159 6379
6732:X 25 Jul 15:28:23.008 # +failover-end master mymaster 192.168.56.159 6379
6732:X 25 Jul 15:28:23.008 # +switch-master mymaster 192.168.56.159 6379 192.168.56.159 6380
6732:X 25 Jul 15:28:23.008 * +slave slave 192.168.56.159:6379 192.168.56.159 6379 @ mymaster 192.168.56.159 6380
6732:X 25 Jul 15:28:38.039 # +sdown slave 192.168.56.159:6379 192.168.56.159 6379 @ mymaster 192.168.56.159 6380
sentinel-26380日誌
6666:X 25 Jul 15:28:21.924 # +new-epoch 1
6666:X 25 Jul 15:28:21.927 # +vote-for-leader e64490cfd0f4e1cb2c3a7be53657a00c68defe99 1
6666:X 25 Jul 15:28:21.933 # +sdown master mymaster 192.168.56.159 6379
6666:X 25 Jul 15:28:21.933 # +odown master mymaster 192.168.56.159 6379 #quorum 1/1
6666:X 25 Jul 15:28:21.934 # Next failover delay: I will not start a failover before Mon Jul 25 15:34:22 2016
6666:X 25 Jul 15:28:23.019 # +config-update-from sentinel 192.168.56.159:26379 192.168.56.159 26379 @ mymaster 192.168.56.159 6379
6666:X 25 Jul 15:28:23.019 # +switch-master mymaster 192.168.56.159 6379 192.168.56.159 6380
6666:X 25 Jul 15:28:23.019 * +slave slave 192.168.56.159:6379 192.168.56.159 6379 @ mymaster 192.168.56.159 6380
6666:X 25 Jul 15:28:38.099 # +sdown slave 192.168.56.159:6379 192.168.56.159 6379 @ mymaster 192.168.56.159 6380

slave 6380狀態改變
原狀態
# Replication
role:slave
master_host:192.168.56.159
master_port:6379
master_link_status:up
現狀態
[
[email protected]
redis6380]redis-cli -p 6380 -a fangyali info Replication # Replication role:master connected_slaves:0 master_repl_offset:0 在啟動原master 6379 6732:X 25 Jul 15:34:23.247 # -sdown slave 192.168.56.159:6379 192.168.56.159 6379 @ mymaster 192.168.56.159 6380 6732:X 25 Jul 15:34:33.185 * +convert-to-slave slave 192.168.56.159:6379 192.168.56.159 6379 @ mymaster 192.168.56.159 6380 檢視資訊(原master配置檔案masterauth 沒有開啟,第一次切換master_link_status:down) redis-cli -p 6379 -a fangyali info Replication # Replication role:slave master_host:192.168.56.159 master_port:6380 master_link_status:up
故障轉移
一次故障轉移操作由以下步驟組成:
發現主伺服器已經進入客觀下線狀態。
對我們的當前紀元進行自增(詳情請參考 Raft leader election ), 並嘗試在這個紀元中當選。
如果當選失敗, 那麼在設定的故障遷移超時時間的兩倍之後, 重新嘗試當選。 如果當選成功, 那麼執行以下步驟。
選出一個從伺服器,並將它升級為主伺服器。
向被選中的從伺服器傳送 SLAVEOF NO ONE 命令,讓它轉變為主伺服器。
通過釋出與訂閱功能, 將更新後的配置傳播給所有其他 Sentinel , 其他 Sentinel 對它們自己的配置進行更新。
向已下線主伺服器的從伺服器傳送 SLAVEOF 命令, 讓它們去複製新的主伺服器。
當所有從伺服器都已經開始複製新的主伺服器時, 領頭 Sentinel 終止這次故障遷移操作。

故障轉移(failover)的第一步,就是選出新的master,大致的篩選流程為:
1. 刪除列表中所有處於下線或者斷線狀態的slave
2. 刪除列表中所有最近五秒內沒有回覆過領頭sentinel的INFO命令的slave
3. 刪除所有與已下線主伺服器連線斷開超過down-after-milliseconds * 10毫秒的slave(確保slave沒有過早與master斷開,副本比較新)
4. 根據slave優先順序選擇
5. 如果優先順序相同,選擇複製偏移量最大的slave
6. 如果都相同,按照run_id排序,選出run_id最小的slave


有一次failover會失敗,然後等待2*failover-timeout 後failover成功,原因?
sentinel-26379日誌
6732:X 25 Jul 18:40:37.402 # +sdown master mymaster 192.168.56.159 6380
6732:X 25 Jul 18:40:37.402 # +odown master mymaster 192.168.56.159 6380 #quorum 1/1
6732:X 25 Jul 18:40:37.403 # +new-epoch 2
6732:X 25 Jul 18:40:37.403 # +try-failover master mymaster 192.168.56.159 6380
6732:X 25 Jul 18:40:37.455 # +vote-for-leader e64490cfd0f4e1cb2c3a7be53657a00c68defe99 2
6732:X 25 Jul 18:40:37.456 # 192.168.56.159:26380 voted for de9a51fdc0ae15c8bc09cbde6036209d63c44988 2
6732:X 25 Jul 18:40:48.162 # -failover-abort-not-elected master mymaster 192.168.56.159 6380
6732:X 25 Jul 18:40:48.239 # Next failover delay: I will not start a failover before Mon Jul 25 18:46:38 2016
6732:X 25 Jul 18:46:38.184 # +new-epoch 3
6732:X 25 Jul 18:46:38.184 # +try-failover master mymaster 192.168.56.159 6380
6732:X 25 Jul 18:46:38.188 # +vote-for-leader e64490cfd0f4e1cb2c3a7be53657a00c68defe99 3
6732:X 25 Jul 18:46:38.223 # 192.168.56.159:26380 voted for e64490cfd0f4e1cb2c3a7be53657a00c68defe99 3
6732:X 25 Jul 18:46:38.252 # +elected-leader master mymaster 192.168.56.159 6380
6732:X 25 Jul 18:46:38.252 # +failover-state-select-slave master mymaster 192.168.56.159 6380
6732:X 25 Jul 18:46:38.324 # +selected-slave slave 192.168.56.159:6379 192.168.56.159 6379 @ mymaster 192.168.56.159 6380
6732:X 25 Jul 18:46:38.324 * +failover-state-send-slaveof-noone slave 192.168.56.159:6379 192.168.56.159 6379 @ mymaster 192.168.56.159 6380
6732:X 25 Jul 18:46:38.400 * +failover-state-wait-promotion slave 192.168.56.159:6379 192.168.56.159 6379 @ mymaster 192.168.56.159 6380
6732:X 25 Jul 18:46:38.559 # +promoted-slave slave 192.168.56.159:6379 192.168.56.159 6379 @ mymaster 192.168.56.159 6380
6732:X 25 Jul 18:46:38.560 # +failover-state-reconf-slaves master mymaster 192.168.56.159 6380
6732:X 25 Jul 18:46:38.647 # +failover-end master mymaster 192.168.56.159 6380
6732:X 25 Jul 18:46:38.647 # +switch-master mymaster 192.168.56.159 6380 192.168.56.159 6379
6732:X 25 Jul 18:46:38.647 * +slave slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379
6732:X 25 Jul 18:46:53.670 # +sdown slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379
sentinel-26380日誌
6666:X 25 Jul 18:40:37.413 # +sdown master mymaster 192.168.56.159 6380
6666:X 25 Jul 18:40:37.413 # +odown master mymaster 192.168.56.159 6380 #quorum 1/1
6666:X 25 Jul 18:40:37.413 # +new-epoch 2
6666:X 25 Jul 18:40:37.413 # +try-failover master mymaster 192.168.56.159 6380
6666:X 25 Jul 18:40:37.454 # +vote-for-leader de9a51fdc0ae15c8bc09cbde6036209d63c44988 2
6666:X 25 Jul 18:40:37.456 # 192.168.56.159:26379 voted for e64490cfd0f4e1cb2c3a7be53657a00c68defe99 2
6666:X 25 Jul 18:40:48.312 # -failover-abort-not-elected master mymaster 192.168.56.159 6380
6666:X 25 Jul 18:40:48.403 # Next failover delay: I will not start a failover before Mon Jul 25 18:46:38 2016
6666:X 25 Jul 18:46:38.195 # +new-epoch 3
6666:X 25 Jul 18:46:38.221 # +vote-for-leader e64490cfd0f4e1cb2c3a7be53657a00c68defe99 3
6666:X 25 Jul 18:46:38.222 # Next failover delay: I will not start a failover before Mon Jul 25 18:52:38 2016
6666:X 25 Jul 18:46:38.654 # +config-update-from sentinel 192.168.56.159:26379 192.168.56.159 26379 @ mymaster 192.168.56.159 6380
6666:X 25 Jul 18:46:38.654 # +switch-master mymaster 192.168.56.159 6380 192.168.56.159 6379
6666:X 25 Jul 18:46:38.658 * +slave slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379
6666:X 25 Jul 18:46:53.674 # +sdown slave 192.168.56.159:6380 192.168.56.159 6380 @ mymaster 192.168.56.159 6379