久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Redis Cluster集群收縮主從節點的方法

133次閱讀
沒有評論

共計 4964 個字符,預計需要花費 13 分鐘才能閱讀完成。

這篇“Redis Cluster 集群收縮主從節點的方法”文章的知識點大部分人都不太理解,所以丸趣 TV 小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Redis Cluster 集群收縮主從節點的方法”文章吧。

1.Cluster 集群收縮概念

當項目壓力承載力過高時,需要增加節點來提高負載,當項目壓力不是很大時,也希望能夠將集群收縮下來,給其他項目使用,這就要用到集群收縮了

集群收縮操作和集群擴容是一樣的,只需要把方向反過來即可。

擴容的時候執行一次命令就可以實現槽位遷移成功,而收縮的時候有幾個主節點就需要執行多少次,比如除去要下線的節點,還有 3 個主節點,那么就需要執行三次,填寫遷移出槽位的數量也需要除以 3,每個節點也需要平均分配。

收縮的時候首先要填寫分出多少個槽位,然后填寫要分給誰,最后填寫從哪分出槽位,一般分多少個槽位,就需要看要下線的主機上有多少個槽位,然后除以集群主節點數,使每一個主機點分到的槽位都是相同的,填寫要分配給誰的時候,第一次填寫第一個主節點的 ID,第二次填寫第二個主節點的 ID,最后填寫提供槽位的節點 ID,就是下線節點的 ID 號。

集群收縮擴容槽位的時候不會影響數據的使用。

集群收縮的源端就是要下線的主節點,目標端就是在線的主節點(分配給誰的節點)。
咱們要清楚一點,只有主節點是有槽位的,因此呢需要將主節點的槽位分配給其他主節點,當槽位清空后,這個主機節點就可以下線了。

收縮集群前后對比圖

集群收縮操作步驟:

1. 執行 reshard 命令將需要下線的主節點進行槽位分散。

2. 有幾個主節點就需要執行幾次 reshard 命令,首先填寫要分出的槽位數,然后填寫分給誰,最后填寫從哪里分。

3. 當槽位分散完成后,要下線的主節點沒有任何數據時,將節點從集群中刪除。

集群信息

目前集群時四主四從共 8 個節點,我們需要將集群改為三主三從,收縮出兩個節點給其他程序使用。

2. 將 6390 主節點從集群中收縮 2.1. 計算需要分給每一個節點的槽位數

可以看到 6390 節點上有 4096 個槽位,刪除要下線的 6390 節點后,我們還有 3 個主節點,4096 除 3 得到 1365,分配槽位的時候給每個節點分配 1365 個槽位即可均勻。

2.2. 分配 1365 個槽位給 192.168.81.210 的 6380 節點

我們需要將 192.168.81.240 的 6390 節點分出 1365 個槽位給 192.168.81.210 的 6380 節點。

只需要把 What is the receiving node ID 填寫成 192.168.81.210 的 6380 節點 ID 即可,指的是分配出來的槽位要給誰。

然后 source node 填寫 192.168.81.240 的 6390 節點的 ID,這里指的是從哪個節點上分出 1365 個槽位,填寫 ID 后,回車后會提示還要從哪個節點上分配槽位,因為只有 6390 需要分出槽位,所以在這里填寫 done,表示只有這個一個節點分出 1365 個槽位給其他節點。

[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)? 1365 #分配出多少個槽位
What is the receiving node ID? 80e256579658eb256c5b710a3f82c439665794ba #將槽位分給那個節點
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:6bee155f136f40e28e1f60c8ddec3b158cd8f8e8 #從哪個節點分出槽位
Source node #2:done
Do you want to proceed with the proposed reshard plan (yes/no)? yes #輸入 yes 繼續 

下面是收縮節點的過程截圖。

數據遷移過程。

槽位分出遷移成功。

2.3. 分配 1365 個槽位給 192.168.81.220 的 6380 節點

[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)? 1365 #分配出多少個槽位
What is the receiving node ID? 10dc7f3f9a753140a8494adbbe5a13d0026451a1 #將槽位分給那個節點
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:6bee155f136f40e28e1f60c8ddec3b158cd8f8e8 #從哪個節點分出槽位
Source node #2:done
Do you want to proceed with the proposed reshard plan (yes/no)? yes #輸入 yes 繼續 

收縮過程截圖展示。

Redis Cluster 集群收縮主從節點的方法

2.4. 分配 1365 個槽位給 192.168.81.230 的 6380 節點

[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)? 1366 #分配出多少個槽位
What is the receiving node ID? a4381138fdc142f18881b7b6ca8ae5b0d02a3228 #將槽位分給那個節點
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:6bee155f136f40e28e1f60c8ddec3b158cd8f8e8 #從哪個節點分出槽位
Source node #2:done
Do you want to proceed with the proposed reshard plan (yes/no)? yes #輸入 yes 繼續 

