欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Redis?集群模式(Cluster)原理詳解

 更新時(shí)間:2023年07月28日 08:52:58   作者:david6969xin  
redis?cluster集群是一個(gè)由多個(gè)主從節(jié)點(diǎn)集群組成的分布式服務(wù)集群,它具有復(fù)制、高可用和分片特性,cluster集群不需要sentinel?哨兵也能完成節(jié)點(diǎn)移除和故障轉(zhuǎn)移的功能,本文就詳細(xì)的給大家介紹一下Redis?集群模式原理,感興趣的朋友跟著小編一起來看看吧

1、簡(jiǎn)述

Redis Cluster 集群中每個(gè)節(jié)點(diǎn)負(fù)責(zé)整個(gè)集群的一部分?jǐn)?shù)據(jù),每個(gè)節(jié)點(diǎn)上的數(shù)據(jù)多少可能不一樣,節(jié)點(diǎn)之間通過一種特殊的二進(jìn)制協(xié)議交互集群信息。

Redis Cluster將所有數(shù)據(jù)劃分為16384個(gè)槽位,每個(gè)節(jié)點(diǎn)負(fù)責(zé)其中一部分槽位,槽位信息存儲(chǔ)于每個(gè)節(jié)點(diǎn)中,當(dāng)redis客戶端來連接集群時(shí),也會(huì)得到一份集群的槽位配置信息,這樣當(dāng)客戶端要查找某個(gè)key時(shí),可以直接定位到目標(biāo)節(jié)點(diǎn)。

客戶端為了可以直接找到具體key所在的節(jié)點(diǎn),需要緩存槽位相關(guān)信息,這樣就可快速定位到相對(duì)應(yīng)的節(jié)點(diǎn),同時(shí)可能存在客戶端與服務(wù)器存儲(chǔ)槽位信息不一致的情況,故需要糾正機(jī)制來實(shí)現(xiàn)槽位信息的校驗(yàn)調(diào)整。

2、槽位定位算法

Redis Cluster默認(rèn)會(huì)對(duì)key值使用crc16算法進(jìn)行hash得到一個(gè)整數(shù)值,然后用該整數(shù)值對(duì)16384進(jìn)行取模來得到具體槽位。Redis Cluster還允許用戶強(qiáng)制把某個(gè)key掛在特定槽位上,通過key字符串里面嵌入tag標(biāo)記以此來強(qiáng)制key所掛的槽位等于tag所在的槽位。

3、跳轉(zhuǎn)機(jī)制

當(dāng)客戶端向一個(gè)錯(cuò)誤節(jié)點(diǎn)發(fā)送指令后,該節(jié)點(diǎn)會(huì)發(fā)現(xiàn)指令的key所在槽位并不歸自己管,此時(shí)它會(huì)向客戶端發(fā)送一個(gè)特殊的跳轉(zhuǎn)指令攜帶目標(biāo)操作的節(jié)點(diǎn)地址,告訴客戶端去連接該節(jié)點(diǎn)以獲取數(shù)據(jù)??蛻舳嗽谑盏組OVED指令后,要立即糾正本地槽位映射表,后續(xù)所有key將使用新的槽位映射表

4、key 遷移(redis-trib為例)

Redis遷移的單位是槽,即一個(gè)槽一個(gè)槽的遷移,當(dāng)一個(gè)槽正在遷移時(shí),這個(gè)槽就處于中間過渡狀態(tài)。如圖,這個(gè)槽在源節(jié)點(diǎn)的狀態(tài)為migrating,在目標(biāo)節(jié)點(diǎn)的狀態(tài)為importing,表示數(shù)據(jù)正在從源節(jié)點(diǎn)流向目標(biāo)節(jié)點(diǎn)。

redis-trib會(huì)在源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn)設(shè)置好中間狀態(tài),然后一次性獲取元節(jié)點(diǎn)槽位的多有key列表(keysinslot指令,也可部分獲取),然后挨個(gè)key進(jìn)行遷移。每個(gè)key的遷移過程以源節(jié)點(diǎn)作為目標(biāo)節(jié)點(diǎn)的“客戶端”,源節(jié)點(diǎn)對(duì)當(dāng)前key執(zhí)行dump指令得到序列化內(nèi)容,然后通過“客戶端”向目標(biāo)節(jié)點(diǎn)發(fā)送restore指令攜帶序列化的內(nèi)容作為參數(shù),目標(biāo)節(jié)點(diǎn)在進(jìn)行反序列化將內(nèi)容恢復(fù)到目標(biāo)節(jié)點(diǎn)內(nèi)存中,然后返回“客戶端”ok,源節(jié)點(diǎn)“客戶端”收到后再把當(dāng)前節(jié)點(diǎn)的key刪掉就完成了單個(gè)key遷移的全過程。

