欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Redis集群有哪些功能-創(chuàng)新互聯(lián)

本篇內(nèi)容介紹了“Redis集群有哪些功能”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

公司主營(yíng)業(yè)務(wù):做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出達(dá)州免費(fèi)做網(wǎng)站回饋大家。

什么是Redis集群

Redis集群是一個(gè)實(shí)現(xiàn)分布式并且允許單點(diǎn)故障的Redis高級(jí)版本。

Redis集群沒有最重要或者說中心節(jié)點(diǎn),這個(gè)版本最主要的一個(gè)目標(biāo)是設(shè)計(jì)一個(gè)線性可伸縮(可隨意增刪節(jié)點(diǎn)?)的功能。

Redis集群為了數(shù)據(jù)的一致性可能犧牲部分允許單點(diǎn)故障的功能,所以當(dāng)網(wǎng)絡(luò)故障和節(jié)點(diǎn)發(fā)生故障時(shí)這個(gè)系統(tǒng)會(huì)盡力去保證數(shù)據(jù)的一致性和有效性。(這里我們認(rèn)為節(jié)點(diǎn)故障是網(wǎng)絡(luò)故障的一種特殊情況)

為了解決單點(diǎn)故障的問題,我們同時(shí)需要masters 和 slaves。 即使主節(jié)點(diǎn)(master)和從節(jié)點(diǎn)(slave)在功能上是一致的,甚至說他們部署在同一臺(tái)服務(wù)器上,從節(jié)點(diǎn)也僅用以替代故障的主節(jié)點(diǎn)。 實(shí)際上應(yīng)該說 如果對(duì)從節(jié)點(diǎn)沒有read-after-write(寫并立即讀取數(shù)據(jù) 以免在數(shù)據(jù)同步過程中無法獲取數(shù)據(jù))的需求,那么從節(jié)點(diǎn)僅接受只讀操作。

已實(shí)現(xiàn)子集

Redis集群會(huì)把所有的單一key存儲(chǔ)在非分布式版本的Redis中。對(duì)于復(fù)合操作比如求并集求交集之類則未實(shí)現(xiàn)。

在將來,有可能會(huì)增加一種為“Computation Node”的新類型節(jié)點(diǎn)。這種節(jié)點(diǎn)主要用來處理在集群中multi-key的只讀操作,但是對(duì)于multi-key的只讀操作不會(huì)以集群傳輸?shù)紺omputation Node節(jié)點(diǎn)再進(jìn)行計(jì)算的方式實(shí)現(xiàn)。

Redis集群版本將不再像獨(dú)立版本一樣支持多數(shù)據(jù)庫(kù),在集群版本中只有database 0,并且SELECT命令是不可用的。

客戶端與服務(wù)端在Redis集群版中的約定

在Redis集群版本中,節(jié)點(diǎn)有責(zé)任/義務(wù)保存數(shù)據(jù)和自身狀態(tài),這其中包括把數(shù)據(jù)(key)映射到正確的節(jié)點(diǎn)。所有節(jié)點(diǎn)都應(yīng)該自動(dòng)探測(cè)集群中的其他節(jié)點(diǎn),并且在發(fā)現(xiàn)故障節(jié)點(diǎn)之后把故障節(jié)點(diǎn)的從節(jié)點(diǎn)更改為主節(jié)點(diǎn)(原文這里有“如果有需要” 可能是指需要設(shè)置或者說存在從節(jié)點(diǎn))。

集群節(jié)點(diǎn)使用TCP bus和二進(jìn)制協(xié)議進(jìn)行互聯(lián)并對(duì)任務(wù)進(jìn)行分派。各節(jié)點(diǎn)使用gossip 協(xié)議發(fā)送ping packets給集群其他節(jié)點(diǎn)以確定其他節(jié)點(diǎn)是否正常工作。cluster bus也可以用來在節(jié)點(diǎn)間執(zhí)行PUB/SUB命令。

當(dāng)發(fā)現(xiàn)集群節(jié)點(diǎn)無應(yīng)答的時(shí)候則會(huì)使用redirections errors -MOVED and -ASK命令并且會(huì)重定向至可用節(jié)點(diǎn)。理論上客戶端可隨意向集群中任意節(jié)點(diǎn)發(fā)送請(qǐng)求并獲得重定向,也就是說客戶端實(shí)際上并不用關(guān)心集群的狀態(tài)。然而,客戶端也可以緩存數(shù)據(jù)對(duì)應(yīng)的節(jié)點(diǎn)這樣可以免去服務(wù)端進(jìn)行重定向的工作,這在一定程度上可以提高效率。

Redis集群有哪些功能

Keys分配模式

一個(gè)集群可以包含最多4096個(gè)節(jié)點(diǎn)(但是我們建議最多設(shè)置幾百個(gè)節(jié)點(diǎn))。

