非常適合新手的redis cluster搭建過(guò)程

Redis集群演進(jìn)過(guò)程
- Redis單節(jié)點(diǎn)
- 主從復(fù)制:
復(fù)制主要實(shí)現(xiàn)了數(shù)據(jù)的多機(jī)備份,以及對(duì)于讀操作的負(fù)載均衡和簡(jiǎn)單的故障恢復(fù)。
故障恢復(fù)無(wú)法自動(dòng)化;寫(xiě)操作無(wú)法負(fù)載均衡;存儲(chǔ)能力受到單機(jī)的限制。 - 哨兵(Sentinel):
在復(fù)制的基礎(chǔ)上,哨兵實(shí)現(xiàn)了自動(dòng)化的故障恢復(fù)。
缺陷是寫(xiě)操作無(wú)法負(fù)載均衡;存儲(chǔ)能力受到單機(jī)的限制。 - Cluster集群:
通過(guò)分片集群,Redis解決了寫(xiě)操作無(wú)法負(fù)載均衡,以及存儲(chǔ)能力受到單機(jī)限制的問(wèn)題,而且也具有故障遷移(主從切換)的功能,實(shí)現(xiàn)了較為完善的高可用方案。

科普特性
請(qǐng)對(duì)照上面的架構(gòu)圖
- redis cluster不支持單機(jī)版本的16個(gè)默認(rèn)數(shù)據(jù)庫(kù),僅有0數(shù)據(jù)庫(kù),
select命令被禁用 - key空間被劃分為16384個(gè)哈希槽,每個(gè)master節(jié)點(diǎn)負(fù)責(zé)處理16384個(gè)哈希槽的子集;
當(dāng)集群沒(méi)有發(fā)生重配,集群是穩(wěn)定的 - 每個(gè)master都可能有1個(gè)或多個(gè)slave節(jié)點(diǎn), 這些節(jié)點(diǎn)將在網(wǎng)絡(luò)分區(qū)或者發(fā)生故障時(shí)嘗試替代master節(jié)點(diǎn), 同時(shí)這些slave節(jié)點(diǎn)也可用于支撐大規(guī)模的讀操作
- 將key映射到哈希操作的算法是
hash_slot = CRC16(16)mod 16384
例外:key hash tags:
{user1000}.following和{user1000}.followers兩個(gè)鍵值將被放在一個(gè)哈希槽,因?yàn)橹挥凶幼址畊ser1000將被用來(lái)計(jì)算哈希槽。
- Cluster bus:每個(gè)redis節(jié)點(diǎn)都有一個(gè)用于集群節(jié)點(diǎn)間通信的tcp端口(在原客戶端訪問(wèn)端口之上加上1000),
- 節(jié)點(diǎn)使用
gossip協(xié)議和配置更新機(jī)制,以避免在正常情況下在節(jié)點(diǎn)之間交換過(guò)多的消息,因此交換的消息數(shù)量不是指數(shù)級(jí)的 - redis客戶端可以向集群中每個(gè)節(jié)點(diǎn)發(fā)送查詢(包括從節(jié)點(diǎn)),節(jié)點(diǎn)將會(huì)分析查詢key,找到負(fù)責(zé)對(duì)應(yīng)哈希槽的節(jié)點(diǎn)。
當(dāng)前節(jié)點(diǎn)能處理最好,不能處理將返回 MOVED error、哈希槽、能處理的節(jié)點(diǎn),客戶端將自行定向到特定新節(jié)點(diǎn)查詢。
- 一般情況下slave節(jié)點(diǎn)會(huì)將客戶端請(qǐng)求重定向到負(fù)責(zé)對(duì)應(yīng)哈希槽的master節(jié)點(diǎn),但是為了支撐大規(guī)模讀,可以給slave節(jié)點(diǎn)開(kāi)啟 READONLY
搭建Redis Cluster
本文使用一個(gè)單物理機(jī),搭建偽Redis Cluster(3主3從)
- 創(chuàng)建redis-cluster目錄,存放集群
- 下載最新版redis-6.2.4, 將bin目錄下的可執(zhí)行文件、redis.conf拷貝到同級(jí)目錄redis01
- 修改redis01 目錄下redis.conf配置:
- port 7001
- cluster-enabled? yes ? ? ? ?// 之前被注釋
修改對(duì)應(yīng)redis.conf
port為7002 7003 7004 7005 7006
- 啟動(dòng)6個(gè)redis節(jié)點(diǎn),使用start.sh腳本( chmod +x start.sh)?每個(gè)啟動(dòng)命令后面的& 表示后臺(tái)啟動(dòng)
cd?redis01
./redis-server?redis.conf?&
cd?..
cd?redis02
./redis-server?redis.conf??&
cd?..
cd?redis03
./redis-server?redis.conf??&
cd?..
cd?redis04
./redis-server?redis.conf?&
cd?..
cd?redis05
./redis-server?redis.conf?&
cd?..
cd?redis06
./redis-server?redis.conf?&
cd?..

- 準(zhǔn)備組建redis cluster
redis 5+可以使用redis-cli 特定命令來(lái)組建集群;redis3,4使用
redis-trib.rb來(lái)協(xié)助組建集群。
使用redis-cli --cluster命令創(chuàng)建由6個(gè)節(jié)點(diǎn)組成的redis cluser,其中cluster-replicas 1將為每個(gè)master節(jié)點(diǎn)創(chuàng)建slave節(jié)點(diǎn)? (不帶上這個(gè)cluster-replicas,會(huì)創(chuàng)建了6個(gè)master節(jié)點(diǎn)組成的redis cluster).
redis-cli?--cluster?create?127.0.0.1:7001?\
127.0.0.1:7002?127.0.0.1:7003?127.0.0.1:7004?127.0.0.1:7005???127.0.0.1:7006?\
--cluster-replicas?1

- 驗(yàn)證集群狀態(tài)
使用redis-cli -p 7001 -c登錄節(jié)點(diǎn)
使用cluster nodes查看節(jié)點(diǎn)狀態(tài)
? ? ? 以上操作搭建了由3master 3Slave形成的高可用redis cluster,
? ? ?節(jié)點(diǎn)角色由自動(dòng)生成的nodes.conf文件維護(hù)

- 客戶端實(shí)操

如果覺(jué)得以上過(guò)程很繁瑣,Redis官方提供了另外的工具,在utils目錄create-cluster腳本。
- create-cluster start
- create-cluster create
就會(huì)創(chuàng)建3 mater 3 slave組成的redis cluster(首節(jié)點(diǎn)端口從30001 開(kāi)始),這樣前置知識(shí)可能沒(méi)有按部就班清晰。
總結(jié)
以上就是Redis Cluster科普級(jí)別的知識(shí), 幫助大家快速全面了解Redis Cluster特性, 快速搭建Redis Cluster。
好記性不如爛筆頭,倒騰一次,記錄一次。
