前言
如果Redis的讀寫請(qǐng)求量很大,那么單個(gè)實(shí)例很有可能承擔(dān)不了這么大的請(qǐng)求量,如何提高Redis的性能呢?你也許已經(jīng)想到了,可以部署多個(gè)副本節(jié)點(diǎn),業(yè)務(wù)采用讀寫分離的方式,把讀請(qǐng)求分擔(dān)到多個(gè)副本節(jié)點(diǎn)上,提高訪問性能。要實(shí)現(xiàn)讀寫分離,就必須部署多個(gè)副本,每個(gè)副本需要實(shí)時(shí)同步主節(jié)點(diǎn)的數(shù)據(jù)。
1. 單機(jī)模式
Redis 單副本,采用單個(gè) Redis 節(jié)點(diǎn)部署架構(gòu),沒有備用節(jié)點(diǎn)實(shí)時(shí)同步數(shù)據(jù),不提供數(shù)據(jù)持久化和備份策略,適用于數(shù)據(jù)可靠性要求不高的純緩存業(yè)務(wù)場(chǎng)景。
-
優(yōu)點(diǎn):
- 架構(gòu)簡(jiǎn)單,部署方便。
- 高性價(jià)比:緩存使用時(shí)無需備用節(jié)點(diǎn)(單實(shí)例可用性可以用 supervisor 或 crontab 保證),當(dāng)然為了滿足業(yè)務(wù)的高可用性,也可以犧牲一個(gè)備用節(jié)點(diǎn),但同時(shí)刻只有一個(gè)實(shí)例對(duì)外提供服務(wù)。
- 高性能。
-
缺點(diǎn):文章來源:http://www.zghlxwxcb.cn/news/detail-657526.html
- 不保證數(shù)據(jù)的可靠性。
- 在緩存使用,進(jìn)程重啟后,數(shù)據(jù)丟失,即使有備用的節(jié)點(diǎn)解決高可用性,但是仍然不能解決緩存預(yù)熱問題,因此不適用于數(shù)據(jù)可靠性要求高的業(yè)務(wù)。
- 高性能受限于單核 CPU 的處理能力(Redis 是單線程機(jī)制),CPU 為主要瓶頸,所以適合操作命令簡(jiǎn)單,排序、計(jì)算較少的場(chǎng)景。也可以考慮用 Memcached 替代。
2. 主從架構(gòu)
主(master)和 從(slave)部署在不同的服務(wù)器上,當(dāng)主節(jié)點(diǎn)服務(wù)器寫入數(shù)據(jù)時(shí)會(huì)同步到從節(jié)點(diǎn)的服務(wù)器上,一般主節(jié)點(diǎn)負(fù)責(zé)寫入數(shù)據(jù),從節(jié)點(diǎn)負(fù)責(zé)讀取數(shù)據(jù)。
從節(jié)點(diǎn)設(shè)置只讀屬性,而主節(jié)點(diǎn)沒有只寫屬性,因此,主節(jié)點(diǎn)可讀可以寫
-
優(yōu)點(diǎn):
- 讀寫分離,提高效率
主節(jié)點(diǎn)負(fù)責(zé)寫操作,從節(jié)點(diǎn)負(fù)責(zé)讀操作;如果寫少讀多場(chǎng)景,配置多個(gè)從節(jié)點(diǎn)的話,效率非常高 - 數(shù)據(jù)熱備份,提供多個(gè)副本。
從節(jié)點(diǎn)宕機(jī),影響較小
- 讀寫分離,提高效率
-
缺點(diǎn):
-
主節(jié)點(diǎn)故障,集群則無法進(jìn)行工作,可用性比較低,從節(jié)點(diǎn)升主節(jié)點(diǎn)需要人工手動(dòng)干預(yù)。
因?yàn)橹挥兄鞴?jié)點(diǎn)能進(jìn)行寫操作,一旦主節(jié)點(diǎn)宕機(jī),整個(gè)服務(wù)就無法使用。當(dāng)然此時(shí)從節(jié)點(diǎn)仍可以進(jìn)行讀操作,但是對(duì)于整個(gè)服務(wù)流程來說,是無法使用的。
-
Master的寫的壓力難以降低。
如果寫操作比較多,那么只有一個(gè)主節(jié)點(diǎn)的話,無法分擔(dān)壓力。
-
主節(jié)點(diǎn)存儲(chǔ)能力受到單擊限制。
主節(jié)點(diǎn)只能有一個(gè),因此單節(jié)點(diǎn)內(nèi)存大小不會(huì)太大,因此存儲(chǔ)數(shù)據(jù)量受限。
-
主從數(shù)據(jù)同步,可能產(chǎn)生部分的性能影響甚至同步風(fēng)暴。
-
風(fēng)暴問題,對(duì)于任何集群分布式來說都存在,要合理分布節(jié)點(diǎn)。
3. 哨兵
為了解決這兩個(gè)問題,在2.8版本之后redis正式提供了sentinel架構(gòu)。
在redis3.0以前的版本要實(shí)現(xiàn)集群一般是借助哨兵sentinel工具來監(jiān)控master節(jié)點(diǎn)的狀態(tài)。
如果master節(jié)點(diǎn)異常,則會(huì)做主從切換,將某一臺(tái)slave作為master,哨兵的配置略微復(fù)雜,并且性能和高可用性等各方面表現(xiàn)一般。
-
優(yōu)點(diǎn):
- 對(duì)節(jié)點(diǎn)進(jìn)行監(jiān)控,來完成自動(dòng)的故障發(fā)現(xiàn)與轉(zhuǎn)移
-
缺點(diǎn):
- 特別是在主從切換的瞬間存在訪問瞬斷的情況,等待時(shí)間比較長(zhǎng),至少十來秒不可用。
- 哨兵模式只有一個(gè)主節(jié)點(diǎn)對(duì)外提供服務(wù),沒法支持很高的并發(fā)
- 單個(gè)主節(jié)點(diǎn)內(nèi)存也不宜設(shè)置得過大,否則會(huì)導(dǎo)致持久化文件過大,影響數(shù)據(jù)恢復(fù)或主從同步的效率。
與主從相比,哨兵僅解決了手動(dòng)切換主從節(jié)點(diǎn)問題,至于其他的問題,基本上仍然存在。
哨兵的主要問題還是由于中心架構(gòu),僅存在一個(gè)master節(jié)點(diǎn)引起的,寫的效率太低。
4. 集群模式
Redis Cluster 是 3.0 版后推出的 Redis 分布式集群解決方案,主要解決 Redis 分布式方面的需求,比如,當(dāng)遇到單機(jī)內(nèi)存,并發(fā)和流量等瓶頸的時(shí)候,Redis Cluster 能起到很好的負(fù)載均衡的目的。
Redis Cluster 集群節(jié)點(diǎn)最小配置 6 個(gè)節(jié)點(diǎn)以上(3 主 3 從),其中主節(jié)點(diǎn)提供讀寫操作,從節(jié)點(diǎn)作為備用節(jié)點(diǎn),不提供請(qǐng)求,只作為故障轉(zhuǎn)移使用。Redis Cluster 采用虛擬槽分區(qū),所有的鍵根據(jù)哈希函數(shù)映射到 0~16383 個(gè)整數(shù)槽內(nèi),每個(gè)節(jié)點(diǎn)負(fù)責(zé)維護(hù)一部分槽以及槽所印映射的鍵值數(shù)據(jù)。
注意:集群模式下 從節(jié)點(diǎn)不提供讀寫,與主從模式不一樣。 總結(jié)一下經(jīng)驗(yàn),分布式
場(chǎng)景下:集群模式一般從節(jié)點(diǎn)不參與讀寫,僅作為備用節(jié)點(diǎn)。而主從一般都要負(fù)責(zé)讀或?qū)懀家獏⑴c具體的工作。
-
優(yōu)點(diǎn):
-
無中心架構(gòu)。
即有多個(gè)master節(jié)點(diǎn),不像哨兵模式下僅有一個(gè)。這樣寫的壓力就可以分散了;并且存儲(chǔ)量也可以擴(kuò)展了,因?yàn)槎鄠€(gè)主節(jié)點(diǎn)都可以存儲(chǔ)一部分?jǐn)?shù)據(jù),總量要遠(yuǎn)大于單主節(jié)點(diǎn)架構(gòu)。
-
數(shù)據(jù)按照 slot 存儲(chǔ)分布在多個(gè)節(jié)點(diǎn),節(jié)點(diǎn)間數(shù)據(jù)共享,可動(dòng)態(tài)調(diào)整數(shù)據(jù)分布。
-
可擴(kuò)展性:可線性擴(kuò)展到 1000 多個(gè)節(jié)點(diǎn),節(jié)點(diǎn)可動(dòng)態(tài)添加或刪除。
-
高可用性:部分節(jié)點(diǎn)不可用時(shí),集群仍可用。通過增加 Slave 做 standby 數(shù)據(jù)副本,能夠 實(shí)現(xiàn)故障自動(dòng) failover,節(jié)點(diǎn)之間通過 gossip 協(xié)議交換狀態(tài)信息,用投票機(jī)制完成 Slave 到 Master 的角色提升。
-
當(dāng)然,如果某個(gè)槽歸屬的小群內(nèi)都不可用時(shí),整個(gè)服務(wù)仍然是不可用的!通過cluster-require-full-coverageyes
控制該特性, 默認(rèn)yes 即需要集群完整,方可對(duì)外提供服務(wù),設(shè)置為no ,其他的小集群仍然可以對(duì)外提供服務(wù)。
-
缺點(diǎn):
- 如果主節(jié)點(diǎn)A和它的從節(jié)點(diǎn)A1都宕機(jī)了,那么該集群就無法再提供服務(wù)了。
總結(jié)
本文主要介紹了 Redis 四種集群模式,以及優(yōu)缺點(diǎn),總結(jié)一下文章來源地址http://www.zghlxwxcb.cn/news/detail-657526.html
- 主從模式 可以實(shí)現(xiàn)讀寫分離,數(shù)據(jù)備份。但是并不是「高可用」的
- 哨兵模式 可以看做是主從模式的「高可用」版本,其引入了 Sentinel 對(duì)整個(gè) Redis 服務(wù)集群進(jìn)行監(jiān)控。但是由于只有一個(gè)主節(jié)點(diǎn),因此仍然有寫入瓶頸。
- Cluster 模式 不僅提供了高可用的手段,同時(shí)數(shù)據(jù)是分片保存在各個(gè)節(jié)點(diǎn)中的,可以支持高并發(fā)的寫入與讀取。當(dāng)然實(shí)現(xiàn)也是其中最復(fù)雜的。
到了這里,關(guān)于【Redis】Redis三種集群模式-主從、哨兵、集群各自架構(gòu)的優(yōu)點(diǎn)和缺點(diǎn)對(duì)比的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!