成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Redis集群的原理是什么

這篇文章主要講解了“redis集群的原理是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Redis集群的原理是什么”吧!

創(chuàng)新新互聯(lián),憑借十多年的網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),本著真心·誠(chéng)心服務(wù)的企業(yè)理念服務(wù)于成都中小企業(yè)設(shè)計(jì)網(wǎng)站有上千案例。做網(wǎng)站建設(shè),選創(chuàng)新互聯(lián)。

Redis作為一款性能優(yōu)異的內(nèi)存數(shù)據(jù)庫(kù),支撐著微博億級(jí)社交平臺(tái),也成為很多互聯(lián)網(wǎng)公司的標(biāo)配。這里將以Redis Cluster集群為核心,基于最新的Redis5版本,從原理再到實(shí)戰(zhàn),玩轉(zhuǎn)Redis集群

常見(jiàn)Redis集群方案

在介紹Redis Cluster集群方案之前,為了方便對(duì)比,先簡(jiǎn)單了解一下業(yè)界常見(jiàn)的Redis集群方案:

1 基于客戶(hù)端分片

Redis集群的原理是什么

Redis Sharding是Redis Cluster出來(lái)之前,業(yè)界普遍使用的多Redis實(shí)例集群方法。其主要思想是基于哈希算法,根據(jù)Redis數(shù)據(jù)的key的哈希值對(duì)數(shù)據(jù)進(jìn)行分片,將數(shù)據(jù)映射到各自節(jié)點(diǎn)上

優(yōu)點(diǎn)在于實(shí)現(xiàn)簡(jiǎn)單,缺點(diǎn)在于當(dāng)Redis集群調(diào)整,每個(gè)客戶(hù)端都需要更新調(diào)整

2 基于代理服務(wù)器分片

Redis集群的原理是什么

客戶(hù)端發(fā)送請(qǐng)求到獨(dú)立部署代理組件,代理組件解析客戶(hù)端的數(shù)據(jù),并將請(qǐng)求轉(zhuǎn)發(fā)至正確的節(jié)點(diǎn),最后將結(jié)果回復(fù)給客戶(hù)端

優(yōu)點(diǎn)在于透明接入,容易集群擴(kuò)展,缺點(diǎn)在于多了一層代理轉(zhuǎn)發(fā),性能有所損耗

3 Redis Sentinel(哨兵)

Redis集群的原理是什么

Redis Sentinel是官方從Redis 2.6版本提供的高可用方案,在Redis主從復(fù)制集群的基礎(chǔ)上,增加Sentinel集群監(jiān)控整個(gè)Redis集群。當(dāng)Redis集群master節(jié)點(diǎn)發(fā)生故障時(shí),Sentinel進(jìn)行故障切換,選舉出新的master,同時(shí)Sentinel本身支持高可用集群部署

優(yōu)點(diǎn)在于支持集群高可用,高性能讀寫(xiě),缺點(diǎn)在于沒(méi)有實(shí)現(xiàn)數(shù)據(jù)分片,每個(gè)節(jié)點(diǎn)需要承載完整數(shù)據(jù)集,負(fù)載能力受當(dāng)個(gè)Redis服務(wù)器限制,僅支持通過(guò)增加機(jī)器內(nèi)存實(shí)現(xiàn)垂直擴(kuò)容,不支持水平擴(kuò)展

Redis Cluster設(shè)計(jì)

1 整體設(shè)計(jì)

Redis Cluster 是 在 3.0 版本正式推出的高可用集群方案,相比Redis Sentinel,Redis Cluster方案不需要額外部署Sentinel集群,而是通過(guò)集群內(nèi)部通信實(shí)現(xiàn)集群監(jiān)控,故障時(shí)主從切換;同時(shí),支持內(nèi)部基于哈希實(shí)現(xiàn)數(shù)據(jù)分片,支持動(dòng)態(tài)水平擴(kuò)容

整體架構(gòu)如下:

Redis集群的原理是什么

