Redis集群的個人理解

Redis有三種集群模式,分別是:主從模式、Sentinel模式、Cluster模式。

主從模式:

主從模式是三種里面最簡單的,在主從復(fù)制中,數(shù)據(jù)庫分為兩類:主數(shù)據(jù)庫和從數(shù)據(jù)庫。
特點如下:
1.主數(shù)據(jù)庫可以進行讀寫操作,當讀寫操作導(dǎo)致數(shù)據(jù)變化時會自動的將數(shù)據(jù)同步給從數(shù)據(jù)庫。
2.從數(shù)據(jù)庫一般都是只讀的,并且接收主數(shù)據(jù)庫同步過來的數(shù)據(jù)。
3.一個master可以擁有多個slave,但是一個slave只能有一個master.
4.slave掛了并不會影響其他的salve和master的讀寫,重啟后會將數(shù)據(jù)從master同步過來。
5.master掛了以后,不影響slave的讀,但是redis不在提供寫服務(wù),master重啟以后才重新對外提供寫服務(wù)。
6.master掛了以后,不會在slave節(jié)點重新選一個slave.

工作機制:
當slave啟動后,主動向master發(fā)送SYNC命令。master接收到SYNC命令后在后臺保存快照(RBD)和緩存保存快照這段時間的命令,然后將保存的快照文件和緩存命令發(fā)送給slave。slave接收到了快照文件和命令后加載快照文件和緩存的執(zhí)行命令。
復(fù)制初始化后,master每次接到寫的命令后都會同步發(fā)送給slave,保證數(shù)據(jù)的一致性。
缺點:
master節(jié)點在主從模式中唯一,如果master掛掉,則redis無法對外提供寫服務(wù)。

哨兵模式(Sentinel)模式:

主從模式的弊端就是不具備高可用,當master掛掉以后,Redis將不會再對外進行寫操作,因此Sentinel應(yīng)運而生。
它的主要作用就是監(jiān)控redis集群的運行狀況,
特點如下:
1.Sentinel模式就是建立在主從模式的基礎(chǔ)上,如果只有一個redis節(jié)點,Sentinel就沒有任何意義。
2.當master掛了以后,Sentinel會在slave中選擇一個作為master,并修改他們的配置文件,其他的slave的配置文件也會被修改,比如slaveof屬性會指向新的master.
3當master重新啟動后,它將不會再是master而是作為slave接收新的master的同步數(shù)據(jù)。
4.Sentinel因為也是一個進程有掛掉的可能,所以Sentinel也會啟動多個形成一個Sentinel集群。
5.多Sentinel配置的時候,Sentinel之間也會自動監(jiān)控。
6.當主從模式配置密碼時,Sentinel也會同步配置信息修改到配置文件,不需要擔心。
7.一個Sentinel或Sentinel集群可以管理多個redis,多個Sentinel也可以監(jiān)控同一個redis.
8.Sentinel最好不要和redis部署在同一個機器,不然redis掛了,Sentinel也掛了。
工作機制:
1.每個sentinel以每秒鐘一次的頻率向它所知的master,slave以及其他sentinel實例發(fā)送一個 ping命令
2.如果一個實例距離最后一次有效回復(fù)ping命令的時間超過所指定的值,那么這個實例會被sentinel標記為主觀下線。
3.如果一個master被標記為主觀下線,則正在監(jiān)視這個master的所有sentinel要以每秒一次的頻率確認master的確進入了主觀下線狀態(tài)
4.當有足夠數(shù)量的sentinel(大于等于配置文件指定的值)在指定的時間范圍內(nèi)確認master的確進入了主觀下線狀態(tài), 則master會被標記為客觀下線 。
5.在一般情況下, 每個sentinel會以每 10 秒一次的頻率向它已知的所有master,slave發(fā)送 INFO 命令
6.當master被sentinel標記為客觀下線時,sentinel向下線的master的所有slave發(fā)送 INFO 命令的頻率會從 10 秒一次改為 1 秒一次
7.若沒有足夠數(shù)量的sentinel同意master已經(jīng)下線,master的客觀下線狀態(tài)就會被移除;若master重新向sentinel的 PING 命令返回有效回復(fù),master的主觀下線狀態(tài)就會被移除。

當使用sentinel模式的時候,客戶端就不要直接連接Redis,而是連接sentinel的ip和port,由sentinel來提供具體的可提供服務(wù)的Redis實現(xiàn),這樣當master節(jié)點掛掉以后,sentinel就會感知并將新的master節(jié)點提供給使用者。

Cluster模式

sentinel模式基本可以滿足一般生產(chǎn)的需求,具備高可用性。但是當數(shù)據(jù)量過大到一臺服務(wù)器存放不下的情況時,主從模式或sentinel模式就不能滿足需求了,這個時候需要對存儲的數(shù)據(jù)進行分片,將數(shù)據(jù)存儲到多個Redis實例中。cluster模式的出現(xiàn)就是為了解決單機Redis容量有限的問題,將Redis的數(shù)據(jù)根據(jù)一定的規(guī)則分配到多臺機器。
cluster可以說是sentinel和主從模式的結(jié)合體,通過cluster可以實現(xiàn)主從和master重選功能,所以如果配置兩個副本三個分片的話,就需要六個Redis實例。因為Redis的數(shù)據(jù)是根據(jù)一定規(guī)則分配到cluster的不同機器的,當數(shù)據(jù)量過大時,可以新增機器進行擴容。
使用集群,只需要將redis配置文件中的cluster-enable配置打開即可。每個集群中至少需要三個主數(shù)據(jù)庫才能正常運行,新增節(jié)點非常方便。
cluster集群特點:
1.多個redis節(jié)點網(wǎng)絡(luò)互聯(lián),數(shù)據(jù)共享
2.所有的節(jié)點都是一主一從(也可以是一主多從),其中從不提供服務(wù),僅作為備用
3.不支持同時處理多個key(如MSET/MGET),因為redis需要把key均勻分布在各個節(jié)點上,并發(fā)量很高的情況下同時創(chuàng)建key-value會降低性能并導(dǎo)致不可預(yù)測的行為
4.支持在線增加、刪除節(jié)點
5.客戶端可以連接任何一個主節(jié)點進行讀寫

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容