Redis有三種集群模式离咐,分別是:主從模式队秩、Sentinel模式雷酪、Cluster模式思瘟。
主從模式:
主從模式是三種里面最簡單的,在主從復(fù)制中,數(shù)據(jù)庫分為兩類:主數(shù)據(jù)庫和從數(shù)據(jù)庫。
特點(diǎn)如下:
1.主數(shù)據(jù)庫可以進(jìn)行讀寫操作,當(dāng)讀寫操作導(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é)點(diǎn)重新選一個slave.
工作機(jī)制:
當(dāng)slave啟動后诗越,主動向master發(fā)送SYNC命令砖瞧。master接收到SYNC命令后在后臺保存快照(RBD)和緩存保存快照這段時間的命令,然后將保存的快照文件和緩存命令發(fā)送給slave嚷狞。slave接收到了快照文件和命令后加載快照文件和緩存的執(zhí)行命令块促。
復(fù)制初始化后荣堰,master每次接到寫的命令后都會同步發(fā)送給slave,保證數(shù)據(jù)的一致性竭翠。
缺點(diǎn):
master節(jié)點(diǎn)在主從模式中唯一振坚,如果master掛掉,則redis無法對外提供寫服務(wù)斋扰。
哨兵模式(Sentinel)模式:
主從模式的弊端就是不具備高可用渡八,當(dāng)master掛掉以后,Redis將不會再對外進(jìn)行寫操作传货,因此Sentinel應(yīng)運(yùn)而生屎鳍。
它的主要作用就是監(jiān)控redis集群的運(yùn)行狀況,
特點(diǎn)如下:
1.Sentinel模式就是建立在主從模式的基礎(chǔ)上问裕,如果只有一個redis節(jié)點(diǎn)哥艇,Sentinel就沒有任何意義。
2.當(dāng)master掛了以后僻澎,Sentinel會在slave中選擇一個作為master,并修改他們的配置文件十饥,其他的slave的配置文件也會被修改窟勃,比如slaveof屬性會指向新的master.
3當(dāng)master重新啟動后,它將不會再是master而是作為slave接收新的master的同步數(shù)據(jù)逗堵。
4.Sentinel因為也是一個進(jìn)程有掛掉的可能秉氧,所以Sentinel也會啟動多個形成一個Sentinel集群。
5.多Sentinel配置的時候蜒秤,Sentinel之間也會自動監(jiān)控汁咏。
6.當(dāng)主從模式配置密碼時,Sentinel也會同步配置信息修改到配置文件作媚,不需要擔(dān)心攘滩。
7.一個Sentinel或Sentinel集群可以管理多個redis,多個Sentinel也可以監(jiān)控同一個redis.
8.Sentinel最好不要和redis部署在同一個機(jī)器纸泡,不然redis掛了漂问,Sentinel也掛了。
工作機(jī)制:
1.每個sentinel以每秒鐘一次的頻率向它所知的master女揭,slave以及其他sentinel實例發(fā)送一個 ping命令
2.如果一個實例距離最后一次有效回復(fù)ping命令的時間超過所指定的值蚤假,那么這個實例會被sentinel標(biāo)記為主觀下線。
3.如果一個master被標(biāo)記為主觀下線吧兔,則正在監(jiān)視這個master的所有sentinel要以每秒一次的頻率確認(rèn)master的確進(jìn)入了主觀下線狀態(tài)
4.當(dāng)有足夠數(shù)量的sentinel(大于等于配置文件指定的值)在指定的時間范圍內(nèi)確認(rèn)master的確進(jìn)入了主觀下線狀態(tài)磷仰, 則master會被標(biāo)記為客觀下線 。
5.在一般情況下境蔼, 每個sentinel會以每 10 秒一次的頻率向它已知的所有master灶平,slave發(fā)送 INFO 命令
6.當(dāng)master被sentinel標(biāo)記為客觀下線時伺通,sentinel向下線的master的所有slave發(fā)送 INFO 命令的頻率會從 10 秒一次改為 1 秒一次
7.若沒有足夠數(shù)量的sentinel同意master已經(jīng)下線,master的客觀下線狀態(tài)就會被移除民逼;若master重新向sentinel的 PING 命令返回有效回復(fù)泵殴,master的主觀下線狀態(tài)就會被移除。
當(dāng)使用sentinel模式的時候拼苍,客戶端就不要直接連接Redis笑诅,而是連接sentinel的ip和port,由sentinel來提供具體的可提供服務(wù)的Redis實現(xiàn)疮鲫,這樣當(dāng)master節(jié)點(diǎn)掛掉以后吆你,sentinel就會感知并將新的master節(jié)點(diǎn)提供給使用者。
Cluster模式
sentinel模式基本可以滿足一般生產(chǎn)的需求俊犯,具備高可用性妇多。但是當(dāng)數(shù)據(jù)量過大到一臺服務(wù)器存放不下的情況時,主從模式或sentinel模式就不能滿足需求了燕侠,這個時候需要對存儲的數(shù)據(jù)進(jìn)行分片者祖,將數(shù)據(jù)存儲到多個Redis實例中。cluster模式的出現(xiàn)就是為了解決單機(jī)Redis容量有限的問題绢彤,將Redis的數(shù)據(jù)根據(jù)一定的規(guī)則分配到多臺機(jī)器七问。
cluster可以說是sentinel和主從模式的結(jié)合體,通過cluster可以實現(xiàn)主從和master重選功能茫舶,所以如果配置兩個副本三個分片的話械巡,就需要六個Redis實例。因為Redis的數(shù)據(jù)是根據(jù)一定規(guī)則分配到cluster的不同機(jī)器的饶氏,當(dāng)數(shù)據(jù)量過大時讥耗,可以新增機(jī)器進(jìn)行擴(kuò)容。
使用集群疹启,只需要將redis配置文件中的cluster-enable配置打開即可古程。每個集群中至少需要三個主數(shù)據(jù)庫才能正常運(yùn)行,新增節(jié)點(diǎn)非常方便喊崖。
cluster集群特點(diǎn):
1.多個redis節(jié)點(diǎn)網(wǎng)絡(luò)互聯(lián)籍琳,數(shù)據(jù)共享
2.所有的節(jié)點(diǎn)都是一主一從(也可以是一主多從),其中從不提供服務(wù)贷祈,僅作為備用
3.不支持同時處理多個key(如MSET/MGET)趋急,因為redis需要把key均勻分布在各個節(jié)點(diǎn)上,并發(fā)量很高的情況下同時創(chuàng)建key-value會降低性能并導(dǎo)致不可預(yù)測的行為
4.支持在線增加势誊、刪除節(jié)點(diǎn)
5.客戶端可以連接任何一個主節(jié)點(diǎn)進(jìn)行讀寫