收縮過程截圖展示。

Redis Cluster 集群收縮主從節點的方法
Redis Cluster 集群收縮主從節點的方法

當最后一個節點遷移完數據后,6390 主節點槽位數變為 0。

Redis Cluster 集群收縮主從節點的方法

2.5. 查看當前集群槽位分配

槽位及數據已經從 6390 即將下線的主機遷移完畢,可以看下當前集群三個主節點的槽位數。

可以非常清楚的看到,現在每個主節點的槽位數為 5461。

Redis Cluster 集群收縮主從節點的方法

如果覺得槽位重新分配后順序不太滿意,那么在執行一下 reshard,把其它節點的槽位都分給 192.168.81.210 的 6380 上,這樣一來,210 的 6380 擁有的槽位就是 0 -16383,然后在將 210 的槽位一個節點分給 5461 個,分完之后,各節點的順序就一致了。
Redis Cluster 集群收縮主從節點的方法

3. 驗證數據遷移過程是否導致數據異常

多開幾個窗口,一個執行數據槽位遷移,一個不斷創建 key,一個查看 key 的創建進度,一個查看 key 的數據。
持續測試,發現沒有任何數據異常,全部顯示 ok。
Redis Cluster 集群收縮主從節點的方法

4. 將下線的主節點從集群中刪除 4.1. 刪除節點

使用 redis-trib 刪除一個節點,如果這個節點存在復制關系,有節點在復制當前節點或者當前節點復制別的節點的數據,redis-trib 會自動處理復制關系,然后將節點刪除,節點刪除后會把對應的進程也停止運行。

刪除節點之前必須確保該節點沒有任何槽位和數據,否則會刪除失敗。

命令:./redis-trib.rb del-node 節點 IP: 端口 ID

[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb del-node 192.168.81.240:6390 6bee155f136f40e28e1f60c8ddec3b158cd8f8e8
  Removing node 6bee155f136f40e28e1f60c8ddec3b158cd8f8e8 from cluster 192.168.81.240:6390
  Sending CLUSTER FORGET messages to the cluster...
  SHUTDOWN the node.
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb del-node 192.168.81.240:6391 f6b9320dfbc929ad5a31cdb149360b0fd8de2e60
  Removing node f6b9320dfbc929ad5a31cdb149360b0fd8de2e60 from cluster 192.168.81.240:6391
  Sending CLUSTER FORGET messages to the cluster...
  SHUTDOWN the node.

Redis Cluster 集群收縮主從節點的方法

4.2. 調整主從交叉復制

刪掉 192.168.81.240 服務器上的兩個 redis 節點后,192.168.81.210 服務器上的 6380 就沒有了復制關系,我們需要把 192.168.81.230 的 6381 節點復制 192.168.81.210 的 6380 節點。

[root@redis-1 ~]# redis-cli -h 192.168.81.230 -p 6381
192.168.81.230:6381  CLUSTER REPLICATE 80e256579658eb256c5b710a3f82c439665794ba
OK

Redis Cluster 集群收縮主從節點的方法

4.3. 當節點存在數據無法刪除

[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb del-node 192.168.81.220:6380 10dc7f3f9a753140a8494adbbe5a13d0026451a1
  Removing node 10dc7f3f9a753140a8494adbbe5a13d0026451a1 from cluster 192.168.81.220:6380
[ERR] Node 192.168.81.220:6380 is not empty! Reshard data away and try again.

Redis Cluster 集群收縮主從節點的方法

5. 將下線主機清空集群信息

redis-trib 雖然能夠將節點在集群中刪除,但是無法將其的集群信息清空,如果集群信息還有保留,那么該接地那就無法加入其它集群。

Redis Cluster 集群收縮主從節點的方法

在下線的 redis 節點上使用 cluster reset 刪除集群信息即可。

192.168.81.240:6390  CLUSTER reset
OK

Redis Cluster 集群收縮主從節點的方法

以上就是關于“Redis Cluster 集群收縮主從節點的方法”這篇文章的內容,相信大家都有了一定的了解,希望丸趣 TV 小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計4964字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 东台市| 凤冈县| 夏邑县| 景东| 马边| 额尔古纳市| 仙游县| 甘谷县| 博爱县| 孙吴县| 娄烦县| 仲巴县| 金阳县| 抚远县| 陕西省| 光山县| 元氏县| 乐业县| 黎城县| 句容市| 那坡县| 太白县| 都兰县| 伊川县| 龙胜| 鲁山县| 苍山县| 拜城县| 志丹县| 互助| 三门县| 嘉祥县| 加查县| 锦屏县| 洪江市| 鄄城县| 内乡县| 鲁山县| 大连市| 堆龙德庆县| 古浪县|