Redis高可用方案-哨兵與集群
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/sunhuiliang85/article/details/78361211
Redis高可用方案
一.名詞解釋
二.主從復制
Redis主從復制模式可以將主節點的數據同步給從節點,從而保障當主節點不可達的情況下,從節點可以作為
后備頂上來,並且可以保障數據盡量不丟失(主從復制可以保障最終一致性)。第二,從節點可以擴展主節點的讀
能力,一旦主節點不能支持大規模並發量的讀操作,從節點可以在一定程度上分擔主節點的壓力。
主從復制面臨的問題:
1.當主節點發生故障的時候,需要手動的將一個從節點晉升為主節點,同時通知應用方修改主節點地址並重啟
應用,同時需要命令其它從節點復制新的主節點,整個過程需要人工干預。
2.主節點的寫能力受到單機的限制。
3.主節點的存儲能力受到單機的限制。
三. 原始的故障遷移
1.主節點發生故障后,客戶端連接主節點失敗,兩個從節點與主節點連接失敗造成復制中斷。
2.如果主節點無法正常啟動,需要選出一個從節點(slave-1),對其執行slaveof no one命令使其成為新的主節
3.原來的從節點(slave-1)成為新的主節點后,更新應用方的主節點信息,重新啟動應用方。
4.客戶端命令另一個從節點(slave-2)去復制新的主節點
5.待原來的主節點恢復后,讓它去復制新的主節點
四.Redis Sentinel的高可用
當主節點出現故障時,Redis Sentinel能自動完成故障發現和故障轉移,並通知應用方,從而實現真正的高可用。
RedisSentine是一個分布式架構,其中包含若干個Sentinel節點和Redis數據節點,每個Sentinel節點會對數據節點和
其余Sentinel節點進行監控,當它發現節點不可達時,會對節點做下線標識。如果被標識的是“主節點”,它還會和
其他的Sentinel節點進行“協商”,當大多數Sentinel節點都認為主節點不可達時,它們會選舉一個Sentinel節點來完
成自動故障轉移的工作,同時會將這個變化實時通知給Redis應用方。整個過程是自動的,不需要人工干預,解決了
Redis的高可用問題。
Redis Sentinel包含了若干個Sentinel節點,這樣做也帶來了兩個好處:
1. 對節點的故障判斷是由多個Sentinel節點共同完成,這樣可以有效的防止誤判。
2. Sentinel節點集合是由若干個Sentinel節點組成的,這樣即使個別Sentinel節點不可用,整個Sentinel節點集合依
然是健壯的。
Redis Sentinel具有以下幾個功能:
1.監控:Sentinel會定期檢測Redis數據節點、其余Sentinel節點是否可到達
2.通知:Sentinel會將故障轉移的結果通知給應用方。
3.主節點故障轉移:實現從節點晉升為主節點並維護后續正確的主從關系。
4.配置提供者:在RedisSentinel結構中,客戶端在初始化的時候連接的是Sentinel節點集合,從中獲取主節點信息。
五. Redis Sentinel拓撲結構
六. Redis Sentinel節點發現和監控機制
Redis Sentinel通過三個定時監控任務完成對各個節點的發現和監控:
1.每隔10秒,每個Sentinel會向主節點和從節點發送info命令獲取最新的拓撲結構。
2.每隔2秒,每個Sentinel節點會向Redis數據節點的_sentinel_:hello頻道上發送該Senitnel節點對於主節點的判斷。
以及當前Sentinel節點的信息,同時每個Sentinel節點也會訂閱該頻道,來了解其他Sentinel節點以及他們對主節
點的判斷。這個定時任務可以完成以下兩個工作:
(1)發現新的Sentinel節點:通過訂閱主節點的_Sentinel_:hello了解其他Sentinel節點信息。如果是新加入的
Sentinel節點,將該Sentinel節點信息保存起來,並與改Sentinel節點創建連接
(2)Sentinel節點之間交換主節點狀態,作為后面客觀下線以及領導者選舉的依據
3.每隔1秒,每個Sentinel節點會向主節點、從節點、其余Sentinel節點發送一條ping命令做一次心跳檢測,來確認
當前節點是否可達。與主節點,從節點,其余Sentinel都建立起連接,實現了對每個節點的監控。這個定時任務
是節點失敗判定的重要依據。
七. Redis Sentinel部署技巧
1.Sentinel節點不應該部署在一台物理機上。
2.部署至少三個且奇數個的Sentinel節點
3.只有一套Sentinel,還是每個主節點配置一套Sentinel的討論的建議方案是如果Sentinel節點集合監控的是同一個
業務的多個主節點集合,那么使用方案一,否則使用方案2.
八. Redis Cluster|數據分區
Redis數據分區:RedisCluster采用虛擬槽分區,所有的鍵根據哈希函數映射到0-16383整數槽內,
計算公式:slot=CRC16(key) &16383。每一個節點負責維護一部分槽以及槽所映射的鍵值數據。
Redis虛擬槽分區的特點:
1.解耦數據和節點之間的關系,簡化了節點擴容和收縮的難度
2.節點自身維護槽的映射關系,不需要客戶端或者代理服務維護槽分區元數據
3.支持節點、槽、鍵之間的映射查詢,用於數據路由、在線伸縮等場景。
————————————————
版權聲明:本文為CSDN博主「大道化簡」的原創文章,遵循CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/sunhuiliang85/article/details/78361211