哨兵(Sentinel)是redis提供的一個高可用性(HA)解決方案,它可以管理多個Redis服務器,并提供監控、提醒和自動故障轉移的功能。
復制(Replication)則使一個Redis服務器可以擁有多個備份服務器,從而實現數據的冗余備份和故障恢復。
Redis利用哨兵和復制這兩個功能來保證自身的高可用性。
哨兵(sentinal)
哨兵是Redis集群架構中非常重要的一個組件,哨兵的出現主要是解決了主從復制出現故障時需要人為干預的問題。
1.Redis哨兵主要功能
(1) 集群監控: 負責監控 Redis 主節點(master) 和從節點(slave) 是否正常工作。
(2) 消息通知: 負責發送消息作為報警通知給管理員,通知故障或其他重要事件的發生。
(3) 故障轉移: 如果 Redis 主節點(master) 發生故障,哨兵(Sentinel) 負責進行故障轉移,將從節點(slave) 提升為新的主節點(master)。
(4) 配置中心: Redis 集群的配置中心,一旦發生故障轉移,會通知客戶端(client) 新的主節點(master) 地址。
2.Redis哨兵的高可用
原理:當Redis主節點發生故障時,哨兵(Sentinel)會自動檢測故障,并進行故障轉移,同時通知應用方,以此來實現Redis的高可用性。
哨兵機制通過建立多個哨兵節點(進程)來共同監控數據節點的運行狀況,同時哨兵節點之間互相通信,交換對主從節點的監控狀況。
每隔1秒每個哨兵節點向整個集群(包括Master主服務器、Slave從服務器和其他Sentinel(哨兵)進程)發送一次ping命令,做一次心跳檢測,這是哨兵用來判斷節點是否正常的重要依據。涉及兩個新的概念:主觀下線和客觀下線。
1.主觀下線:一個哨兵節點判定主節點down掉是主觀下線。
2.客觀下線:只有半數以上的哨兵節點都主觀判定主節點down掉,此時多個哨兵節點交換主觀判定結果,才會判定主節點客觀下線。
3.原理:哪個哨兵節點最先判斷出這個主節點客觀下線,就會在各個哨兵節點中發起投票機制(如Raft算法),最終被投為領導者的哨兵節點完成主從自動化切換的過程,實現高可用性。
Redis 復制(Replication)
為了解決單點故障的問題,Redis會將數據復制到其他節點上以實現高可用性。通過數據復制,Redis實現了對數據的冗余備份,提高了數據和服務的可靠性。
數據復制原理(執行步驟)
1.從數據庫向主數據庫發送SYNC命令,請求進行數據同步。
2.主數據庫接收到SYNC命令后,會生成一個RDB文件來保存當前數據庫的快照,并記錄此后執行的所有寫命令。
3.主數據庫將生成的RDB文件發送給從數據庫,并開始持續地將新的寫命令發送給從數據庫。
4.從數據庫接收到RDB文件后,會載入該文件,并開始接收主數據庫發送的寫命令。
5.當主從之間斷開重連后,之后主數據庫每執行一個寫命令,都會將被執行的寫命令發送給從數據庫。
注意:Redis2.8版本之后的增量復制會根據斷開連接前從數據庫已經接收的最新寫命令的偏移量進行同步更新。
通過主從復制,Redis能夠實現數據備份和高可用性,同時提高了系統的讀寫性能和可擴展性。
Redis三者區別
主從復制用于數據備份和負載均衡,允許多個從服務器復制主服務器的數據。
哨兵機制用于高可用性,一旦主服務器掛了,哨兵會從多個從服務器中選舉新的主服務器。
集群模式用于解決單個Redis實例容量有限的問題,可以將數據分配到多個節點上,以提高容量和并發性能。
哨兵機制關注高可用性,集群模式關注高性能。
1.主從模式:實現讀寫分離,備份數據,一個主節點可以有多個從節點。
2.哨兵sentinel:監控Redis實例的狀態,自動進行主從切換,當主服務器掛了后,哨兵會從從服務器中重新選舉一個新的主服務器。
3.集群:為了解決單機Redis容量有限的問題,將數據按一定的規則分配到多臺機器上,實現高并發、高可用,集群內存和QPS不受限于單機,可受益于分布式集群高擴展性。