redis-sentinel-哨兵集羣-簡單部署

Redis Sentinel的主要功能

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

架構圖以下

master 、slave配置文件內容

# 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

sentinel 配置文件內容

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

相關文章
相關標籤/搜索