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