Redis Cluster 集羣擴容主從節點詳細教程

文章目錄

       1. Cluster 集羣擴容概念

       2. 在新節點部署 redis cluster

       3. 使用工具將 redis-4 加入集羣

           3.1. 安裝 ruby 環境

           3.2. 將 redis-4 加入集羣

       4. 將槽位重新分配

           4.1. 所有節點分出槽位給新節點

           4.2. 遷移指定節點的槽位給新節點

           4.3. 查看集羣信息及狀態

       5. 配置四主四從交叉複製

           5.1. 配置四主四從交叉複製

           5.2. 查看集羣信息及狀態

1. Cluster 集羣擴容概念

當 redis 數據量日漸增長,當內存不夠用的時候,這時候就需要集羣擴容了,cluster 集羣擴容可以增加內存也可以增加節點,因爲 redis 數據都是存在內存中

redis cluster 增加節點進行擴容步驟:

           1. 在新的服務器上部署 redis cluster

           2. 使用工具將新部署的節點加到集羣中

           3. 使用工具將集羣槽位重新分配

           4. 將主從複製關係調整成交叉模式

擴容原理: 原來的節點算好要拿出多少的槽位給新加的節點,新加的節點準備導入的槽位,準備的前提條件就是加入集羣,一切準備就緒後,主節點將劃分出來的槽位分配給新節點,然後將相關槽位的數據遷移到新的節點

4 個節點的 redis cluster,每個節點的槽位時 16384/4,一個節點 4096 個槽位

擴容前後的架構圖對比圖

新增節點後,主從複製就變成了四主四從,只需要變動 192.168.81.230 的從庫關係即可,192.168.81.230 節點從庫複製 192.168.81.240 節點的主庫,192.168.81.240 從庫複製 192.168.81.210 的主庫

環境準備

2. 在新節點部署 redis cluster

3. 使用工具將 redis-4 加入集羣

在原來集羣的任意一臺機器安裝了 ruby 環境即可操作

3.1. 安裝 ruby 環境

3.2. 將 redis-4 加入集羣

需要將 redis-4 的 6390 和 6391 端口都加入到集羣,可以使用工具進行添加

命令:./redis-trib.rb add-node 新節點: 端口 現有集羣: 端口

[root@redis-1 ~]# cd /data/redis_cluster/redis-3.2.9/src/
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./
redis-trib.rb add-node 192.168.81.240:6390 192.168.81.210:6380
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./
redis-trib.rb add-node 192.168.81.240:6391 192.168.81.210:6380

查看集羣信息, 已經有 8 個節點

