Redis集群

Redis版本要求:Redis 版本3.0+

Redis Cluster TCP ports

Redis集群的每一個(gè)節(jié)點(diǎn)需要兩個(gè)端口號,client port和cluster bus port,比如6379,16379
端口6379:用于redis client連接
端口16379:用于集群節(jié)點(diǎn)間的交流通信

cluster bus port = client port + 10000,這是固定的

Redis集群數(shù)據(jù)分片

Redis 集群有16384個(gè)哈希槽,每一個(gè)key通過CRC16算法對16384取模,得到相應(yīng)的槽位
假設(shè)集群有如下節(jié)點(diǎn):

  • 節(jié)點(diǎn)A, 槽位0 ~ 5500
  • 節(jié)點(diǎn)B, 槽位5501 ~ 11000
  • 節(jié)點(diǎn)C, 槽位11001 ~ 16383

如果要增加一個(gè)節(jié)點(diǎn)D,則需要從其他節(jié)點(diǎn)A,B,C拿一些槽位給D;反之,如果要?jiǎng)h除節(jié)點(diǎn),則需要將自身的槽位轉(zhuǎn)移到其他節(jié)點(diǎn),才能刪除該節(jié)點(diǎn)

Redis集群參數(shù)配置

cluster-enabled <yes/no> 是否開啟集群模式
cluster-config-file <filename> 記錄集群配置,方便重啟
cluster-node-timeout <milliseconds> 超時(shí)時(shí)間

手動創(chuàng)建Redis集群

Redis集群最小配置文件 redis.conf

port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

最小集群最少需要三個(gè)master,建議3master,3slave

創(chuàng)建步驟如下:

  • 首先執(zhí)行以下命令
mkdir cluster-test
cd cluster-test
mkdir  7001 7002 7003 7004 7005 7006
  • 在每一個(gè)目錄下創(chuàng)建相應(yīng)的 redis.conf 文件

  • 復(fù)制redis-server文件到 cluster-test 下

  • 啟動每一個(gè)Redis實(shí)例

cd 7000
../redis-server ./redis.conf

創(chuàng)建集群

  • 對于Redis5
    復(fù)制redis-cli文件到 cluster-test 下

執(zhí)行以下命令

./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

--cluster-replicas 1 表示 每一個(gè)master:slave,即一個(gè)主節(jié)點(diǎn)有一個(gè)從節(jié)點(diǎn)

Redis集群創(chuàng)建成功標(biāo)志

查詢集群所有節(jié)點(diǎn)

./redis-cli -p 7001 cluster nodes
查詢結(jié)果

故障轉(zhuǎn)移測試

端口7001宕機(jī)

./redis-cli -p 7001 debug segfault
// 執(zhí)行結(jié)果
Error: Server closed the connection

再重啟7001端口,可以看到原先的端口7005從節(jié)點(diǎn)變成了主節(jié)點(diǎn)


故障轉(zhuǎn)移效果圖

擴(kuò)展一個(gè)主節(jié)點(diǎn)master

創(chuàng)建7007目錄
創(chuàng)建redis.conf文件
啟動redis實(shí)例 ../redis-server ./redis.conf

將7007節(jié)點(diǎn)加入集群

./redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7002
查詢結(jié)果

槽位分配

./redis-cli --cluster reshard 127.0.0.1:7005
槽位分配過程
槽位分配結(jié)果

增加一個(gè)從節(jié)點(diǎn)

// 127.0.0.1:7006  增加的從節(jié)點(diǎn)ip
redis-cli --cluster add-node 127.0.0.1:7006 \
127.0.0.1:7000 --cluster-slave \
 --cluster-master-id \
// 主節(jié)點(diǎn)nodeId
3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e

刪除一個(gè)節(jié)點(diǎn)

redis-cli --cluster del-node 127.0.0.1:7001  `<del-node-id>`

注意:
刪除一個(gè)master時(shí),其槽位必須為0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • redis集群分為服務(wù)端集群和客戶端分片,redis3.0以上版本實(shí)現(xiàn)了集群機(jī)制,即服務(wù)端集群,3.0以下使用客戶...
    hadoop_null閱讀 1,676評論 0 6
  • 前面我們介紹了國人自己開發(fā)的Redis集群方案——Codis,Codis友好的管理界面以及強(qiáng)大的自動平衡槽位的功能...
    Jackeyzhe閱讀 2,168評論 0 3
  • redis主題 01_Redis介紹和安裝運(yùn)行02_Jedis的介紹和使用03_Redis數(shù)據(jù)類型和數(shù)據(jù)操作的命令...
  • 單機(jī)/單點(diǎn) 單點(diǎn)故障/瓶頸:多個(gè)節(jié)點(diǎn)負(fù)載:面向數(shù)據(jù):一變多(一致性<弱一致,最終一致性>)》可用性最終一致性:一部...
    壹點(diǎn)零閱讀 856評論 0 3
  • 枇杷黃時(shí)夏初長 綠暗紅老 晚風(fēng)猶微涼 經(jīng)書漫卷思漫飏 一忽兒生 一忽兒亡 崢嶸都平常 怨一場 恨一場 爭一場 斗一...
    黛眉居閱讀 462評論 13 19

友情鏈接更多精彩內(nèi)容