遷移過程是同步的,在目標(biāo)節(jié)點(diǎn)執(zhí)行restore指令到源節(jié)點(diǎn)刪除key之間,源節(jié)點(diǎn)的主線程會(huì)處于阻塞狀態(tài),直到key被成功刪除。

遷移過程中,如果每個(gè)key的內(nèi)容都很小,那么migrate過程會(huì)很快,幾乎不會(huì)影響客戶端的正常訪問,如果key的內(nèi)容很大,因?yàn)閙igrate過程是阻塞的,所以會(huì)導(dǎo)致源節(jié)點(diǎn)和目標(biāo)節(jié)點(diǎn) 卡頓,影響集群穩(wěn)定性,所以要避免大key。

5、容錯(cuò)

當(dāng)主節(jié)點(diǎn)發(fā)生故障,集群會(huì)自動(dòng)將從節(jié)點(diǎn)提升為主節(jié)點(diǎn),如果主節(jié)點(diǎn)沒有從節(jié)點(diǎn),則發(fā)生故障時(shí),集群不可用。同時(shí)Redis也提供了一個(gè)參數(shù) cluster-require-full-coverage 可以允許部分節(jié)點(diǎn)發(fā)生故障,其余節(jié)點(diǎn)可正常提供服務(wù)。

6、網(wǎng)絡(luò)抖動(dòng)

由于網(wǎng)絡(luò)抖動(dòng)問題導(dǎo)致主從頻繁切換,Redis Cluster 提供 cluster-node-timeout 參數(shù),當(dāng)某個(gè)節(jié)點(diǎn)持續(xù)時(shí)間timeout時(shí)間失聯(lián)時(shí),才可以認(rèn)定該節(jié)點(diǎn)出現(xiàn)故障,需要進(jìn)行主從切換。同時(shí)參數(shù) cluster-slave-validity-factory 作為倍乘系數(shù)放大這個(gè)超時(shí)時(shí)間來寬容容錯(cuò)的緊急程度,系數(shù)為零,主從切換不會(huì)抗拒網(wǎng)絡(luò)抖動(dòng),系數(shù)大于1則就成了主從切換的松弛系數(shù)。

7、可能下線(PFail)與確定下線(Fail)

因?yàn)镽edis Cluster是去中心化的,一個(gè)節(jié)點(diǎn)認(rèn)為某個(gè)節(jié)點(diǎn)失聯(lián)了并不代表所有節(jié)點(diǎn)都認(rèn)為它失聯(lián)了,所以集群會(huì)通過以此協(xié)商過程,只有當(dāng)大多數(shù)節(jié)點(diǎn)認(rèn)為某個(gè)節(jié)點(diǎn)失聯(lián)了,那么該節(jié)點(diǎn)才需要進(jìn)行主從切換來容錯(cuò)。

Redis 集群節(jié)點(diǎn)采用Gossip協(xié)議來廣播自己的狀態(tài)以及來改變對(duì)整個(gè)集群的認(rèn)知。當(dāng)一個(gè)節(jié)點(diǎn)發(fā)現(xiàn)某個(gè)節(jié)點(diǎn)失聯(lián)后(Pfail),它會(huì)將該失聯(lián)信息廣播到整個(gè)集群,其他節(jié)點(diǎn)就會(huì)收到節(jié)點(diǎn)失聯(lián)信息,如果收到某個(gè)節(jié)點(diǎn)失聯(lián)的節(jié)點(diǎn)數(shù)量(PFail Count)已經(jīng)達(dá)到集群的大多數(shù),則可以標(biāo)記該失聯(lián)節(jié)點(diǎn)為確定下線狀態(tài)(Fail),然后廣播到其它節(jié)點(diǎn)該節(jié)點(diǎn)確定下線的事實(shí),并立即對(duì)該失聯(lián)節(jié)點(diǎn)進(jìn)行主從切換。

8、槽位遷移感知

客戶端保存了槽位與節(jié)點(diǎn)的映射關(guān)系表,它需要及時(shí)得到更新,才可以正常地將某條指令發(fā)送到正確的節(jié)點(diǎn)中。Cluster中存在兩條特殊的error指令:

  • MOVED指令:用來糾正槽位,客戶端會(huì)刷新自己的槽位關(guān)系表。
  • ASKING指令:用來臨時(shí)糾正槽位,客戶端不會(huì)刷新自己的槽位關(guān)系表。

9、集群變更感知

