“Redis用過嗎?”
“用過。”
“能談談對Redis集群的認識嗎?”
“額……”
這是一段真實的面試經曆。
最近,各大互聯網公司都開始了裁員,導緻大量互聯網從業人員又開始了艱辛的求職路。老手自不必說,但對于久在項目裡但基本隻是使用Redis的程序員們來說,估計這問題得難倒一部分人。
Redis集群方式共有三種:主從模式,哨兵模式,cluster(集群)模式。下面我們來一起看卡這三種模式分别是如何工作的吧。
主從模式主從模式是三種集群方式裡最簡單的。它主要是基于Redis的主從複制特性架構的。通常我們會設置一個主節點,N個從節點。
默認情況下,主節點負責處理使用者的IO操作,而從節點則會對主節點的數據進行備份,并且也會對外提供讀操作的處理。這樣做有兩個目的:備份數據,負載均衡。
當然,從節點也是能夠支持寫入數據的,隻不過從從節點寫入的數據不會同步到主節點以及其它的從節點下。
從以上,我們不難看出Redis在主從模式下,必須保證主節點不會宕機——一旦主節點宕機,其它節點不會競争稱為主節點,此時,Redis将喪失寫的能力。這點在生産環境中,是緻命的。所以Redis為我們引入了另一種集群模式——哨兵模式。
哨兵模式哨兵模式是基于主從模式做的一定變化,它能夠為Redis提供了高可用性。在實際生産中,服務器難免不會遇到一些突發狀況:服務器宕機,停電,硬件損壞等。這些情況一旦發生,其後果往往是不可估量的。而哨兵模式在一定程度上能夠幫我們規避掉這些意外導緻的災難性後果。
其實,哨兵模式的核心還是主從複制。隻不過相對于主從模式在主節點宕機導緻不可寫的情況下,多了一個競選機制——從所有的從節點競選出新的主節點。競選機制的實現,是依賴于在系統中啟動一個sentinel進程。
sentinel特點
就sentinel而言,其當然也具備一定集群能力,Redis Sentinel本身就是一個分布式系統。但sentinel集群,和其他的集群有點不一樣。sentinel可以通過發布與訂閱來自動發現Redis集群上的其它sentinel。sentinel在發現其它sentinel進程後,會将其放入一個列表中,這個列表存儲了所有已被發現的sentinel。
集群中的所有sentinel不會并發着去對同一個主節點進行故障轉移。故障轉移隻會從第一個sentinel開始,當第一個故障轉移失敗後,才會嘗試下一個。當選擇一個從節點作為新的主節點後,故障轉移即成功了(而不會等到所有的從節點配置了新的主節點後)。這過程中,如果重啟了舊的主節點,那麼就會出現無主節點的情況,這種情況下,隻能重啟集群。
當競選出新的主節點後,被選為新的主節點的從節點的配置信息會被sentinel改寫為舊的主節點的配置信息。完成改寫後,再将新主節點的配置廣播給所有的從節點。
Cluster(集群)模式Cluster(集群)模式的出現是為了解決Redis單機容量有限的問題的。該種模式會将Redis中數據按照一定規則劃分到多台機器上。這種模式有兩個特點:
Redis集群中有16384個散列槽。而Redis群集中的每個節點隻負責哈希槽的一個子集。
例如,您可能擁有一個包含3個節點的集群,其中:
這允許使用者輕松添加和删除集群中的節點。例如,如果我想添加一個新節點D,我需要将一些哈希槽從節點A,B,C移動到D.同樣,如果我想從群集中删除節點A,我隻需移動A服務的哈希槽。到B和C.當節點A為空時,我可以完全從集群中删除它。
因為将哈希槽從一個節點移動到另一個節點不需要停止操作,添加和删除節點,或者更改節點所持有的哈希槽的百分比,所以不需要任何停機時間。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!