redis的三種集群方式

1.主從復(fù)制

2.哨兵模式

3.集群

1.主從復(fù)制

主從復(fù)制原理

  1. 從服務(wù)器連接到主服務(wù)器并發(fā)送SYNC命令
    2.主服務(wù)器接收到從服務(wù)器的SYNC命令后,開(kāi)始執(zhí)行BGSAVE命令生成RDB文件并使用緩沖區(qū)記錄此后執(zhí)行的所有寫(xiě)命令
    3.主服務(wù)器BGSAVE執(zhí)行完后,向所有從服務(wù)器發(fā)送快照文件,并發(fā)發(fā)送期間繼續(xù)記錄被執(zhí)行的寫(xiě)命令
    4.從服務(wù)器收到快照文件后丟棄所有舊數(shù)據(jù),載入收到的快照
    5.主服務(wù)器快照發(fā)送完畢后開(kāi)始向沖服務(wù)器發(fā)送緩沖區(qū)中的寫(xiě)命令
    6.從服務(wù)器完成對(duì)快照的載入,開(kāi)始接收命令請(qǐng)求,并執(zhí)行來(lái)自主服務(wù)器緩沖區(qū)的寫(xiě)命令------從服務(wù)器初始化完成
    7.主服務(wù)器每執(zhí)行一個(gè)寫(xiě)命令就會(huì)向從服務(wù)器發(fā)送相同的寫(xiě)命令,從服務(wù)器接收并執(zhí)行收到的寫(xiě)命令------從服務(wù)器初始化完成后的操作

主從復(fù)制的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)
-支持主從復(fù)制,主機(jī)會(huì)自動(dòng)將數(shù)據(jù)同步到從服務(wù)器,可進(jìn)行讀寫(xiě)分離
-為了分載Master的讀操作壓力,Slave服務(wù)器可以為客戶端提供只讀操作的服務(wù),寫(xiě)服務(wù)仍然必須由Master來(lái)完成
-Slave同樣可以接受其他Slaves的連接和同步請(qǐng)求,這樣可以有效的分載Master的同步壓力
-Master Server是以非阻塞的方式為Slaves提供服務(wù),所以在Master-Slave同步期間客戶端仍然可以提交查詢或修改請(qǐng)求的
-Slave Server同樣是以非阻塞的方式完成數(shù)據(jù)同步的,在同步期間如果有客戶端提交查詢請(qǐng)求Redis則返回同步之前的數(shù)據(jù)

缺點(diǎn)
-Redis不具備自動(dòng)容錯(cuò)和恢復(fù)功能,主服務(wù)器從服務(wù)器的宕機(jī)都會(huì)導(dǎo)致前端部分讀寫(xiě)請(qǐng)求失敗,需要等待機(jī)器重啟或者更換機(jī)器才能恢復(fù)
-主機(jī)宕機(jī),宕機(jī)前有部分?jǐn)?shù)據(jù)未能及時(shí)同步到主機(jī),重啟后會(huì)引入數(shù)據(jù)不一致的問(wèn)題
-Redis比較難支持在線擴(kuò)容

2.哨兵模式

當(dāng)主服務(wù)器中斷服務(wù)后,可以將一個(gè)從服務(wù)器升級(jí)為主服務(wù)器繼續(xù)提供服務(wù),但是這個(gè)過(guò)程需要人工手動(dòng)來(lái)操作。為此Redis2.8中提供了哨兵工具來(lái)實(shí)現(xiàn)自動(dòng)化的系統(tǒng)監(jiān)測(cè)和故障恢復(fù)功能
哨兵的作用就是監(jiān)控Redis系統(tǒng)運(yùn)行狀況。它的功能包括以下兩個(gè)
(1)監(jiān)控主服務(wù)器和從服務(wù)器是否正常運(yùn)行
(2)主服務(wù)器出現(xiàn)故障時(shí)自動(dòng)將從服務(wù)器轉(zhuǎn)換為主服務(wù)器

