目錄
一? ? redis?cluster?相關(guān)定義
1,?redis?cluster?是什么
2,redis?集群的組成
3,集群的作用
4,集群架構(gòu)圖
二? ? ?Redis集群的數(shù)據(jù)分片
1,哈希槽是什么
2,哈希槽如何排布
3,Redis集群的主從復(fù)制模型
4,哈希槽架構(gòu)圖
三? ? ?實(shí)驗(yàn)?zāi)Mredis?集群
1,實(shí)驗(yàn)環(huán)境
2,清理實(shí)驗(yàn)環(huán)境
3,?模擬6個(gè)redis
4 ,修改6個(gè)?節(jié)點(diǎn)的配置文件
5,分別啟動(dòng)所有的redis
6,啟動(dòng)redis?集群
7 ,? 查看集群
8 ,? ?測(cè)試集群
9,重點(diǎn)理解集群??redis 在集群模式下 redis-cli -p 6001 -c 新增鍵 不會(huì)報(bào)錯(cuò) 但是 redis-cli -p 6001 新增鍵會(huì)報(bào)錯(cuò)
四? ?總結(jié)
1,redis? 主從復(fù)制
2,?哨兵
3,redis cluster
一? ? redis?cluster?相關(guān)定義
1,?redis?cluster?是什么
redis?集群是?redis?群集三種模式之一。
redis群集有三種模式,分別是主從同步/復(fù)制、哨兵模式、Cluster,本文會(huì)講解一下三種模式的工作方式,以及如何搭建cluster群集
●主從復(fù)制:主從復(fù)制是高可用Redis的基礎(chǔ),哨兵和集群都是在主從復(fù)制基礎(chǔ)上實(shí)現(xiàn)高可用的。主從復(fù)制主要實(shí)現(xiàn)了數(shù)據(jù)的多機(jī)備份,以及對(duì)于讀操作的負(fù)載均衡和簡單的故障恢復(fù)。
缺陷:故障恢復(fù)無法自動(dòng)化;寫操作無法負(fù)載均衡;存儲(chǔ)能力受到單機(jī)的限制。
●哨兵:在主從復(fù)制的基礎(chǔ)上,哨兵實(shí)現(xiàn)了自動(dòng)化的故障恢復(fù)。
缺陷:寫操作無法負(fù)載均衡;存儲(chǔ)能力受到單機(jī)的限制;哨兵無法對(duì)從節(jié)點(diǎn)進(jìn)行自動(dòng)故障轉(zhuǎn)移,在讀寫分離場(chǎng)景下,從節(jié)點(diǎn)故障會(huì)導(dǎo)致讀服務(wù)不可用,需要對(duì)從節(jié)點(diǎn)做額外的監(jiān)控、切換操作。
●集群:通過集群,Redis解決了寫操作無法負(fù)載均衡,以及存儲(chǔ)能力受到單機(jī)限制的問題,實(shí)現(xiàn)了較為完善的高可用方案。
?
2,redis?集群的組成
集群由多個(gè)節(jié)點(diǎn)(Node)組成,Redis的數(shù)據(jù)分布在這些節(jié)點(diǎn)中。集群中的節(jié)點(diǎn)分為主節(jié)點(diǎn)和從節(jié)點(diǎn):只有主節(jié)點(diǎn)負(fù)責(zé)讀寫請(qǐng)求和集群信息的維護(hù);從節(jié)點(diǎn)只進(jìn)行主節(jié)點(diǎn)數(shù)據(jù)和狀態(tài)信息的復(fù)制。
3,集群的作用
(1)數(shù)據(jù)分區(qū):數(shù)據(jù)分區(qū)(或稱數(shù)據(jù)分片)是集群最核心的功能。
集群將數(shù)據(jù)分散到多個(gè)節(jié)點(diǎn),一方面突破了Redis單機(jī)內(nèi)存大小的限制,存儲(chǔ)容量大大增加;另一方面每個(gè)主節(jié)點(diǎn)都可以對(duì)外提供讀服務(wù)和寫服務(wù),大大提高了集群的響應(yīng)能力。
Redis單機(jī)內(nèi)存大小受限問題,在介紹持久化和主從復(fù)制時(shí)都有提及;例如,如果單機(jī)內(nèi)存太大,bgsave和bgrewriteaof的fork操作可能導(dǎo)致主進(jìn)程阻塞,主從環(huán)境下主機(jī)切換時(shí)可能導(dǎo)致從節(jié)點(diǎn)長時(shí)間無法提供服務(wù),全量復(fù)制階段主節(jié)點(diǎn)的復(fù)制緩沖區(qū)可能溢出。
?
(2)高可用:集群支持主從復(fù)制和主節(jié)點(diǎn)的自動(dòng)故障轉(zhuǎn)移(與哨兵類似);當(dāng)任一節(jié)點(diǎn)發(fā)生故障時(shí),集群仍然可以對(duì)外提供服務(wù)。
?
4,集群架構(gòu)圖
二? ? ?Redis集群的數(shù)據(jù)分片
1,哈希槽是什么
Redis集群引入了哈希槽的概念
Redis集群有16384個(gè)哈希槽(編號(hào)0-16383)
集群的每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分哈希槽
每個(gè)Key通過CRC16校驗(yàn)后對(duì)16384取余來決定放置哪個(gè)哈希槽,通過這個(gè)值,去找到對(duì)應(yīng)的插槽所對(duì)應(yīng)的節(jié)點(diǎn),然后直接自動(dòng)跳轉(zhuǎn)到這個(gè)對(duì)應(yīng)的節(jié)點(diǎn)上進(jìn)行存取操作
?
2,哈希槽如何排布
#以3個(gè)節(jié)點(diǎn)組成的集群為例:
節(jié)點(diǎn)A包含0到5460號(hào)哈希槽
節(jié)點(diǎn)B包含5461到10922號(hào)哈希槽
節(jié)點(diǎn)C包含10923到16383號(hào)哈希槽
?
3,Redis集群的主從復(fù)制模型
集群中具有A、B、C三個(gè)節(jié)點(diǎn),如果節(jié)點(diǎn)B失敗了,整個(gè)集群就會(huì)因缺少5461-10922這個(gè)范圍的槽而不可以用。
為每個(gè)節(jié)點(diǎn)添加一個(gè)從節(jié)點(diǎn)A1、B1、C1整個(gè)集群便有三個(gè)Master節(jié)點(diǎn)和三個(gè)slave節(jié)點(diǎn)組成,在節(jié)點(diǎn)B失敗后,集群選舉B1位為的主節(jié)點(diǎn)繼續(xù)服務(wù)。當(dāng)B和B1都失敗后,集群將不可用。
?
4,哈希槽架構(gòu)圖
三? ? ?實(shí)驗(yàn)?zāi)Mredis?集群
1,實(shí)驗(yàn)環(huán)境
redis的集群一般需要6個(gè)節(jié)點(diǎn),3主3從。方便起見,這里所有節(jié)點(diǎn)在同一臺(tái)服務(wù)器上模擬:
以端口號(hào)進(jìn)行區(qū)分:3個(gè)主節(jié)點(diǎn)端口號(hào):6001/6002/6003,對(duì)應(yīng)的從節(jié)點(diǎn)端口號(hào):6004/6005/6006。
?
2,清理實(shí)驗(yàn)環(huán)境
關(guān)閉防火墻?和redis
3,?模擬6個(gè)redis
首先在 /etc/redis/redis-cluster/? ?創(chuàng)建6個(gè)對(duì)應(yīng)的文件夾
將redis?的配置文件? ?和啟動(dòng)文件分別拷貝到這6個(gè)文件夾
(此處為for循環(huán) )
拷貝redis?啟動(dòng)文件
4 ,修改6個(gè)?節(jié)點(diǎn)的配置文件
代碼如下:
#開啟群集功能:
#其他5個(gè)文件夾的配置文件以此類推修改,注意6個(gè)端口都要不一樣。
cd /etc/redis/redis-cluster/redis6001
vim redis.conf
#bind 127.0.0.1 #69行,注釋掉bind 項(xiàng),默認(rèn)監(jiān)聽所有網(wǎng)卡
protected-mode no #88行,修改,關(guān)閉保護(hù)模式
port 6001 #92行,修改,redis監(jiān)聽端口,
daemonize yes #136行,開啟守護(hù)進(jìn)程,以獨(dú)立進(jìn)程啟動(dòng)
cluster-enabled yes #832行,取消注釋,開啟群集功能
cluster-config-file nodes-6001.conf #840行,取消注釋,群集名稱文件設(shè)置
cluster-node-timeout 15000 #846行,取消注釋群集超時(shí)時(shí)間設(shè)置
appendonly yes #700行,修改,開啟AOF持久化
tips:為了方便可以改好6001的配置文件再貼到其他5個(gè)下面
再改92行? 和 840行
5,分別啟動(dòng)所有的redis
查看是否啟動(dòng)
6,啟動(dòng)redis?集群
代碼如下;
redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
解釋:
#六個(gè)實(shí)例分為三組,每組一主一從,前面的做主節(jié)點(diǎn),后面的做從節(jié)點(diǎn)。下面交互的時(shí)候 需要輸入 yes 才可以創(chuàng)建。
--replicas 1 表示每個(gè)主節(jié)點(diǎn)有1個(gè)從節(jié)點(diǎn)。
7 ,? 查看集群
cluster?slots? 首先查看主從? 及哈希槽
可以得知 6001主?從為 6005
? ? ? ? ? ? ? ? 6002主? 從為6006
? ? ? ? ? ? ? ? 6003主? ?從為 6004
8 ,? ?測(cè)試集群
如下圖? 輸入-c? ?你可以理解為對(duì)這個(gè)集群的操作
會(huì)根據(jù)算法? ?將這個(gè)ceshi? 鍵放到6003?機(jī)器上
查看6003?的? ? 從?6004? ?可以看到該鍵? ?其他主機(jī)看不到
9,重點(diǎn)理解集群??redis 在集群模式下 redis-cli -p 6001 -c 新增鍵 不會(huì)報(bào)錯(cuò) 但是 redis-cli -p 6001 新增鍵會(huì)報(bào)錯(cuò)
如圖所示? 不加-c? 會(huì)報(bào)錯(cuò)? ?因?yàn)?/p>
在Redis集群模式下,分別使用以下兩種方式執(zhí)行新增鍵的操作:
-
使用?
redis-cli -p 6001 -c
:-
-p 6001
?指定連接到集群中監(jiān)聽6001端口的某個(gè)節(jié)點(diǎn)。 -c
?參數(shù)表示客戶端應(yīng)以集群模式工作,能夠理解并自動(dòng)處理Redis集群返回的“MOVED”重定向響應(yīng)。
當(dāng)您嘗試新增一個(gè)鍵時(shí),如果該鍵應(yīng)歸屬于當(dāng)前連接節(jié)點(diǎn),或者
redis-cli
能夠根據(jù)“MOVED”響應(yīng)成功找到并重定向到正確的節(jié)點(diǎn)執(zhí)行命令,那么操作不會(huì)報(bào)錯(cuò)。這是因?yàn)?code>redis-cli在這種模式下具備處理集群內(nèi)部鍵遷移和分布的能力。 -
-
使用?
redis-cli -p 6001
:- 同樣使用?
-p 6001
?指定連接到集群中監(jiān)聽6001端口的節(jié)點(diǎn),但沒有提供?-c
?參數(shù)。
在這種情況下,
redis-cli
?認(rèn)為它正在與單個(gè)獨(dú)立的Redis實(shí)例交互,而不是一個(gè)集群。當(dāng)您嘗試新增一個(gè)鍵時(shí),如果該鍵實(shí)際應(yīng)由集群中的其他節(jié)點(diǎn)處理(即不屬于當(dāng)前連接節(jié)點(diǎn)負(fù)責(zé)的槽位),Redis集群會(huì)返回一個(gè)“MOVED”錯(cuò)誤,指示您應(yīng)該將命令發(fā)送到正確的節(jié)點(diǎn)。由于缺少?-c
?參數(shù),redis-cli
?無法自動(dòng)處理這個(gè)重定向響應(yīng),而是將“MOVED”錯(cuò)誤直接顯示給您,導(dǎo)致操作報(bào)錯(cuò)。 - 同樣使用?
總結(jié)來說,使用?redis-cli -p 6001 -c
?連接Redis集群并新增鍵通常不會(huì)報(bào)錯(cuò),因?yàn)樗軌驊?yīng)對(duì)鍵可能分布在不同節(jié)點(diǎn)的情況,自動(dòng)處理重定向。而使用?redis-cli -p 6001
(無?-c
?參數(shù))連接時(shí),由于客戶端不具備集群模式的支持,遇到需要重定向的情況會(huì)直接報(bào)告錯(cuò)誤,無法完成新增鍵的操作。因此,在與Redis集群交互時(shí),尤其是在進(jìn)行寫入操作時(shí),務(wù)必使用?-c
?參數(shù)以確保命令能夠正確執(zhí)行。
四? ?總結(jié)
1,redis? 主從復(fù)制
redis主從復(fù)制是一種同步機(jī)制,
主服務(wù)器數(shù)據(jù)的修改會(huì)實(shí)時(shí)同步到從服務(wù)器上,實(shí)現(xiàn)數(shù)據(jù)備份和讀寫分離
2,?哨兵
1)監(jiān)控
2)通知
3)自動(dòng)故障轉(zhuǎn)移
4)配置提供服務(wù)(客戶端做為驗(yàn)證)
redis 哨兵是一個(gè)用于管理多個(gè)redis 服務(wù)器的系統(tǒng)它提供監(jiān)控 通知自動(dòng)故障轉(zhuǎn)移和配置服務(wù),來實(shí)現(xiàn)redis高可用性。
3,redis cluster
1)數(shù)據(jù)分片
2)故障轉(zhuǎn)移
3)高性能
4)高可用
redis集群是一個(gè)提供? ? 高性能? ? 高可用? ?數(shù)據(jù)分片? ? 故障轉(zhuǎn)移? 特性的文章來源:http://www.zghlxwxcb.cn/news/detail-849450.html
分布式數(shù)據(jù)庫模式文章來源地址http://www.zghlxwxcb.cn/news/detail-849450.html
到了這里,關(guān)于redis 集群模式(redis cluster)介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!