Redis有三種集群模式入愧,分別是:
* 主從模式
* Sentinel模式
* Cluster模式
主從模式是三種模式中最簡單的,在主從復制中稚铣,數(shù)據(jù)庫分為兩類:主數(shù)據(jù)庫(master)和從數(shù)據(jù)庫(slave)攘滩。
其中主從復制有如下特點:
* 主數(shù)據(jù)庫可以進行讀寫操作腰埂,當讀寫操作導致數(shù)據(jù)變化時會自動將數(shù)據(jù)同步給從數(shù)據(jù)庫
* 從數(shù)據(jù)庫一般都是只讀的耕肩,并且接收主數(shù)據(jù)庫同步過來的數(shù)據(jù)
* 一個master可以擁有多個slave八孝,但是一個slave只能對應(yīng)一個master
* slave掛了不影響其他slave的讀和master的讀和寫,重新啟動后會將數(shù)據(jù)從master同步過來
* master掛了以后灰瞻,不影響slave的讀情组,但redis不再提供寫服務(wù)燥筷,master重啟后redis將重新對外提供寫服務(wù)
* master掛了以后,不會在slave節(jié)點中重新選一個master
工作機制:
當slave啟動后院崇,主動向master發(fā)送SYNC命令。master接收到SYNC命令后在后臺保存快照(RDB持久化)和緩存保存快照這段時間的命令袍祖,然后將保存的快照文件和緩存的命令發(fā)送給slave底瓣。slave接收到快照文件和命令后加載快照文件和緩存的執(zhí)行命令。
復制初始化后蕉陋,master每次接收到的寫命令都會同步發(fā)送給slave捐凭,保證主從數(shù)據(jù)一致性。
缺點:
從上面可以看出凳鬓,master節(jié)點在主從模式中唯一茁肠,若master掛掉,則redis無法對外提供寫服務(wù)缩举。
Sentinel模式
Sentinel模式介紹
主從模式的弊端就是不具備高可用性垦梆,當master掛掉以后,Redis將不能再對外提供寫入操作仅孩,因此sentinel應(yīng)運而生托猩。
sentinel中文含義為哨兵,它的作用就是監(jiān)控redis集群的運行狀況辽慕,特點如下:
* sentinel模式是建立在主從模式的基礎(chǔ)上京腥,如果只有一個Redis節(jié)點,sentinel就沒有任何意義
* 當master掛了以后溅蛉,sentinel會在slave中選擇一個做為master公浪,并修改它們的配置文件,其他slave的配置文件也會被修改船侧,比如slaveof屬性會指向新的master
* 當master重新啟動后欠气,它將不再是master而是做為slave接收新的master的同步數(shù)據(jù)
* sentinel因為也是一個進程有掛掉的可能,所以sentinel也會啟動多個形成一個sentinel集群
* 多sentinel配置的時候勺爱,sentinel之間也會自動監(jiān)控
* 當主從模式配置密碼時晃琳,sentinel也會同步將配置信息修改到配置文件中,不需要擔心
* 一個sentinel或sentinel集群可以管理多個主從Redis琐鲁,多個sentinel也可以監(jiān)控同一個redis
* sentinel最好不要和Redis部署在同一臺機器卫旱,不然Redis的服務(wù)器掛了以后,sentinel也掛了
工作機制:
* 每個sentinel以每秒鐘一次的頻率向它所知的master围段,slave以及其他sentinel實例發(fā)送一個 PING 命令
* 如果一個實例距離最后一次有效回復 PING 命令的時間超過 down-after-milliseconds 選項所指定的值顾翼, 則這個實例會被sentinel標記為主觀下線。
* 如果一個master被標記為主觀下線奈泪,則正在監(jiān)視這個master的所有sentinel要以每秒一次的頻率確認master的確進入了主觀下線狀態(tài)
* 當有足夠數(shù)量的sentinel(大于等于配置文件指定的值)在指定的時間范圍內(nèi)確認master的確進入了主觀下線狀態(tài)适贸, 則master會被標記為客觀下線
* 在一般情況下灸芳, 每個sentinel會以每 10 秒一次的頻率向它已知的所有master,slave發(fā)送 INFO 命令
* 當master被sentinel標記為客觀下線時拜姿,sentinel向下線的master的所有slave發(fā)送 INFO 命令的頻率會從 10 秒一次改為 1 秒一次
* 若沒有足夠數(shù)量的sentinel同意master已經(jīng)下線烙样,master的客觀下線狀態(tài)就會被移除;
? 若master重新向sentinel的 PING 命令返回有效回復蕊肥,master的主觀下線狀態(tài)就會被移除
當使用sentinel模式的時候谒获,客戶端就不要直接連接Redis,而是連接sentinel的ip和port壁却,由sentinel來提供具體的可提供服務(wù)的Redis實現(xiàn)批狱,這樣當master節(jié)點掛掉以后,sentinel就會感知并將新的master節(jié)點提供給使用者展东。
Cluster模式
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集群特點:
* 多個redis節(jié)點網(wǎng)絡(luò)互聯(lián),數(shù)據(jù)共享
* 所有的節(jié)點都是一主一從(也可以是一主多從)惫谤,其中從不提供服務(wù)壁顶,僅作為備用
* 不支持同時處理多個key(如MSET/MGET),因為redis需要把key均勻分布在各個節(jié)點上溜歪,
? 并發(fā)量很高的情況下同時創(chuàng)建key-value會降低性能并導致不可預(yù)測的行為
* 支持在線增加若专、刪除節(jié)點
* 客戶端可以連接任何一個主節(jié)點進行讀寫