哨兵的工作方式
-每個(gè)Sentinel進(jìn)程以每秒鐘一次的頻率向整個(gè)集群中的Master主服務(wù)器,Slave從服務(wù)器以及其他的Sentinel哨兵進(jìn)程發(fā)送一個(gè)PING命令
-如果一個(gè)實(shí)例instance距離最后一次有效回復(fù)PING命令的時(shí)間超過(guò)down-after-milliseconds選項(xiàng)所指定的值,則這個(gè)實(shí)例會(huì)被Sentinel哨兵進(jìn)程標(biāo)記為主觀下線SDOWN
-如果一個(gè)Master主服務(wù)器被標(biāo)記為主觀下線,則正在監(jiān)視這個(gè)Master主服務(wù)器的所有Sentinel哨兵進(jìn)程要以每秒一次的頻率確認(rèn)Master主服務(wù)器的確進(jìn)入了主觀下線狀態(tài)
-當(dāng)有足夠數(shù)量的Sentinel哨兵進(jìn)程(大于等于配置文件制定的值)在指定的時(shí)間范圍內(nèi)確認(rèn)Master主服務(wù)器進(jìn)入了主觀下線狀態(tài),則Master主服務(wù)器會(huì)被標(biāo)記為客觀下線
-在一般情況下,每個(gè)Sentinel哨兵進(jìn)程會(huì)以每10秒一次的頻率向集群中的所有Master主服務(wù)器,Slave從服務(wù)器發(fā)送INFO命令
-當(dāng)Master主服務(wù)器被Sentinel哨兵進(jìn)程標(biāo)記為客觀下線時(shí),Sentinel哨兵進(jìn)程向下線的Master主服務(wù)器的所有Slave從服務(wù)器INFO命令的頻率從10秒一次改為每秒一次
-若沒(méi)有足夠數(shù)量的Sentinel哨兵進(jìn)程同意Master主服務(wù)器下線,Master主服務(wù)器的客觀下線狀態(tài)就會(huì)被移除,若Master主服務(wù)器重新向Sentinel哨兵進(jìn)程發(fā)送PING命令返回有效回復(fù),Master主服務(wù)器的主觀下線狀態(tài)就會(huì)被移除

哨兵模式的優(yōu)缺點(diǎn)
-優(yōu)點(diǎn)
哨兵模式是基于主從模式的,所有主從的優(yōu)點(diǎn)哨兵模式都有
主從可以自動(dòng)切換,系統(tǒng)更健壯,可用性更高

-缺點(diǎn)
Redis較難支持在線擴(kuò)容

3.Redis-Cluster集群

redis的哨兵模式基本已經(jīng)可以實(shí)現(xiàn)高可用,讀寫(xiě)分離,但是在這種模式下每臺(tái)redis服務(wù)器都存儲(chǔ)相同的數(shù)據(jù),很浪費(fèi)內(nèi)存,所有在redis3.0上加入了cluster模式,實(shí)現(xiàn)了redis的分布式存儲(chǔ),也就是說(shuō)每臺(tái)redis節(jié)點(diǎn)上存儲(chǔ)不同的內(nèi)容
Redis-Cluster采用無(wú)中心結(jié)構(gòu),它的特點(diǎn)如下:
-所有的redis節(jié)點(diǎn)彼此互聯(lián)(PING-PONG機(jī)制),內(nèi)部使用二進(jìn)制協(xié)議優(yōu)化傳輸速度和帶寬
-節(jié)點(diǎn)的fail是通過(guò)集群中超過(guò)半數(shù)的節(jié)點(diǎn)檢測(cè)失效時(shí)才生效
-客戶端與redis節(jié)點(diǎn)直連,不需要中間代理層,客戶端不需要連接集群所有節(jié)點(diǎn),連接集群中任何一個(gè)可用節(jié)點(diǎn)即可

