營(yíng)銷型網(wǎng)站設(shè)計(jì)模板同仁seo排名優(yōu)化培訓(xùn)
目錄
一、集群的概念
1.為什么要搭建集群?
2.Redis搭建集群是否需要考慮狀態(tài)同步的問(wèn)題?
二、Redis集群的模式
1.redis集群--主從模式
1.1什么是Redis的主從模式?
1.2.主從模式它們之間的數(shù)據(jù)是怎么實(shí)現(xiàn)一個(gè)同步的?
1.3.主從服務(wù)器是否解決了單點(diǎn)故障的問(wèn)題?
1.4.redis集群三臺(tái),是否實(shí)現(xiàn)了擴(kuò)容?
所以怎么解決單點(diǎn)故障問(wèn)題呢,也就是說(shuō)怎么解決主服務(wù)器宕機(jī)導(dǎo)致寫操作執(zhí)行不了的問(wèn)題呢?
2.Redis集群--哨兵模式
2.1 Redis-哨兵模式的原理
2.2 哨兵是怎么檢測(cè)到主服務(wù)器宕機(jī)了呢?
2.3主服務(wù)宕機(jī)后哨兵怎么從多個(gè)從服務(wù)器中選出一個(gè)作為主服務(wù)器?
2.5哨兵是什么
3.Reids集群--Cluster模式
3.1什么是cluster模式?
3.2那么key應(yīng)該寫到哪個(gè)redis服務(wù)器中,又怎么確保key的讀取也是在這個(gè)redis服務(wù)器中呢
3.3每個(gè)服務(wù)器都是中心服務(wù)器,那么一旦有一個(gè)服務(wù)器宕機(jī)了,那么這個(gè)服務(wù)器里面的數(shù)據(jù)不是就訪問(wèn)不到了?
3.4總結(jié)
一、集群的概念
1.為什么要搭建集群?
(1)單臺(tái)服務(wù)器的并發(fā)量是有一個(gè)上限的,當(dāng)大量的請(qǐng)求同時(shí)發(fā)送到服務(wù)器,超過(guò)了服務(wù)器的上限,這個(gè)服務(wù)器就會(huì)宕機(jī),所以通過(guò)搭建集群提高并發(fā)量
(2)解決單點(diǎn)故障。當(dāng)一臺(tái)服務(wù)器掛了,那么所有的請(qǐng)求都訪問(wèn)不了,這樣可用性就很低,所以通過(guò)搭建集群使得服務(wù)器掛了還有別的服務(wù)器可以接收請(qǐng)求
2.Redis搭建集群是否需要考慮狀態(tài)同步的問(wèn)題?
需要。因?yàn)镽edis是保存了數(shù)據(jù)的,所以搭建Redis集群的時(shí)候就要考慮狀態(tài)同步、數(shù)據(jù)同步的問(wèn)題。不然一個(gè)redis里面進(jìn)行了寫操作,另一個(gè)Redis進(jìn)行讀操作,那么就會(huì)導(dǎo)致數(shù)據(jù)不一致
二、Redis集群的模式
1.redis集群--主從模式
1.1什么是Redis的主從模式?
也就是Redis搭建集群后,通過(guò)劃分兩個(gè)角色,一個(gè)主服務(wù)器一個(gè)從服務(wù)器
主服務(wù)器負(fù)責(zé)寫操作
從服務(wù)器負(fù)責(zé)讀操作
所以實(shí)現(xiàn)了讀寫分離
但是即使redis自身有持久化的機(jī)制,但是一旦磁盤發(fā)生損壞,數(shù)據(jù)又會(huì)丟失
所以需要多個(gè)從服務(wù)器進(jìn)行讀操作
1.2.主從模式它們之間的數(shù)據(jù)是怎么實(shí)現(xiàn)一個(gè)同步的?
(1)全量同步:在節(jié)點(diǎn)初始化的時(shí)候進(jìn)行一個(gè)數(shù)據(jù)的全部同步
流程:1.因?yàn)樵趶姆?wù)器配置文件配置了主服務(wù)器,所以從服務(wù)器啟動(dòng)的時(shí)候做完認(rèn)證就開(kāi)始同步
2.給從服務(wù)器發(fā)送一個(gè)同步的命令到主服務(wù)器
3.主服務(wù)器收到命令,先做持久化,然后開(kāi)始數(shù)據(jù)同步(主服務(wù)器做持久化的時(shí)候,如果又有命令過(guò)來(lái),那么這個(gè)命令會(huì)放到暫緩區(qū))
4.主服務(wù)器把持久化文件發(fā)送給從服務(wù)器
5.從服務(wù)器接收到持久化文件,先丟棄自己的數(shù)據(jù),然后加載這個(gè)持久化文件在自己的內(nèi)存中
6.主服務(wù)器繼續(xù)發(fā)送暫緩區(qū)的命令給從服務(wù)器
7.從服務(wù)器接收主服務(wù)器的命令,加載到內(nèi)存中
(2)增量同步:在節(jié)點(diǎn)初始化完成之后進(jìn)行一個(gè)數(shù)據(jù)變動(dòng)的同步
1.主服務(wù)器接收到了新的寫命令后,它先在自己的內(nèi)存中寫入
2.然后廣播給所有的從服務(wù)器
3.從服務(wù)器接收到廣播過(guò)來(lái)的命令后,寫入自己的內(nèi)存中
所以這個(gè)主從服務(wù)器之間的數(shù)據(jù)同步就類似于Git.
第一次是直接克隆下來(lái)所有數(shù)據(jù)(全量同步)
后面是拉取更新的數(shù)據(jù)? ? ? ? (增量同步)
1.3.主從服務(wù)器是否解決了單點(diǎn)故障的問(wèn)題?
沒(méi)有。
因?yàn)橹鞣?wù)器只有一臺(tái),也就是寫操作只有一臺(tái),所以一旦主服務(wù)器宕機(jī),那么寫操作又執(zhí)行不了
1.4.redis集群三臺(tái),是否實(shí)現(xiàn)了擴(kuò)容?
沒(méi)有。雖然搭建了三臺(tái)redis,但是三臺(tái)保存的是同樣的數(shù)據(jù),只是做一個(gè)數(shù)據(jù)的備份,防止硬盤損壞,容量并沒(méi)有增加
所以怎么解決單點(diǎn)故障問(wèn)題呢,也就是說(shuō)怎么解決主服務(wù)器宕機(jī)導(dǎo)致寫操作執(zhí)行不了的問(wèn)題呢?
通過(guò)Redis集群--哨兵模式
2.Redis集群--哨兵模式
2.1 Redis-哨兵模式的原理
還是一樣數(shù)量的主從服務(wù)器,只不過(guò)多了哨兵用來(lái)檢測(cè)主服務(wù)器的狀態(tài),當(dāng)哨兵檢測(cè)到主服務(wù)器宕機(jī)后,它會(huì)在從服務(wù)器中選出一個(gè)作為主服務(wù)器進(jìn)行寫操作,這樣就解決了單點(diǎn)故障問(wèn)題。
2.2 哨兵是怎么檢測(cè)到主服務(wù)器宕機(jī)了呢?
通過(guò)心跳機(jī)制,哨兵會(huì)給主服務(wù)器發(fā)送一個(gè)ping請(qǐng)求過(guò)去,如果主服務(wù)器是正常狀態(tài),那么就會(huì)回復(fù)哨兵一個(gè)pang響應(yīng),如果在一定的時(shí)間內(nèi)從服務(wù)器沒(méi)有回復(fù)哨兵,那么哨兵就認(rèn)為主服務(wù)器宕機(jī)了
2.3主服務(wù)宕機(jī)后哨兵怎么從多個(gè)從服務(wù)器中選出一個(gè)作為主服務(wù)器?
1.看從服務(wù)器的偏移量,偏移量越大代表數(shù)據(jù)越新,越接近主服務(wù)器
2.偏移量一樣,看優(yōu)先級(jí)(開(kāi)發(fā)人員可配置)
3.優(yōu)先級(jí)一樣,看redis運(yùn)行時(shí)id
2.4多個(gè)哨兵的情況下,怎么在從服務(wù)器中選舉出主服務(wù)器
1.首先在多個(gè)哨兵中選出哨兵Leader(通過(guò)哨兵的投票,哨兵的數(shù)量一般是奇數(shù),方便少數(shù)服從多數(shù))
2.這個(gè)Leader對(duì)從服務(wù)器進(jìn)行選舉
2.5哨兵是什么
哨兵其實(shí)也是redis服務(wù)器,只不過(guò)不能做讀寫操作
2.6當(dāng)從服務(wù)器被選舉成為主服務(wù)器后,之前宕機(jī)的主服務(wù)器恢復(fù)了,會(huì)怎樣?
當(dāng)從服務(wù)器被選舉成為主服務(wù)器后,如果之前宕機(jī)的主服務(wù)器恢復(fù)后,那么之前的服務(wù)器會(huì)變?yōu)閺姆?wù)器
3.Reids集群--Cluster模式
3.1什么是cluster模式?
cluster模式是無(wú)中心點(diǎn)的,也就是說(shuō)redis集群中的每個(gè)redis服務(wù)器都具備讀寫的功能
這樣就可以通過(guò)集群提高并發(fā)量
3.2那么key應(yīng)該寫到哪個(gè)redis服務(wù)器中,又怎么確保key的讀取也是在這個(gè)redis服務(wù)器中呢
redis-cluster默認(rèn)有一個(gè)16384的Hash槽,這個(gè)hash槽是用來(lái)存儲(chǔ)我們r(jià)edis的數(shù)據(jù)的。
cluster模式集群創(chuàng)建的時(shí)候會(huì)平均的把16384個(gè)hash槽分配給各個(gè)節(jié)點(diǎn)(也就是redis服務(wù)器),當(dāng)我們?cè)谶M(jìn)行數(shù)據(jù)的存儲(chǔ)的時(shí)候,根據(jù)CRC16(key)&16384計(jì)算出這個(gè)key應(yīng)該存儲(chǔ)在哪個(gè)hash槽中,從而落在hash槽對(duì)應(yīng)的節(jié)點(diǎn)上面
這樣就實(shí)現(xiàn)了讀寫數(shù)據(jù)在同一個(gè)redis服務(wù)器
3.3每個(gè)服務(wù)器都是中心服務(wù)器,那么一旦有一個(gè)服務(wù)器宕機(jī)了,那么這個(gè)服務(wù)器里面的數(shù)據(jù)不是就訪問(wèn)不到了?
所以可以給每個(gè)中心服務(wù)器再掛兩個(gè)從服務(wù)器,并且加哨兵,一旦中心服務(wù)器宕機(jī),從服務(wù)器頂上
3.4總結(jié)
所以cluster模式集合了主從模式以及哨兵模式就解決了并發(fā)量、單點(diǎn)故障、數(shù)據(jù)備份的問(wèn)題
因?yàn)槲覀價(jià)edis搭建集群后需要解決
數(shù)據(jù)讀寫一致(同一個(gè)key讀寫再同一個(gè)redis服務(wù)器中)的問(wèn)題(cluster根據(jù)算法解決了)
還有單點(diǎn)故障問(wèn)題(哨兵解決了)
單點(diǎn)故障后從服務(wù)器頂上去,需要具備主服務(wù)器的數(shù)據(jù)(主從模式解決了)