談到Redis服務器的高可用,如何保證備份的機器是原始服務器的完整備份呢?這時候就須要哨兵和複製。node
Redis正是利用這兩個功能來保證Redis的高可用。算法
哨兵是Redis集羣架構中很是重要的一個組件,哨兵的出現主要是解決了主從複製出現故障時須要人爲干預的問題。數據庫
**(1)集羣監控:**負責監控Redis master和slave進程是否正常工做服務器
**(2)消息通知:**若是某個Redis實例有故障,那麼哨兵負責發送消息做爲報警通知給管理員架構
**(3)故障轉移:**若是master node掛掉了,會自動轉移到slave node上分佈式
**(4)配置中心:**若是故障轉移發生了,通知client客戶端新的master地址blog
原理:當主節點出現故障時,由Redis Sentinel自動完成故障發現和轉移,並通知應用方,實現高可用性。進程
哨兵機制創建了多個哨兵節點(進程),共同監控數據節點的運行情況。 同時哨兵節點之間也互相通訊,交換對主從節點的監控情況。 每隔1秒每一個哨兵會向整個集羣:Master主服務器+Slave從服務器+其餘Sentinel(哨兵)進程,發送一次ping命令作一次心跳檢測。 這個就是哨兵用來判斷節點是否正常的重要依據,涉及兩個新的概念:主觀下線和客觀下線。內存
**1. 主觀下線:**一個哨兵節點斷定主節點down掉是主觀下線。部署
**2.客觀下線:**只有半數哨兵節點都主觀斷定主節點down掉,此時多個哨兵節點交換主觀斷定結果,纔會斷定主節點客觀下線。
**3.原理:**基本上哪一個哨兵節點最早判斷出這個主節點客觀下線,就會在各個哨兵節點中發起投票機制Raft算法(選舉算法),最終被投爲領導者的哨兵節點完成主從自動化切換的過程。
Redis爲了解決單點數據庫問題,會把數據複製多個副本部署到其餘節點上,經過複製,實現Redis的高可用性,實現對數據的冗餘備份,保證數據和服務的高度可靠性。
①從數據庫向主數據庫發送sync(數據同步)命令。
②主數據庫接收同步命令後,會保存快照,建立一個RDB文件。
③當主數據庫執行完保持快照後,會向從數據庫發送RDB文件,而從數據庫會接收並載入該文件。
④主數據庫將緩衝區的全部寫命令發給從服務器執行。
⑤以上處理完以後,以後主數據庫每執行一個寫命令,都會將被執行的寫命令發送給從數據庫。
注意:在Redis2.8以後,主從斷開重連後會根據斷開以前最新的命令偏移量進行增量複製。
**1.主從模式:**讀寫分離,備份,一個Master能夠有多個Slaves。
**2.哨兵sentinel:**監控,自動轉移,哨兵發現主服務器掛了後,就會從slave中從新選舉一個主服務器。
**3.集羣:**爲了解決單機Redis容量有限的問題,將數據按必定的規則分配到多臺機器,內存/QPS不受限於單機,可受益於分佈式集羣高擴展性。