在redis-5中redis-trib.rb的功能被集成到了redis-cli中,大大簡化了redis的集群部署,加快了進群部署的速度,也方便后期維護與擴容。
以下簡要介紹一下redis-cli在集群中的操作:
環境:Ubuntu 18.04.2 LTS
redis版本:redis-5.0.5
集群架構:3master+3slave(后期添加1master+1slave)
創建集群:
1、新建所需目錄,創建配置文件,啟動6個redis實例進程(配置參數盡量保持一致)。在這里原始集群端口號為6379-6384,監聽在127.0.0.1上。添加節點監聽為127.0.0.1:6385(master),127.0.0.1:6386(slave)
2、創建集群:
命令 :redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
--cluster-replicas 表示有一個主有幾個slave
3、擴容:
(1)查看每個集群節點的node ID和身份
進入任意集群master節點:redis-cli -p 6379
查看節點ID:cluster nodes
注意:以上我是在測試環境中,沒有使用身份驗證,在生產環境中,必須添加requirepass參數。
(2)添加master節點
redis-cli --cluster add-node 127.0.0.1:6385 127.0.0.1:6379
注意語法,一個新節點IP:端口 空格 一個舊節點IP:端口,注意點是:
1.不能多個新節點一次性添加
2.新節點后是舊節點
3.如果設置--cluster-slave,新節點掛在舊節點下的一個從節點
4.如果設置 --cluster-master-id <arg> ,arg設置舊節點的id,具體可以使用cluster nodes查看各個節點的id
add-node new_host:new_port existing_host:existing_port
--cluster-slave
--cluster-master-id <arg>
例子1:添加到從節點
./redis-cli --cluster add-node 192.168.1.136:7007 192.168.1.136:7001 --cluster-slave
例子2:添加到Master,192.168.1.143:7002是新節點,192.168.1.136:7001是已經存在的一個舊節點,
./redis-cli --cluster add-node 192.168.1.136:7007 192.168.1.136:7001 --cluster-master-id 49395c60c6e5215aaf52260a72100a7f076aab76
這里是將節點加入了集群中,但是並沒有分配slot,所以這個節點並沒有真正的開始分擔集群工作。
(3)分配slot
redis-cli --cluster reshard 127.0.0.1:6379 --cluster-from 2846540d8284538096f111a8ce7cf01c50199237,e0a9c3e60eeb951a154d003b9b28bbdc0be67d5b,692dec0ccd6bdf68ef5d97f145ecfa6d6bca6132 --cluster-to 46f0b68b3f605b3369d3843a89a2b4a164ed21e8 --cluster-slots 1024
--cluster-from:表示slot目前所在的節點的node ID,多個ID用逗號分隔
--cluster-to:表示需要新分配節點的node ID(貌似每次只能分配一個)
--cluster-slots:分配的slot數量
(4)添加slave節點
redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6385 --cluster-slave --cluster-master-id 46f0b68b3f605b3369d3843a89a2b4a164ed21e8
add-node: 后面的分別跟着新加入的slave和slave對應的master
cluster-slave:表示加入的是slave節點
--cluster-master-id:表示slave對應的master的node ID
4、收縮集群
下線節點127.0.0.1:6385(master)/127.0.0.1:6386(slave)
(1)首先刪除master對應的slave
redis-cli --cluster del-node 127.0.0.1:6386 530cf27337c1141ed12268f55ba06c15ca8494fc
del-node后面跟着slave節點的 ip:port 和node ID
(2)清空master的slot
redis-cli --cluster reshard 127.0.0.1:6385 --cluster-from 46f0b68b3f605b3369d3843a89a2b4a164ed21e8 --cluster-to 2846540d8284538096f111a8ce7cf01c50199237 --cluster-slots 1024 --cluster-yes
reshard子命令前面已經介紹過了,這里需要注意的一點是,由於我們的集群一共有四個主節點,而每次reshard只能寫一個目的節點,因此以上命令需要執行三次(--cluster-to對應不同的目的節點)。
--cluster-yes:不回顯需要遷移的slot,直接遷移。
(3)下線(刪除)節點
redis-cli --cluster del-node 127.0.0.1:6385 46f0b68b3f605b3369d3843a89a2b4a164ed21e8
至此就是redis cluster 簡單的操作過程