下面由Redis教程欄目給大家介紹Redis三種集群模式-Cluster集群模式,希望對(duì)需要的朋友有所幫助!
Redis三種集群模式-Cluster集群模式
一、 在之前有看到過(guò)redis集群部署的三種方案,不過(guò)性能最高的還是redis官方推薦的redis-cluster,性能最高,下面介紹一下redis-cluster這種模式。
1、redis-cluster
A、采用去中心化的思想,沒(méi)有中心節(jié)點(diǎn)的說(shuō)法,它使用hash slot方式將16348個(gè)hash slot覆蓋到所有節(jié)點(diǎn)上,對(duì)于存儲(chǔ)的每個(gè)key值,使用CRC16(KEY)&16348=slot得到他對(duì)應(yīng)的hash slot,
并在訪問(wèn)key的時(shí)候就去找他的hash slot在哪一個(gè)節(jié)點(diǎn)上,然后由當(dāng)前訪問(wèn)節(jié)點(diǎn)從實(shí)際被分配了這個(gè)hash slot的節(jié)點(diǎn)去取數(shù)據(jù),節(jié)點(diǎn)之間使用輕量協(xié)議通信 減少帶寬占用 性能很高,
自動(dòng)實(shí)現(xiàn)負(fù)載均衡與高可用,自動(dòng)實(shí)現(xiàn)failover并且支持動(dòng)態(tài)擴(kuò)展。
B、其內(nèi)部中也需要配置主從,并且內(nèi)部也是采用哨兵模式,如果有半數(shù)節(jié)點(diǎn)發(fā)現(xiàn)某個(gè)異常節(jié)點(diǎn),共同決定更改異常節(jié)點(diǎn)的狀態(tài),如果改節(jié)點(diǎn)是主節(jié)點(diǎn),則對(duì)應(yīng)的從節(jié)點(diǎn)自動(dòng)頂替為主節(jié)點(diǎn),當(dāng)原先的主節(jié)點(diǎn)上線后,則會(huì)變?yōu)閺墓?jié)點(diǎn)。
如果集群中的master沒(méi)有slave節(jié)點(diǎn),則master掛掉后整個(gè)集群就會(huì)進(jìn)入fail狀態(tài),因?yàn)榧旱膕lot映射不完整。如果集群超過(guò)半數(shù)以上的master掛掉,無(wú)論是否有slave,集群都會(huì)進(jìn)入fail狀態(tài)。
C、根據(jù)官方推薦 集群部署至少要3臺(tái)以上的master節(jié)點(diǎn)。那么接下來(lái)就開(kāi)始部署吧
2、在每一路徑下我們添加一下配置文件
都為: redis.conf
二、集群配置
cd /usr/software/redis/redis-cluster/
1.創(chuàng)建目錄
/usr/software/redis/redis-cluster/1001
/usr/software/redis/redis-cluster/1002
/usr/software/redis/redis-cluster/1003
/usr/software/redis/redis-cluster/1004
/usr/software/redis/redis-cluster/1005
/usr/software/redis/redis-cluster/1006
2.修改redis.conf
cd /usr/software/redis/redis-cluster/1001
vim redis.conf
#修改如下鍵值對(duì)
################################## NETWORK ##################################### #bind 127.0.0.1protected-mode no port 1001################################# GENERAL ##################################### daemonize yes pidfile "/var/run/redis_1001.pid"logfile "/usr/software/redis/redis-cluster/1001/log/redis.log"################################ SNAPSHOTTING ################################dir "/usr/software/redis/redis-cluster/1001/data"################################ REDIS CLUSTER ############################### cluster-enabled yes cluster-config-file nodes-1001.conf cluster-node-timeout 15000################################## SECURITY ################################### requirepass "ww"
其他幾個(gè)實(shí)例的配置文件修改以下配置即可(需要自己創(chuàng)建log,data目錄):
port 100x"/var/run/redis_100x.pid" logfile "/usr/software/redis/redis-cluster/100x/log/redis.log""/usr/software/redis/redis-cluster/100x/data"-config-file nodes-100x.conf
三、集群?jiǎn)?dòng)
1、使用redis-server /usr/software/redis/redis-cluster/1001/redis.conf …將所有節(jié)點(diǎn)啟動(dòng)
2、啟動(dòng)后我們就可以創(chuàng)建集群啦
注意:在redis5.0后 創(chuàng)建集群統(tǒng)一使用redis-cli,之前的版本使用redis-trib.rb,但是需要安裝ruby軟件相對(duì)復(fù)雜,相比之前的版本5.0不需要安裝額外的軟件,方便。具體的可以參照redis官方網(wǎng)站查看 https://redis.io/topics/cluster-tutorial
創(chuàng)建集群命令:其中 cluster-replicas 1 代表 一個(gè)master后有幾個(gè)slave,1代表為1個(gè)slave節(jié)點(diǎn)
redis-cli --cluster create 127.0.0.1:1001 127.0.0.1:1002 127.0.0.1:1003 127.0.0.1:1004 127.0.0.1:1005 127.0.0.1:1006 --cluster-replicas 1 -a ww
第一次由于沒(méi)有設(shè)置 -a ww 添加密碼,集群創(chuàng)建失敗,
過(guò)程中會(huì)提示以下內(nèi)容,輸入 yes 繼續(xù);
Can I set the above configuration? (type 'yes' to accept): yes
集群自動(dòng)分配結(jié)果如下:
3、驗(yàn)證集群是否創(chuàng)建成功
首先查看一下主從配對(duì)情況
執(zhí)行 :redis-cli -c -p 1001 -a ww
數(shù)據(jù)自動(dòng)分配到1002節(jié)點(diǎn),連接也轉(zhuǎn)移到1002 節(jié)點(diǎn)
4、驗(yàn)證故障轉(zhuǎn)移
結(jié)論是主節(jié)點(diǎn)故障后,下掛從節(jié)點(diǎn)會(huì)升級(jí)成主節(jié)點(diǎn),并接替主節(jié)點(diǎn)的槽位。舊主節(jié)點(diǎn)上線后,也只能作為其從節(jié)點(diǎn)。
kill 掉1001 ,發(fā)現(xiàn)其從節(jié)點(diǎn)1004轉(zhuǎn)為了master
重新啟動(dòng)1001,其變成slave節(jié)點(diǎn)