RedisSentinels:主節點,從節點,若干哨兵節點(哨兵節點不一定要等於主節點數量+從節點數量)
1.下載Linux、windows都兼容的redis.zip壓縮包,我這裡以windows環境下為例,解壓後的文件再複製出2個出來做slave從伺服器!
2.分別修改redis.windows.conf、redis.windows-service.conf配置。(具體配置略)
3.我採用一主(Master)二從(slave)三哨兵sentinel的架構模式來做演示。
master:127.0.0.1 6379
slave1:127.0.0.1 6380
slave2:127.0.0.1 6381
4.在哨兵配置
4-1
①每一個redis目錄中都創建一個文sentinel.conf文件。
②主(master-6379)中新建一個文件sentinel.conf文件內容:(兩個從slave也新建sentinel.conf文件,配置參考主配置只需要更改port 26479 , port 26579,port 26679哨兵的埠,其餘不變)
port 26379bind 127.0.0.1--上面埠和ip都是哨兵節點的信息sentinel monitor mymaster 127.0.0.1 6379 2sentinel down-after-milliseconds mymaster 5000sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 10000sentinel auth-pass mymaster thw217335protected-mode yes--守護線程
4-2
①. port :當前Sentinel服務運行的埠;
②.sentinel monitor mymaster 127.0.0.1 6379 2:Sentinel去監視一個名為mymaster的主redis實例,這個主實例的IP位址為本機地址127.0.0.1,埠號為6379,而將這個主實例判斷為失效至少需要2個 Sentinel進程的同意,只要同意Sentinel的數量不達標,自動failover就不會執行;
③.sentinel down-after-milliseconds mymaster 5000:指定了Sentinel認為Redis實例已經失效所需的毫秒數。當 實例超過該時間沒有返回PING,或者直接返回錯誤,那麼Sentinel將這個實例標記為主觀下線。只有一個 Sentinel進程將實例標記為主觀下線並不一定會引起實例的自動故障遷移:只有在足夠數量的Sentinel都將一個實例標記為主觀下線之後,實例才會被標記為客觀下線,這時自動故障遷移才會執行;
④.sentinel parallel-syncs mymaster 1:指定了在執行故障轉移時,最多可以有多少個從Redis實例在同步新的主實例,在從Redis實例較多的情況下這個數字越小,同步的時間越長,完成故障轉移所需的時間就越長;
⑤.sentinel failover-timeout mymaster 15000:如果在該時間(ms)內未能完成failover操作,則認為該failover失敗。
1.進入各自的安裝目錄下,啟動主從的各自的伺服器:
mastet:redis-server redis.windows.conf
slave1:redis-server redis.windows.conf
slave2:redis-server redis.windows.conf
2.啟動各自的客戶端:
mastet:redis-cli -h 127.0.0.1 -p 6379
slave1:redis-cli -h 127.0.0.1 -p 6380
slave2:redis-cli -h 127.0.0.1 -p 6381
如下圖所示:
master slave1
slave2
3.啟動三個sentinels的伺服器:
sentinel1:redis-server sentinel.conf --sentinel ----注意--sentinel不要忘記寫!
sentinel2:redis-server sentinel.conf --sentinel
sentinel3:redis-server sentinel.conf --sentinel
4.啟動三個sentinels的客戶端:並查看狀態如下圖:
sentinel1:redis-cli -h 127.0.0.1 -p 26379
sentinel1:redis-cli -h 127.0.0.1 -p 26479
sentinel1:redis-cli -h 127.0.0.1 -p 26579
在sentinels隨便一臺客戶端中輸入查詢狀態指令「info sentinel」,看到到主從哨兵數量信息。
上圖可以看出3個哨兵監聽主和從節點,並且這3個哨兵還互相監督!
1.原主(6379)宕機,slave1(6380)晉為主節點,注意:這個晉升規則也是隨機的。
2.在sentinel客戶端下,查看主從哨兵信息:
1):每個Sentinel以每秒鐘一次的頻率向它所知的Master,Slave以及其他 Sentinel 實例發送一個 PING 命令。
2):如果一個實例(instance)距離最後一次有效回復 PING 命令的時間超過 down-after-milliseconds 選項所指定的值, 則這個實例會被 Sentinel 標記為主觀下線。
3):如果一個Master被標記為主觀下線,則正在監視這個Master的所有 Sentinel 要以每秒一次的頻率確認Master的確進入了主觀下線狀態。
4):當有足夠數量的 Sentinel(大於等於配置文件指定的值)在指定的時間範圍內確認Master的確進入了主觀下線狀態, 則Master會被標記為客觀下線 。
5):在一般情況下, 每個 Sentinel 會以每 10 秒一次的頻率向它已知的所有Master,Slave發送 INFO 命令 。
6):當Master被 Sentinel 標記為客觀下線時,Sentinel 向下線的 Master 的所有 Slave 發送 INFO 命令的頻率會從 10 秒一次改為每秒一次 。
7):若沒有足夠數量的 Sentinel 同意 Master 已經下線, Master 的客觀下線狀態就會被移除。
若 Master 重新向 Sentinel 的 PING 命令返回有效回復, Master 的主觀下線狀態就會被移除。
每個哨兵節點每10秒會向主節點和從節點發送info命令獲取最新拓撲結構圖,哨兵配置時只要配置對主節點的監控即可,通過向主節點發送info,獲取從節點的信息,並當有新的從節點加入時可以馬上感知到
9)讓選出來的從節點成為主節點;將已下線的主節點設置成新的主節點的從節點,當其恢復正常時,複製新的主節點,變成新的主節點的從節點
10.哨兵lerder選舉流程
如果主節點被判定為客觀下線之後,就要選取一個哨兵節點來完成後面的故障轉移工作,選舉出一個leader的流程如下:
a)每個在線的哨兵節點都可以成為領導者,當它確認(比如哨兵3)主節點下線時,會向其它哨兵發is-master-down-by-addr命令,徵求判斷並要求將自己設置為領導者,由領導者處理故障轉移;
b)當其它哨兵收到此命令時,可以同意或者拒絕它成為領導者;
c)如果哨兵3發現自己在選舉的票數大於等於num(sentinels)/2+1時,將成為領導者,如果沒有超過,繼續選舉。