所有的主節(jié)點(diǎn)會(huì)控制4096個(gè)key空間的百分比。當(dāng)集群穩(wěn)定之后,也就是說不會(huì)再更改集群配置(更改配置指的增刪節(jié)點(diǎn)),那么一個(gè)節(jié)點(diǎn)將只為一個(gè)hash slot服務(wù)。(但是服務(wù)節(jié)點(diǎn)(主節(jié)點(diǎn))可以擁有多個(gè)從節(jié)點(diǎn)用來防止單點(diǎn)故障)

用來計(jì)算key屬于哪個(gè)hash slot的算法如下:

HASH_SLOT = CRC16(key) mod 4096

Name: XMODEM (also known as ZMODEM or CRC-16/ACORN)

Width: 16 bit

Poly: 1021 (That is actually x^16 + x^12 + x^5 + 1)

Initialization: 0000

Reflect Input byte: False

Reflect Output CRC: False

Xor constant to output CRC: 0000

Output for "123456789": 31C3

這里我們會(huì)取CRC16后的12個(gè)字節(jié)。在我們的測(cè)試中,對(duì)于4096個(gè)slots, CRC16算法最合適。

集群節(jié)點(diǎn)特性

在集群中每個(gè)節(jié)點(diǎn)都擁有的名字。節(jié)點(diǎn)名為16進(jìn)制的160 bit隨機(jī)數(shù),當(dāng)節(jié)點(diǎn)獲取到名字后將被立即啟用。節(jié)點(diǎn)名將被永久保存到節(jié)點(diǎn)設(shè)置文件中,除非系統(tǒng)管理員手動(dòng)刪除節(jié)點(diǎn)配置文件。

節(jié)點(diǎn)名是集群中每個(gè)節(jié)點(diǎn)的身份證明。在不更改節(jié)點(diǎn)ID的情況下是允許修改節(jié)點(diǎn)IP和地址的。cluster bus會(huì)自動(dòng)通過gossip協(xié)議獲取更改后的節(jié)點(diǎn)設(shè)置。

每個(gè)節(jié)點(diǎn)可獲知其他節(jié)點(diǎn)的信息包括:IP 端口、狀態(tài)、管理的hash slots、cluster bus最后發(fā)送PING的時(shí)間、最后接收到PONG的時(shí)間、從節(jié)點(diǎn)數(shù)量、節(jié)點(diǎn)ID。

無論是主節(jié)點(diǎn)還是從節(jié)點(diǎn)都可以通過CLUSTER NODES命令來獲取以上信息

示例如下:

$ redis-cli cluster nodes

d1861060fe6a534d42d8a19aeb36600e18785e04 :0 myself - 0 1318428930 connected 0-1364

3886e65cc906bfd9b1f7e7bde468726a052d1dae 127.0.0.1:6380 master - 1318428930 1318428931 connected 1365-2729

d289c575dcbc4bdd2931585fd4339089e461a27d 127.0.0.1:6381 master - 1318428931 1318428931 connected 2730-4095

節(jié)點(diǎn)交互

所有節(jié)點(diǎn)總是允許接受來自cluster bus的連接請(qǐng)求,并且即使請(qǐng)求PING的節(jié)點(diǎn)是不可信的也會(huì)進(jìn)行應(yīng)答。然而,所有來自非集群節(jié)點(diǎn)的packets都會(huì)被忽略。

只有以下兩種情況節(jié)點(diǎn)才會(huì)把其他節(jié)點(diǎn)認(rèn)為是集群的一部分:

如果一個(gè)節(jié)點(diǎn)使用 MEET message 介紹自己。MEET message 命令是強(qiáng)制其他節(jié)點(diǎn)把自己當(dāng)成是集群的一部分。只有系統(tǒng)管理員使用 CLUSTER MEET ip port 命令節(jié)點(diǎn)才會(huì)發(fā)送MEET message給其他節(jié)點(diǎn)。

另外一種方式就是通過集群節(jié)點(diǎn)間的推薦機(jī)制。例如 如果A節(jié)點(diǎn)知道B節(jié)點(diǎn)屬于集群,而B知道C節(jié)點(diǎn)屬于集群,那么B將會(huì)發(fā)送gossip信息告知A:C是屬于集群的。當(dāng)A獲得gossip信息之后就會(huì)嘗試去連接C。

這意味著,當(dāng)我們以任意連接方式為集群加入一個(gè)節(jié)點(diǎn),集群中所有節(jié)點(diǎn)都會(huì)自動(dòng)對(duì)新節(jié)點(diǎn)建立信任連接。也就是說,集群具備自動(dòng)識(shí)別所有節(jié)點(diǎn)的功能,但是這僅發(fā)生在當(dāng)系統(tǒng)管理強(qiáng)制為新節(jié)點(diǎn)與集群中任意節(jié)點(diǎn)建立信任連接的前提下。

