Sentinel 的主要功能包括 主節點存活檢測、主從運行狀況檢測、自動故障轉移 (failover)、主從切換。Redis 的 Sentinel 最小配置是 一主一從。html
Redis 的 Sentinel 系統能夠用來管理多個 Redis 服務器,該系統能夠執行如下四個任務:redis
Sentinel 會不斷的檢查 主服務器 和 從服務器 是否正常運行。服務器
當被監控的某個 Redis 服務器出現問題,Sentinel 經過 API 腳本 向 管理員 或者其餘的 應用程序 發送通知。架構
當 主節點 不能正常工做時,Sentinel 會開始一次 自動的 故障轉移操做,它會將與 失效主節點 是 主從關係 的其中一個 從節點 升級爲新的 主節點,而且將其餘的 從節點 指向 新的主節點。調試
在 Redis Sentinel 模式下,客戶端應用 在初始化時鏈接的是 Sentinel 節點集合,從中獲取 主節點 的信息。日誌
默認狀況下,每一個 Sentinel 節點會以 每秒一次 的頻率對 Redis 節點和 其它 的 Sentinel 節點發送 PING 命令,並經過節點的 回覆 來判斷節點是否在線。code
主觀下線 適用於全部 主節點 和 從節點。若是在 down-after-milliseconds 毫秒內,Sentinel 沒有收到 目標節點 的有效回覆,則會斷定 該節點 爲 主觀下線。server
客觀下線 只適用於 主節點。若是 主節點 出現故障,Sentinel 節點會經過 sentinel is-master-down-by-addr 命令,向其它 Sentinel 節點詢問對該節點的 狀態判斷。若是超過 <quorum> 個數的節點斷定 主節點 不可達,則該 Sentinel 節點會判斷 主節點 爲 客觀下線。htm
# cat 6380/redis-6380.conf port 6380 logfile "" #調試時可打開日誌 #logfile "./redis-6380" #守護進程模式 daemonize yes bind 127.0.0.1 # cat 6381/redis-6381.conf port 6381 logfile "./redis-6381" daemonize yes replicaof 127.0.0.1 6380 bind 127.0.0.1
cat 26379/redis-sentinel.conf port 26379 # 守護進程模式 daemonize yes pidfile /var/run/redis-sentinel.pid logfile "" #調試時可打開日誌 #logfile /var/log/redis/sentinel.log dir /tmp # 哨兵監控這個master,在至少quorum個哨兵實例都認爲master down後把master標記爲odown # (objective down客觀down;相對應的存在sdown,subjective down,主觀down)狀態。 # slaves是自動發現,因此你不必明確指定slaves。 sentinel monitor mymaster 127.0.0.1 6380 2 # master或slave多長時間(默認30秒)不能使用後標記爲s_down狀態。 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 # 若sentinel在該配置值內未能完成failover操做(即故障時master/slave自動切換),則認爲本次failover失敗。 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes cat 26380/redis-sentinel.conf port 26380 daemonize yes pidfile /var/run/redis-sentinel.pid logfile /var/log/redis/sentinel.log dir /tmp sentinel monitor mymaster 127.0.0.1 6380 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes bind 127.0.0.1 cat 26381/redis-sentinel.conf port 26381 daemonize yes pidfile /var/run/redis-sentinel.pid logfile /var/log/redis/sentinel.log dir /tmp sentinel monitor mymaster 127.0.0.1 6380 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 sentinel deny-scripts-reconfig yes bind 127.0.0.1
redis-server 6380/redis-6380.conf redis-server 6381/redis-6381.conf redis-server 26379/redis-sentinel.conf --sentinel redis-server 26380/redis-sentinel.conf --sentinel redis-server 26381/redis-sentinel.conf --sentinel #啓動後配置文件會被修改
#鏈接到sentinel節點 redis-cli -h 127.0.0.1 -p 26381 #查詢主節點狀態 127.0.0.1:26381> SENTINEL get-master-addr-by-name mymaster 1) "127.0.0.1" 2) "6380" 127.0.0.1:26381> SENTINEL slaves mymaster 127.0.0.1:26381> SENTINEL sentinels mymaster #第一個將提供有關鏈接到主服務器的從服務器的相似信息, #第二個將提供有關其餘Sentinel的信息。 #查詢哨兵狀態 127.0.0.1:26381> info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=ok,address=127.0.0.1:6380,slaves=1,sentinels=3 #模擬故障 關閉主節點進程 #再次查詢 127.0.0.1:26381> SENTINEL get-master-addr-by-name mymaster 1) "127.0.0.1" 2) "6381" #成功切換 #驗證成功
https://www.cnblogs.com/bingshu/p/9776610.html 博客
https://redis.io/topics/sentinel 官網資料blog