Redis系列教程(五):Redis哨兵、复制、集群的设计原理,以及区别
前一篇文章高并發(fā)架構系列:Redis為什么是單線程、及高并發(fā)快的3大原因詳解談了Redis高并發(fā)快的3個原因,本篇主要談Redis的高可用,兩篇合起來就可以把redis的高并發(fā)和高可用搞清楚了。
談到Redis服務器的高可用,如何保證備份的機器是原始服務器的完整備份呢?這時候就需要哨兵和復制。
Redis正是利用這兩個功能來保證Redis的高可用。
哨兵(sentinal)
哨兵是Redis集群架構中非常重要的一個組件,哨兵的出現(xiàn)主要是解決了主從復制出現(xiàn)故障時需要人為干預的問題。
1.Redis哨兵主要功能
(1)集群監(jiān)控:負責監(jiān)控Redis master和slave進程是否正常工作
(2)消息通知:如果某個Redis實例有故障,那么哨兵負責發(fā)送消息作為報警通知給管理員
(3)故障轉移:如果master node掛掉了,會自動轉移到slave node上
(4)配置中心:如果故障轉移發(fā)生了,通知client客戶端新的master地址
2.Redis哨兵的高可用
原理:當主節(jié)點出現(xiàn)故障時,由Redis Sentinel自動完成故障發(fā)現(xiàn)和轉移,并通知應用方,實現(xiàn)高可用性。
這個就是哨兵用來判斷節(jié)點是否正常的重要依據(jù),涉及兩個新的概念:主觀下線和客觀下線。
1. 主觀下線:一個哨兵節(jié)點判定主節(jié)點down掉是主觀下線。
2.客觀下線:只有半數(shù)哨兵節(jié)點都主觀判定主節(jié)點down掉,此時多個哨兵節(jié)點交換主觀判定結果,才會判定主節(jié)點客觀下線。
3.原理:基本上哪個哨兵節(jié)點最先判斷出這個主節(jié)點客觀下線,就會在各個哨兵節(jié)點中發(fā)起投票機制Raft算法(選舉算法),最終被投為領導者的哨兵節(jié)點完成主從自動化切換的過程。
Redis 復制(Replication)
Redis為了解決單點數(shù)據(jù)庫問題,會把數(shù)據(jù)復制多個副本部署到其他節(jié)點上,通過復制,實現(xiàn)Redis的高可用性,實現(xiàn)對數(shù)據(jù)的冗余備份,保證數(shù)據(jù)和服務的高度可靠性。
1.數(shù)據(jù)復制原理(執(zhí)行步驟)
①從數(shù)據(jù)庫向主數(shù)據(jù)庫發(fā)送sync(數(shù)據(jù)同步)命令。
②主數(shù)據(jù)庫接收同步命令后,會保存快照,創(chuàng)建一個RDB文件。
③當主數(shù)據(jù)庫執(zhí)行完保持快照后,會向從數(shù)據(jù)庫發(fā)送RDB文件,而從數(shù)據(jù)庫會接收并載入該文件。
④主數(shù)據(jù)庫將緩沖區(qū)的所有寫命令發(fā)給從服務器執(zhí)行。
⑤以上處理完之后,之后主數(shù)據(jù)庫每執(zhí)行一個寫命令,都會將被執(zhí)行的寫命令發(fā)送給從數(shù)據(jù)庫。
注意:在Redis2.8之后,主從斷開重連后會根據(jù)斷開之前最新的命令偏移量進行增量復制。
Redis 主從復制、哨兵和集群這三個有什么區(qū)別
1.主從模式:讀寫分離,備份,一個Master可以有多個Slaves。
2.哨兵sentinel:監(jiān)控,自動轉移,哨兵發(fā)現(xiàn)主服務器掛了后,就會從slave中重新選舉一個主服務器。
3.集群:為了解決單機Redis容量有限的問題,將數(shù)據(jù)按一定的規(guī)則分配到多臺機器,內存/QPS不受限于單機,可受益于分布式集群高擴展性。
哨兵作用于高可用,集群提高并發(fā)量,具體Redis集群方案詳情,可以參考:高并發(fā)架構系列:詳解Redis的存儲類型、集群架構、以及應用場景
你可能也喜歡:
總結
以上是生活随笔為你收集整理的Redis系列教程(五):Redis哨兵、复制、集群的设计原理,以及区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flutter原理与实践
- 下一篇: YUI事件体系之Y.CustomEven