這個(gè)機(jī)制使得集群系統(tǒng)更加健壯。

當(dāng)一個(gè)節(jié)點(diǎn)故障時(shí),其余節(jié)點(diǎn)會(huì)嘗試連接其他所有已知的節(jié)點(diǎn)已確定其他節(jié)點(diǎn)的健壯性。

被移動(dòng)數(shù)據(jù)的重定向

Redis客戶端被允許向集群中的任意節(jié)點(diǎn)發(fā)送命令,其中包括從節(jié)點(diǎn)。被訪問的節(jié)點(diǎn)將會(huì)分析命令中所需要的數(shù)據(jù)(這里僅指請(qǐng)求單個(gè)key),并自己通過判斷hash slot確定數(shù)據(jù)存儲(chǔ)于哪個(gè)節(jié)點(diǎn)。

如果被請(qǐng)求節(jié)點(diǎn)擁有hash slot數(shù)據(jù)(這里指請(qǐng)求數(shù)據(jù)未被遷移過 或者 hash slot在數(shù)據(jù)遷移后被重新計(jì)算過),則會(huì)直接返回結(jié)果,否則將會(huì)返回一個(gè) MOVED 錯(cuò)誤。

MOVED 錯(cuò)誤如下:

GET x

-MOVED 3999 127.0.0.1:6381

這個(gè)錯(cuò)誤包括請(qǐng)求的數(shù)據(jù)所處的 hash slot(3999) 和 數(shù)據(jù)目前所屬的IP:端口。客戶端需要通過訪問返回的IP:端口獲取數(shù)據(jù)。即使在客戶端請(qǐng)求并等待數(shù)據(jù)返回的過程中,集群配置已被更改(也就是說請(qǐng)求的key在配置文件中所屬的節(jié)點(diǎn)ID已被重定向至新的IP:端口),目標(biāo)節(jié)點(diǎn)依然會(huì)返回一個(gè)MOVED錯(cuò)誤。

所以雖然在集群中的節(jié)點(diǎn)使用節(jié)點(diǎn)ID來確定身份,但是map依然是靠hash slot和Redis節(jié)點(diǎn)的IP:端口來進(jìn)行配對(duì)。

客戶端雖然不被要求但是應(yīng)該嘗試去記住hash slot 3999現(xiàn)在已被轉(zhuǎn)移至127.0.0.1:6381。這樣的話,當(dāng)一個(gè)新的命令需要從hash slot 3999獲取數(shù)據(jù)時(shí)就可以有更高的幾率從hash slot獲取到正確的目標(biāo)節(jié)點(diǎn)。

假設(shè)集群已經(jīng)足夠的穩(wěn)定(不增刪節(jié)點(diǎn)),那么所有的客戶端將會(huì)擁有一份hash slots對(duì)應(yīng)節(jié)點(diǎn)的數(shù)據(jù),這可以使整個(gè)集群更高效,因?yàn)檫@樣每個(gè)命令都會(huì)直接定向到正確的節(jié)點(diǎn),不需要通過節(jié)點(diǎn)尋找節(jié)點(diǎn)或者重新計(jì)算hash slot對(duì)應(yīng)的節(jié)點(diǎn)。

集群不下線更新配置

Redis集群支持線上增刪節(jié)點(diǎn)。實(shí)際上對(duì)于系統(tǒng)來說,增加和刪除節(jié)點(diǎn)在本質(zhì)上是一樣的,因?yàn)樗麄兌际前裩ash slot從一個(gè)節(jié)點(diǎn)遷移至另外一個(gè)節(jié)點(diǎn)而已。

增加節(jié)點(diǎn):集群中加入一個(gè)空節(jié)點(diǎn)并且把hash slot從已存在的節(jié)點(diǎn)們移至新節(jié)點(diǎn)。

刪除節(jié)點(diǎn):集群刪除一個(gè)已存在節(jié)點(diǎn)并且把hash slot分散到已存在的其他節(jié)點(diǎn)中。

所以實(shí)現(xiàn)這個(gè)功能的核心就是遷移slots。實(shí)際上從某種觀點(diǎn)上來說,hash slot只不過是一堆key的合集,所以Redis集群要做的事情只是在重分片的時(shí)候把一堆key從一個(gè)實(shí)例移動(dòng)到另外一個(gè)實(shí)例。

“Redis集群有哪些功能”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)站標(biāo)題:Redis集群有哪些功能-創(chuàng)新互聯(lián)
文章鏈接:http://www.chinadenli.net/article38/dijdpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)Google網(wǎng)站改版小程序開發(fā)網(wǎng)站設(shè)計(jì)定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(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í)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)