集群中有多個(gè)主節(jié)點(diǎn),每個(gè)主節(jié)點(diǎn)有多個(gè)從節(jié)點(diǎn),主從節(jié)點(diǎn)間數(shù)據(jù)一致,最少需要3個(gè)主節(jié)點(diǎn),每個(gè)主節(jié)點(diǎn)最少需要1個(gè)從節(jié)點(diǎn)

  • 高可用:當(dāng)master節(jié)點(diǎn)故障時(shí),自動(dòng)主從切換

  • 高性能:主節(jié)點(diǎn)提供讀寫(xiě)服務(wù),從節(jié)點(diǎn)只讀服務(wù),提高系統(tǒng)吞吐量

  • 可擴(kuò)展性:集群的數(shù)據(jù)分片存儲(chǔ),主節(jié)點(diǎn)間數(shù)據(jù)各不同,各自維護(hù)對(duì)應(yīng)數(shù)據(jù),可以為集群添加節(jié)點(diǎn)進(jìn)行擴(kuò)容,也可以下線部分節(jié)點(diǎn)進(jìn)行水平縮容

2 數(shù)據(jù)分片

將整個(gè)數(shù)據(jù)集按照一定規(guī)則分配到多個(gè)節(jié)點(diǎn)上,稱(chēng)為數(shù)據(jù)分片,Redis Cluster采用的分片方案是哈希分片

Redis集群的原理是什么

基本原理如下: Redis Cluster首先定義了編號(hào)0 ~ 16383的區(qū)間,稱(chēng)為槽,所有的鍵根據(jù)哈希函數(shù)映射到0 ~ 16383整數(shù)槽內(nèi),計(jì)算公式:slot=CRC16(key)&16383。每一個(gè)節(jié)點(diǎn)負(fù)責(zé)維護(hù)一部分槽以及槽所映射的鍵值數(shù)據(jù)

槽是 Redis 集群管理數(shù)據(jù)的基本單位,集群擴(kuò)容收縮就是槽和數(shù)據(jù)在節(jié)點(diǎn)之間的移動(dòng)

槽與節(jié)點(diǎn)映射關(guān)系如下:

  • 每個(gè)集群節(jié)點(diǎn)維護(hù)著一個(gè)16384 bit (2kB)的位數(shù)組,每個(gè)bit對(duì)應(yīng)相同編號(hào)的槽,用 0 / 1標(biāo)識(shí)對(duì)于某個(gè)槽自己是否擁有

  • 集群節(jié)點(diǎn)同時(shí)還維護(hù)著槽到集群節(jié)點(diǎn)的映射,是由長(zhǎng)度為16384,數(shù)組下標(biāo)代表槽編號(hào),值為節(jié)點(diǎn)信息的數(shù)組

Redis集群的原理是什么

3 集群擴(kuò)容

Redis Cluster支持不影響集群對(duì)外服務(wù)的情況下,對(duì)集群進(jìn)行動(dòng)態(tài)擴(kuò)容或縮容,當(dāng)Redis 新節(jié)點(diǎn)加入現(xiàn)有集群后,需要為其遷移槽和數(shù)據(jù),確保遷移后每個(gè)節(jié)點(diǎn)負(fù)責(zé)相似數(shù)量的槽,使數(shù)據(jù)分布均勻在各節(jié)點(diǎn)上

整個(gè)數(shù)據(jù)遷移涉及系列操作,Redis提供了集群管理工具,包括基于Ruby的redis-trib.rb,還Redis5新提供的基于C語(yǔ)言redis-cli,下面的介紹以redis-cli為例

源節(jié)點(diǎn)將指定slot數(shù)據(jù)遷移到目標(biāo)節(jié)點(diǎn),基本流程如下:

Redis集群的原理是什么

  • (1) redis-cli設(shè)置目標(biāo)節(jié)點(diǎn)指定slot狀態(tài)importing,讓目標(biāo)節(jié)點(diǎn)準(zhǔn)備遷入slot數(shù)據(jù)

  • (2) redis-cli設(shè)置源節(jié)點(diǎn)指定slot狀態(tài)migrating,讓讓源節(jié)點(diǎn)準(zhǔn)備遷出slot的數(shù)據(jù)

  • (3) redis-cli批量遷移源節(jié)點(diǎn)指定slot中的數(shù)據(jù)到目標(biāo)節(jié)點(diǎn)

  • (4) 數(shù)據(jù)遷移完后 redis-cli向集群所有主節(jié)點(diǎn)通知槽被分配給目標(biāo)節(jié)點(diǎn),主節(jié)點(diǎn)更新slot與節(jié)點(diǎn)映射關(guān)系信息