[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes
ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 192.168.81.220:6380 
master - 0 1612424799243 2 connected 5461-10922
9b7641253ea66073d865accdd4460d2877f9ff5d 192.168.81.220:6381 
master - 0 1612424801262 8 connected 10923-16383
b19722a1d3d482a2c6eaaec15e5e72018600389f 192.168.81.240:6391 
master - 0 1612424797227 0 connected
6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2 192.168.81.240:6390 
master - 0 1612424796216 9 connected
bdd20b03b573b2def6a9ee5053a75867709fc908 192.168.81.210:6381 
slave ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 0 1612424796721 4 
connected
812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a 192.168.81.230:6380 
slave 9b7641253ea66073d865accdd4460d2877f9ff5d 0 1612424800253 8 
connected
904a0109976cae38e5a3059fd70ce2727a0ed8fb 192.168.81.230:6381 
slave b61b8d0421b94b9de7267dda6c6f401a42622047 0 1612424798232 6 
connected
b61b8d0421b94b9de7267dda6c6f401a42622047 192.168.81.210:6380 
myself,master - 0 0 1 connected 0-5460

4. 將槽位重新分配

當新節點加入集羣后,需要重新分配槽位,否則整個集羣是無法使用的

命令格式./redis-trib.rb reshard 集羣任意一個主庫的 ip: 端口

分配的時候可以選擇 all,直接將所有節點分出一部分槽位遷移給新節點

也可以指定某個節點遷移出一部分槽位給新節點

4.1. 所有節點分出槽位給新節點

[root@redis-1 ~]# cd /data/redis_cluster/redis-3.2.9/src
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb 
reshard 192.168.81.210:6380
How many slots do you want to move (from 1 to 16384)? 4096      
//需要遷移的槽位數量,也就是要拿出多少個槽位給新節點,我們輸入4096,
因爲16384除4剛好是4096
What is the receiving node ID? 
6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2      
//遷移給目標節點的ID號,也就是新節點的6390ID號,6390作爲新節點的主庫
Please enter all the source node IDs.                  
  Type 'all' to use all the nodes as source nodes for the hash 
  slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1:all
    //遷移方式:all將所有主節點分出一部分槽位給新節點
Do you want to proceed with the proposed reshard plan (yes/no)? 
yes      //是否繼續分配

設置要遷移的槽位數量,填寫 4096

填寫要遷移到目標節點的 ID 號,也就是要遷移給誰,這裏我們要遷移給新加的節點,我們要讓新機器的 6390 節點成爲主庫,因此就填寫 6390 節點的 ID 號

設置要從哪個節點上遷移槽位,可以一臺一臺的遷移,也可以填寫 all,all 的意思是從所有節點上一共取出 4096 個槽位分給新機器,如果使用 all 遷移,會把所有主節點遷移出一部分槽位給新節點,執行完 all 直接就退出工具

我們使用 all 自動將所有主節點進行遷移,直接輸入 all 即可自動遷移,一般都使用 all

提示我們是否繼續分配,我們選擇 yes

遷移完成自動退出程序

4.2. 遷移指定節點的槽位給新節點

前面步驟一致,只需要在 source node 選擇指定節點即可

填寫要遷移的主節點 ID,填寫完主機節點 ID 後,輸入 done,回車之後開始遷移數據

提示我們是否繼續,我們輸入 yes

開始數據遷移

4.3. 查看集羣信息及狀態

當 6390 分配完槽位後,可以看下集羣信息是否分配成功

可以看到 6390 上有 3 段槽位號,說明是從三個節點上分出來的,正好也驗證了之前說的一句話,槽位順序不一定要存在,只要槽位數量夠就可以

再次使用 reshard 命令即可看到都是 4096 個槽位

查看集羣狀態

5. 配置四主四從交叉複製

目前是 5 個主節點 3 個從節點,顯然是不合理的,我們要手動配置一些交叉複製實現四主四從

只需要操作 192.168.81.230 的 6381 端口和 192.168.81.240 的 6391 端口即可

192.168.81.230 的 6381 端口作爲 192.168.81.240 的 6390 端口的從庫

192.168.81.240 的 6391 作爲 192.168.81.210 的 6380 端口的從庫

再配置與新節點交叉複製的時候,建議先操作 192.168.81.230,這樣 192.168.81.210 的主庫就沒有需要傳輸 rdb 文件到從庫了,也可以減輕主庫的壓力,如果先讓 192.168.81.240 配置交叉,這樣一來 192.168.81.210 的主庫就有 2 份複製了,主庫就需要一次傳輸 2 份 rdb 文件,壓力也就大了

注意:先做 192.168.81.230 的交叉在做 192.168.81.240 的交叉

5.1. 配置四主四從交叉複製

1.將master主庫的所有ID獲取下來
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes 
| grep 'master' | awk '{print $1,$2}'
ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 192.168.81.220:6380
6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2 192.168.81.240:6390
812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a 192.168.81.230:6380
b61b8d0421b94b9de7267dda6c6f401a42622047 192.168.81.210:6380
2.建議在記事本里準備好命令
redis-3同步redis-4
192.168.81.230:6381> CLUSTER REPLICATE 
6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2
redis-4同步redis-3
192.168.81.240:6391> CLUSTER REPLICATE 
b61b8d0421b94b9de7267dda6c6f401a42622047

5.2. 查看集羣信息及狀態

[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:8
cluster_size:4
cluster_current_epoch:11
cluster_my_epoch:1
cluster_stats_messages_sent:69698
cluster_stats_messages_received:69627
[root@redis-1 ~]#

已經是三主三從了,並且集羣狀態也是 ok

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/odNPWqT43eQvKUvIOW5Ygg