當(dāng)服務(wù)器節(jié)點(diǎn)變更時(shí),客戶端如何得到通知并實(shí)時(shí)刷新自己的節(jié)點(diǎn)關(guān)系表?分為兩種情況:

  • 目標(biāo)節(jié)點(diǎn)掛掉了,客戶端會(huì)拋出一個(gè) ConnectionError,緊接著會(huì)隨機(jī)挑選一個(gè)節(jié)點(diǎn)來重試,這時(shí)被重試的節(jié)點(diǎn)會(huì)通過MOVED指令告知目標(biāo)槽位被分配到新的節(jié)點(diǎn)地址。
  • 運(yùn)維手動(dòng)修改集群信息,將主節(jié)點(diǎn)切換為其他節(jié)點(diǎn),并將主節(jié)點(diǎn)移除。這時(shí)打在舊節(jié)點(diǎn)上的指令會(huì)收到ClusterDown的錯(cuò)誤,告知當(dāng)前節(jié)點(diǎn)所在集群不可用(當(dāng)前節(jié)點(diǎn)已被孤立,不在屬于之前集群),這時(shí)客戶端就會(huì)關(guān)閉所有連接,清空槽位映射關(guān)系表,然后向上報(bào)錯(cuò),待下一條指令過來時(shí),就會(huì)重新嘗試初始化節(jié)點(diǎn)信息。

到此這篇關(guān)于Redis 集群模式(Cluster)原理詳解的文章就介紹到這了,更多相關(guān)Redis 集群模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis高可用集群redis-cluster詳解

    Redis高可用集群redis-cluster詳解

    redis?cluster?是redis官方提供的分布式解決方案,在3.0版本后推出的,有效地解決了redis分布式的需求,當(dāng)一個(gè)redis節(jié)點(diǎn)掛了可以快速的切換到另一個(gè)節(jié)點(diǎn),對(duì)redis-cluster高可用集群相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-03-03
  • 壓縮Redis里的字符串大對(duì)象操作

    壓縮Redis里的字符串大對(duì)象操作

    這篇文章主要介紹了壓縮Redis里的字符串大對(duì)象操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Redis的共享session應(yīng)用實(shí)現(xiàn)短信登錄

    Redis的共享session應(yīng)用實(shí)現(xiàn)短信登錄

    本文主要介紹了Redis的共享session應(yīng)用實(shí)現(xiàn)短信登錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Redis高可用梳理詳解

    Redis高可用梳理詳解

    高可用的本質(zhì)是有備份,在出現(xiàn)故障的時(shí)候,有backup可以提供服務(wù),本文詳細(xì)介紹了Redis的高可用,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Redis分片集群存儲(chǔ)的搭建到使用

    Redis分片集群存儲(chǔ)的搭建到使用

    這篇文章主要介紹了Redis分片集群存儲(chǔ)的搭建到使用,分片集群顧名思義,將數(shù)據(jù)分開存儲(chǔ)到Redis集群中,這樣能夠存儲(chǔ)更多的數(shù)據(jù),避免浪費(fèi)資源,需要的朋友可以參考下
    2022-06-06
  • Redis 命令的詳解及簡(jiǎn)單實(shí)例

    Redis 命令的詳解及簡(jiǎn)單實(shí)例

    這篇文章主要介紹了Redis 命令的詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,這里提供基礎(chǔ)語(yǔ)法及使用實(shí)例,需要的朋友可以參考下
    2017-08-08
  • redis key過期監(jiān)聽的實(shí)現(xiàn)示例

    redis key過期監(jiān)聽的實(shí)現(xiàn)示例

    在Redis中,我們可以為Key設(shè)置過期時(shí)間,當(dāng)Key的過期時(shí)間到達(dá)后,Redis會(huì)自動(dòng)將該Key標(biāo)記為已失效,本文就來介紹一下redis key過期監(jiān)聽的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2024-03-03
  • redis?設(shè)置生存和過期時(shí)間的原理分析

    redis?設(shè)置生存和過期時(shí)間的原理分析

    這篇文章主要介紹了redis?設(shè)置生存和過期時(shí)間的原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Redis閃退的三種解決辦法(windows版本)

    Redis閃退的三種解決辦法(windows版本)

    目前大部分的項(xiàng)目都需要redis緩存,有時(shí)候我們會(huì)遇見打開redis緩存出現(xiàn)閃退的狀況,本文小編給大家介紹了Redis閃退的三種解決辦法(windows版本),通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Redis?Lua腳本實(shí)現(xiàn)ip限流示例

    Redis?Lua腳本實(shí)現(xiàn)ip限流示例

    這篇文章主要介紹了Redis?Lua腳本實(shí)現(xiàn)ip限流示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論