通常情況下,如果客戶(hù)端請(qǐng)求的數(shù)據(jù)不在節(jié)點(diǎn)上,節(jié)點(diǎn)會(huì)回復(fù) MOVED 重定向信息,客戶(hù)端根據(jù)該信息再請(qǐng)求正確的節(jié)點(diǎn)。對(duì)于正在遷移的slot數(shù)據(jù),保證客戶(hù)端仍然能正常訪問(wèn)的設(shè)計(jì)如下:

Redis集群的原理是什么

  • (1) 遷移完成后才更新slot與節(jié)點(diǎn)映射關(guān)系信息,如果遷移進(jìn)行中的映射信息保持與遷移前一致

  • (2) 如果客戶(hù)端訪問(wèn)源節(jié)點(diǎn),訪問(wèn)的key尚未遷出,則正常的處理該key

  • (3) 如果客戶(hù)端訪問(wèn)源節(jié)點(diǎn),訪問(wèn)的key尚已遷出,源節(jié)點(diǎn)返回ASK重定向信息

  • (4) 客戶(hù)端根據(jù)ASK 重定向異常提取出目標(biāo)節(jié)點(diǎn)信息,先向目標(biāo)節(jié)點(diǎn)發(fā)送ASKING命令請(qǐng)求操作,再執(zhí)行鍵命令

ASK 和 MOVED 這2個(gè)重定向控制有如下區(qū)別:

  • ASK 重定向說(shuō)明集群正在進(jìn)行 slot 數(shù)據(jù)遷移,客戶(hù)端無(wú)法知道什么時(shí)候遷移完成,因此只能是臨時(shí)性的重定向,客戶(hù)端不會(huì)更新 slot 到 Redis 節(jié)點(diǎn)的映射緩存。

  • MOVED 重定向說(shuō)明鍵對(duì)應(yīng)的slot 已經(jīng)明確指定到新的節(jié)點(diǎn),因此需要更新 slot 到 Redis 節(jié)點(diǎn)的映射緩存

4 CAP取舍

CAP包括:一致性(Consistency)、可用性(Availability)、分區(qū)容錯(cuò)性(Partition tolerance),系統(tǒng)如果不能在時(shí)限內(nèi)達(dá)成數(shù)據(jù)一致性,就意味著發(fā)生了分區(qū)的情況,必須在C和A之間做出選擇

Redis Cluster選擇了AP架構(gòu),為了保證可用性,Redis并不保證強(qiáng)一致性,在特定條件下會(huì)出現(xiàn)數(shù)據(jù)不一致甚至丟失寫(xiě)操作

Redis集群的原理是什么

第一個(gè)原因是:為了在性能和一致性上做出權(quán)衡,主從節(jié)點(diǎn)間數(shù)據(jù)同步是異步復(fù)制的,當(dāng)客戶(hù)端成功寫(xiě)入master節(jié)點(diǎn),master返回成功,master節(jié)點(diǎn)才將寫(xiě)操作異步復(fù)制給slave節(jié)點(diǎn)

另外一個(gè)原因是,當(dāng)集群發(fā)送網(wǎng)絡(luò)分區(qū),集群可能會(huì)分為兩部分:多數(shù)派和少數(shù)派,假如masterA節(jié)點(diǎn)位于少數(shù)派,如果網(wǎng)絡(luò)分區(qū)發(fā)生時(shí)間較短,那么集群將會(huì)繼續(xù)正常運(yùn)作;如果分區(qū)的時(shí)間足夠長(zhǎng),讓多數(shù)派中選舉為新的master替代matsterA,那么分區(qū)期間寫(xiě)入masterA的數(shù)據(jù)就丟失了

在網(wǎng)絡(luò)分區(qū)期間, 客戶(hù)端可以向matsterA發(fā)送寫(xiě)命令的最大時(shí)間是有限制的, 這一時(shí)間限制稱(chēng)為節(jié)點(diǎn)超時(shí)時(shí)間(cluster-node-timeout),是 Redis集群的一個(gè)重要的配置選項(xiàng)

感謝各位的閱讀,以上就是“Redis集群的原理是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Redis集群的原理是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

網(wǎng)站名稱(chēng):Redis集群的原理是什么
標(biāo)題URL:http://jinyejixie.com/article36/gpsdpg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)ChatGPT、定制網(wǎng)站網(wǎng)站導(dǎo)航、手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)