集群工作方式
在redis的每一個(gè)節(jié)點(diǎn)上,都有這么兩個(gè)東西,一個(gè)是插槽slot,取值范圍是:0-16383。還有一個(gè)就是cluster可以理解為是一個(gè)集群管理插件。當(dāng)我們的存取key到達(dá)的時(shí)候,redis會(huì)根據(jù)crc16的算法得出一個(gè)結(jié)果,然后把結(jié)果對(duì)16384求余數(shù),這樣每個(gè)key都會(huì)對(duì)應(yīng)一個(gè)編號(hào)在0-16383之間的哈希槽,通過(guò)這個(gè)值去找到對(duì)應(yīng)的槽所對(duì)應(yīng)的節(jié)點(diǎn),然后直接自動(dòng)跳轉(zhuǎn)到這個(gè)對(duì)應(yīng)的節(jié)點(diǎn)上進(jìn)行存取操作。
為了保證高可用,redis-cluster集群引入了主從模式,一個(gè)主節(jié)點(diǎn)對(duì)應(yīng)一個(gè)或者多個(gè)從節(jié)點(diǎn),當(dāng)主節(jié)點(diǎn)宕機(jī)的時(shí)候,就會(huì)啟用從節(jié)點(diǎn)。當(dāng)其他主節(jié)點(diǎn)ping一個(gè)主節(jié)點(diǎn)A時(shí),如果半數(shù)以上的主節(jié)點(diǎn)與A通信超時(shí),那么認(rèn)為主節(jié)點(diǎn)A宕機(jī)了。如果主節(jié)點(diǎn)A和它的從節(jié)點(diǎn)都宕機(jī)了,那么該集群就無(wú)法再提供服務(wù)了。
cluster可以說(shuō)是sentinel和主從模式的結(jié)合體,通過(guò)cluster可以實(shí)現(xiàn)主從和master重選功能,所以如果配置兩個(gè)副本三個(gè)分片的話,就需要六個(gè)Redis實(shí)例。
因?yàn)镽edis的數(shù)據(jù)是根據(jù)一定規(guī)則分配到cluster的不同機(jī)器的,當(dāng)數(shù)據(jù)量過(guò)大時(shí),可以新增機(jī)器進(jìn)行擴(kuò)容
這種模式適合數(shù)據(jù)量巨大的緩存要求,當(dāng)數(shù)據(jù)量不是很大使用sentinel即可

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

相關(guān)閱讀更多精彩內(nèi)容

  • Redis的三種集群方式概述 1、主從復(fù)制 原理 從服務(wù)器連接主服務(wù)器,發(fā)送SYNC(同步)命令; 主服務(wù)器接收到...
    java爪哇閱讀 1,348評(píng)論 0 0
  • redis redis是單線程的,但是一般的作為緩存使用的話,redis足夠了,因?yàn)樗淖x寫(xiě)速度太快了。官方的一個(gè)...
    普度眾生的面癱青年閱讀 5,315評(píng)論 0 4
  • 我是一只灰頭土臉的小貓 那個(gè)堆滿零食的角落是我的家 喜歡在午后陽(yáng)光迷蒙的時(shí)候 腆著肚皮打量這座鋼筋鐵瓦 霧太大 看...
    倒三角公式閱讀 233評(píng)論 0 0
  • 今天是農(nóng)歷七月十五,是中元節(jié),又叫做鬼節(jié)或者盂蘭節(jié),是祭祀的大日子。七月被稱為“鬼月”,在這個(gè)月人們往往都不會(huì)進(jìn)行...
    MilkCynthia閱讀 236評(píng)論 0 1
  • 火越燒越烈,杜子春渾身大汗,依然端坐。師父的話言猶在耳:“不論你看到什么幻象都不可出聲,時(shí)刻警醒,都是幻...
    山?;ㄩ_(kāi)閱讀 515評(píng)論 0 0

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