今天小編給大家分享的是關(guān)于redis的集群模式詳解,相信很多人都不太了解,為了讓大家更加了解redis的集群模式,所以給大家總結(jié)了以下內(nèi)容,一起往下看吧。一定會(huì)有所收獲的哦。
創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、通榆網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為通榆等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。Redis集群一般有5種:
1,主從復(fù)制
2,哨兵模式
3,Redis官方提供的Cluster集群模式(服務(wù)端)
4,Jedis sharding集群(客戶端sharding)
5,利用中間件代理,比如豌豆莢的codis等
介紹完他們的模式,現(xiàn)在來分析一下他們的原理:
主從復(fù)制(Master-Slave Replication):
實(shí)現(xiàn)主從復(fù)制(Master-Slave Replication)的工作原理:Slave從節(jié)點(diǎn)服務(wù)啟動(dòng)并連接到Master之后,它將主動(dòng)發(fā)送一個(gè)SYNC命令。Master服務(wù)主節(jié)點(diǎn)收到同步命令后將啟動(dòng)后臺存盤進(jìn)程,同時(shí)收集所有接收到的用于修改數(shù)據(jù)集的命令,在后臺進(jìn)程執(zhí)行完畢后,Master將傳送整個(gè)數(shù)據(jù)庫文件到Slave,以完成一次完全同步。而Slave從節(jié)點(diǎn)服務(wù)在接收到數(shù)據(jù)庫文件數(shù)據(jù)之后將其存盤并加載到內(nèi)存中。此后,Master主節(jié)點(diǎn)繼續(xù)將所有已經(jīng)收集到的修改命令,和新的修改命令依次傳送給Slaves,Slave將在本次執(zhí)行這些數(shù)據(jù)修改命令,從而達(dá)到最終的數(shù)據(jù)同步。
如果Master和Slave之間的鏈接出現(xiàn)斷連現(xiàn)象,Slave可以自動(dòng)重連Master,但是在連接成功之后,一次完全同步將被自動(dòng)執(zhí)行。
主從復(fù)制配置
修改從節(jié)點(diǎn)的配置文件:slaveof masterip masterport
如果設(shè)置了密碼,就要設(shè)置:masterauth master-password
哨兵模式:
該模式是從Redis的2.6版本開始提供的,但是當(dāng)時(shí)這個(gè)版本的模式是不穩(wěn)定的,直到Redis的2.8版本以后,這個(gè)哨兵模式才穩(wěn)定下來,無論是主從模式,還是哨兵模式,這兩個(gè)模式都有一個(gè)問題,不能水平擴(kuò)容,并且這兩個(gè)模式的高可用特性都會(huì)受到Master主節(jié)點(diǎn)內(nèi)存的限制。
Sentinel(哨兵)進(jìn)程是用于監(jiān)控redis集群中Master主服務(wù)器工作的狀態(tài),在Master主服務(wù)器發(fā)生故障的時(shí)候,可以實(shí)現(xiàn)Master和Slave服務(wù)器的切換,保證系統(tǒng)的高可用。
Sentinel(哨兵)進(jìn)程的作用
監(jiān)控(Monitoring): 哨兵(sentinel) 會(huì)不斷地檢查你的Master和Slave是否運(yùn)作正常。
提醒(Notification):當(dāng)被監(jiān)控的某個(gè)Redis節(jié)點(diǎn)出現(xiàn)問題時(shí), 哨兵(sentinel) 可以通過 API 向管理員或者其他應(yīng)用程序發(fā)送通知。
自動(dòng)故障遷移(Automatic failover):當(dāng)一個(gè)Master不能正常工作時(shí),哨兵(sentinel) 會(huì)開始一次自動(dòng)故障遷移操作,它會(huì)將失效Master的其中一個(gè)Slave升級為新的Master, 并讓失效Master的其他Slave改為復(fù)制新的Master;當(dāng)客戶端試圖連接失效的Master時(shí),集群也會(huì)向客戶端返回新Master的地址,使得集群可以使用現(xiàn)在的Master替換失效Master。Master和Slave服務(wù)器切換后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的內(nèi)容都會(huì)發(fā)生相應(yīng)的改變,即,Master主服務(wù)器的redis.conf配置文件中會(huì)多一行slaveof的配置,sentinel.conf的監(jiān)控目標(biāo)會(huì)隨之調(diào)換。
Sentinel(哨兵)進(jìn)程的工作方式
每個(gè)Sentinel(哨兵)進(jìn)程以每秒鐘一次的頻率向整個(gè)集群中的Master主服務(wù)器,Slave從服務(wù)器以及其他Sentinel(哨兵)進(jìn)程發(fā)送一個(gè) PING 命令。
如果一個(gè)實(shí)例(instance)距離最后一次有效回復(fù) PING 命令的時(shí)間超過 down-after-milliseconds 選項(xiàng)所指定的值, 則這個(gè)實(shí)例會(huì)被 Sentinel(哨兵)進(jìn)程標(biāo)記為主觀下線(SDOWN)
如果一個(gè)Master主服務(wù)器被標(biāo)記為主觀下線(SDOWN),則正在監(jiān)視這個(gè)Master主服務(wù)器的所有 Sentinel(哨兵)進(jìn)程要以每秒一次的頻率確認(rèn)Master主服務(wù)器的確進(jìn)入了主觀下線狀態(tài)
當(dāng)有足夠數(shù)量的 Sentinel(哨兵)進(jìn)程(大于等于配置文件指定的值)在指定的時(shí)間范圍內(nèi)確認(rèn)Master主服務(wù)器進(jìn)入了主觀下線狀態(tài)(SDOWN), 則Master主服務(wù)器會(huì)被標(biāo)記為客觀下線(ODOWN)
在一般情況下, 每個(gè) Sentinel(哨兵)進(jìn)程會(huì)以每 10 秒一次的頻率向集群中的所有Master主服務(wù)器、Slave從服務(wù)器發(fā)送 INFO 命令。
當(dāng)Master主服務(wù)器被 Sentinel(哨兵)進(jìn)程標(biāo)記為客觀下線(ODOWN)時(shí),Sentinel(哨兵)進(jìn)程向下線的 Master主服務(wù)器的所有 Slave從服務(wù)器發(fā)送 INFO 命令的頻率會(huì)從 10 秒一次改為每秒一次。
若沒有足夠數(shù)量的 Sentinel(哨兵)進(jìn)程同意 Master主服務(wù)器下線, Master主服務(wù)器的客觀下線狀態(tài)就會(huì)被移除。若 Master主服務(wù)器重新向 Sentinel(哨兵)進(jìn)程發(fā)送 PING 命令返回有效回復(fù),Master主服務(wù)器的主觀下線狀態(tài)就會(huì)被移除。
Redis官方 Cluster集群模式
Redis Cluster是一種服務(wù)器Sharding技術(shù),3.0版本開始正式提供。
在這個(gè)圖中,每一個(gè)藍(lán)色的圈都代表著一個(gè)redis的服務(wù)器節(jié)點(diǎn)。它們?nèi)魏蝺蓚€(gè)節(jié)點(diǎn)之間都是相互連通的??蛻舳丝梢耘c任何一個(gè)節(jié)點(diǎn)相連接,然后就可以訪問集群中的任何一個(gè)節(jié)點(diǎn)。對其進(jìn)行存取和其他操作。
Redis集群數(shù)據(jù)分片
在redis的每一個(gè)節(jié)點(diǎn)上,都有這么兩個(gè)東西,一個(gè)是插槽(slot)可以理解為是一個(gè)可以存儲兩個(gè)數(shù)值的一個(gè)變量這個(gè)變量的取值范圍是:0-16383。還有一個(gè)就是cluster我個(gè)人把這個(gè)cluster理解為是一個(gè)集群管理的插件。當(dāng)我們的存取的key到達(dá)的時(shí)候,redis會(huì)根據(jù)crc16的算法得出一個(gè)結(jié)果,然后把結(jié)果對 16384 求余數(shù),這樣每個(gè) key 都會(huì)對應(yīng)一個(gè)編號在 0-16383 之間的哈希槽,通過這個(gè)值,去找到對應(yīng)的插槽所對應(yīng)的節(jié)點(diǎn),然后直接自動(dòng)跳轉(zhuǎn)到這個(gè)對應(yīng)的節(jié)點(diǎn)上進(jìn)行存取操作。
Jedis sharding集群
Redis Sharding可以說是在Redis cluster出來之前業(yè)界普遍的采用方式,其主要思想是采用hash算法將存儲數(shù)據(jù)的key進(jìn)行hash散列,這樣特定的key會(huì)被定為到特定的節(jié)點(diǎn)上。
慶幸的是,Java Redis客戶端驅(qū)動(dòng)Jedis已支持Redis Sharding功能,即ShardedJedis以及結(jié)合緩存池的ShardedJedisPool
Jedis的Redis Sharding實(shí)現(xiàn)具有如下特點(diǎn):
采用一致性哈希算法,將key和節(jié)點(diǎn)name同時(shí)hashing,然后進(jìn)行映射匹配,采用的算法是MURMUR_HASH。采用一致性哈希而不是采用簡單類似哈希求模映射的主要原因是當(dāng)增加或減少節(jié)點(diǎn)時(shí),不會(huì)產(chǎn)生由于重新匹配造成的rehashing。一致性哈希只影響相鄰節(jié)點(diǎn)key分配,影響量小。
為了避免一致性哈希只影響相鄰節(jié)點(diǎn)造成節(jié)點(diǎn)分配壓力,ShardedJedis會(huì)對每個(gè)Redis節(jié)點(diǎn)根據(jù)名字(沒有,Jedis會(huì)賦予缺省名字)會(huì)虛擬化出160個(gè)虛擬節(jié)點(diǎn)進(jìn)行散列。根據(jù)權(quán)重weight,也可虛擬化出160倍數(shù)的虛擬節(jié)點(diǎn)。用虛擬節(jié)點(diǎn)做映射匹配,可以在增加或減少Redis節(jié)點(diǎn)時(shí),key在各Redis節(jié)點(diǎn)移動(dòng)再分配更均勻,而不是只有相鄰節(jié)點(diǎn)受影響。
ShardedJedis支持keyTagPattern模式,即抽取key的一部分keyTag做sharding,這樣通過合理命名key,可以將一組相關(guān)聯(lián)的key放入同一個(gè)Redis節(jié)點(diǎn),這在避免跨節(jié)點(diǎn)訪問相關(guān)數(shù)據(jù)時(shí)很重要。
利用中間件代理
中間件的作用是將我們需要存入redis中的數(shù)據(jù)的key通過一套算法計(jì)算得出一個(gè)值。然后根據(jù)這個(gè)值找到對應(yīng)的redis節(jié)點(diǎn),將這些數(shù)據(jù)存在這個(gè)redis的節(jié)點(diǎn)中。
常用的中間件有這幾種
Twemproxy
Codis
nginx
以上就是關(guān)于redis的集群模式詳解的詳細(xì)內(nèi)容了,看完之后是否有所收獲呢?如果想了解更多相關(guān)內(nèi)容,歡迎來創(chuàng)新互聯(lián)行業(yè)資訊!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
新聞標(biāo)題:關(guān)于redis的集群模式詳解-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://www.rwnh.cn/article14/ccscde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、網(wǎng)站導(dǎo)航、網(wǎng)站維護(hù)、營銷型網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、外貿(mào)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容