21集群3眾cluster天下無魚_第1頁
21集群3眾cluster天下無魚_第2頁
21集群3眾cluster天下無魚_第3頁
21集群3眾cluster天下無魚_第4頁
21集群3眾cluster天下無魚_第5頁
已閱讀5頁,還剩5頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Redis相對于CdisdisRedisCluster將所有數(shù)據(jù)劃分為16384的slots,它?Codis的1024個槽劃分的更為精細,每個節(jié)點負責(zé)其中?部分槽位。槽位的信息存儲于每個節(jié)點中,它不像Codis,它不需要另外的分布式存儲當(dāng)RedisCluster的客戶端來連接集群時,它也會得到?份集群的槽位配置信息。這樣當(dāng)客戶端要查找某個key時,可以直接定位到?這點不同于Codis,Codis需要通過ProxyRedisClusterkey所在的節(jié)點,它就需要緩存槽位相關(guān)信息,這樣才可以準(zhǔn)確快速另外,RedisClusterCluster默認會對key值使?crc16算法進?hash得到?個整數(shù)值,然后?這個整數(shù)值對16384進?取模來得到具體槽位。Cluster還允許?戶強制某個key掛在特定槽位上,通過在key字符串??嵌?tag標(biāo)記,這就可以強制key所掛在的槽位等于tagdefdefs=key.index"{"ifse=key.index"}",s+1ife&&e!=s+1key=key[s+1..e-crc16(key)%當(dāng)客戶端向?個錯誤的節(jié)點發(fā)出了指令,該節(jié)點會發(fā)現(xiàn)指令的keyGETGET-MOVED3999MOVED指令的第?個參數(shù)3999是key?標(biāo)節(jié)點地址。MOVED指令前?有?個減號,表示該指令是?個錯MOVED指令后,要?即糾正本地的槽位映射表。后續(xù)所有key將使?新的槽位映射表。RedisCluster提供了?具redis-trib可以讓運維?員?動調(diào)整槽位的分配情況,它使?Ruby語?進?開發(fā),通過組合各種原?的RedisCluster指令來實現(xiàn)。這點Codis做的更加?性化,它不但提供了UI界?可以讓我們?便的遷移,還提供了?動化平衡槽位?具,?需???預(yù)就可以均衡集群負載。不過Redis官?向來的策Redis遷移的單位是槽,Redis?個槽?個槽進?遷移,當(dāng)?個槽正遷移?具rdistribky(kynslt)k進?遷移。每個kyk執(zhí)?dumprstor攜O從源節(jié)點獲取內(nèi)容從源節(jié)點刪除內(nèi)容注意這?的遷移過程是同步的,在?標(biāo)節(jié)點執(zhí)?restore指令到原節(jié)點刪除key之間,原節(jié)點的主線程會處于阻塞狀態(tài),直到key被成功如果遷移過程中突然出現(xiàn)?絡(luò)故障,整個slot的遷移只進?了?半。在遷移過程中,如果每個key的內(nèi)容都很?,migrate指令執(zhí)?會很快,它就并不會影響客戶端的正常訪問。如果key的內(nèi)容很?,因為?先新舊兩個節(jié)點對應(yīng)的槽位都存在部分key數(shù)據(jù)。客戶端先嘗試會向客戶端返回?個-ASKtargetNodeAddr的重定向指令??蛻魰纬芍囟ㄏ蜓h(huán)。asking指令的?標(biāo)就是打開?標(biāo)節(jié)點的選項,情況下?個ttl就能完成,?在遷移中得3個ttl才能搞定。RedisCluster可以為每個主節(jié)點設(shè)置若?個從節(jié)點,單主節(jié)點故障Redis也提供了?個參數(shù)cluster-require-full-coverage可為解決這種問題,RedisCluster提供了?種選項cluster-node-timeout,表示當(dāng)某個節(jié)點持續(xù)timeout的時間失聯(lián)時,才可以認動會導(dǎo)致主從頻繁切換(數(shù)據(jù)的重新復(fù)制)。rsevtyt作為倍乘1可能下線(PFAIL-PossiblyFail與確定下線(Fail)因為RedisCluster是去中?化的,?個節(jié)點認為某個節(jié)點失聯(lián)了并Redis集群節(jié)點采?Gossip協(xié)議來?播??的狀態(tài)以及??對整個集群認知的改變。?如?個節(jié)點發(fā)現(xiàn)某個節(jié)點失聯(lián)了(PFail),它會如果?個節(jié)點收到了某個節(jié)點失聯(lián)的數(shù)量(PFailCount)已經(jīng)達到了集群的?多數(shù),就可以標(biāo)記該節(jié)點為確定下線狀態(tài)(Fail),然后向整Cluster另外?個包,這個包是依賴redis-py包的。pippipinstallredis-py-redis-py-cluster>>>>>>fromredisclusterimport>>>#Requiresatleastonenodeforclusterdiscovery.Multiplenodesisrecommended.>>>startup_nodes=[{"host":"127.0.0.1","port":"7000"}]>>>rc=>>>rc.set("foo","bar")>>>Cluster是去中?化的,它有多個節(jié)點組成,構(gòu)造StrictRedisCluster實例時,我們可以只??個節(jié)點地址,其它地址必須更換地址才可以繼續(xù)訪問Cluster。decode_responses數(shù)組轉(zhuǎn)換成unicodeCluster使?起來?常?便,?起來和普通的redis-py差別不?,Cluster不?持事務(wù),Cluster的mget?法相?Redis要慢很多,被拆分成了多個get指令,Cluster的rename?法不再是原?如果Cluster中某個槽位正在遷移或者已經(jīng)遷移完了,client如何能我們前?提到Cluster有兩個特殊的error指令,?個是asking第?個moved是?來糾正槽位的。如果我們將指令發(fā)送到了錯誤的地址隨同moved指令回復(fù)給客戶端通知客戶端去?標(biāo)節(jié)點去訪問。第?個asking指令和moved不?樣,它是?來臨時糾正槽位的?;?個askingerror攜帶上?標(biāo)節(jié)點的地址。客戶端收到這個askingerror后,就會去?標(biāo)節(jié)點去嘗試。客戶端不會刷新槽位重試2movedasking指令都是重試指令,客戶端會因為這兩個指令多2次呢?這種情況是存在的,?如?條指令被發(fā)送到錯誤的節(jié)點,這個節(jié)點會先給你?個moved錯誤告知你去另外?個節(jié)點重試。所以個槽位進?遷移操作,于是給客戶端回復(fù)了?個asking指令告知客戶端去?標(biāo)節(jié)點去重試指令。所以這?客戶端重試了2次。會有?個循環(huán),然后會設(shè)置?個最?重試次數(shù),Java和Python都點關(guān)系表。那客戶端是如何得到通知的呢?這?要分2種情況:Connecti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論