輕鬆掌握組件啟動之Redis集群擴展秘籍:輕鬆擴容與縮容,釋放高性能潛能

来源:https://www.cnblogs.com/guoxiaoyu/archive/2023/10/15/17741637.html
-Advertisement-
Play Games

在這篇文章中,我們將揭示Redis集群的擴容和縮容操作,讓您的Redis集群發揮最佳性能和可伸縮性。通過增加主節點和從節點,並將它們無縫添加到集群中,您將能夠輕鬆擴展您的Redis集群以滿足不斷增長的需求。同時,我們還將探討如何進行縮容操作,即刪除節點,以優化集群資源的利用。無論您是初學者還是經驗豐... ...


擴展集群操作

擴容

在我們原始的集群基礎上,我們決定增加一臺主節點(8007)和一臺從節點(8008),這樣新增的節點將會在下圖中以虛線框的形式顯示在集群中。

image

1: 首先,在 /usr/local/redis-cluster 目錄下創建兩個文件夾,分別命名為 8007 和 8008。接下來,將 8001 文件夾下的 redis.conf 文件複製到 8007 和 8008 這兩個文件夾中。

 mkdir 8007 8008
 cd 8001
 cp redis.conf /usr/local/redis‐cluster/8007/
 cp redis.conf /usr/local/redis‐cluster/8008/

2: 為了修改 8007 文件夾下的 redis.conf 配置文件,可以按照以下步驟進行操作:

 vim /usr/local/redis‐cluster/8007/redis.conf
 # 修改如下內容:
 port:8007
 dir /usr/local/redis‐cluster/8007/
 cluster‐config‐file nodes‐8007.conf

 # 修改8008文件夾下的redis.conf配置文件
 vim /usr/local/redis‐cluster/8008/redis.conf
 # 修改內容如下:
 port:8008
 dir /usr/local/redis‐cluster/8008/
 cluster‐config‐file nodes‐8008.conf

3: 啟動 8007 和 8008 兩個服務並查看它們的狀態

/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8007/redis.conf
 
/usr/local/redis‐5.0.3/src/redis‐server /usr/local/redis‐cluster/8008/redis.conf
 
ps ‐el | grep redis

4: 查看redis集群的命令幫助

cd /usr/local/redis‐5.0.3

src/redis‐cli ‐‐cluster help

image

  • create:用於創建一個集群環境,需要指定主機和埠號,例如:create host1:port1 ... hostN:portN。
  • call:用於執行Redis命令,可以在集群中的任意一個節點上執行,例如:call
  • add-node:用於將新的節點添加到集群中,需要提供新節點的IP和埠號,以及集群中任意一個已經存在的節點的IP和埠號作為參數,例如:add-node <new_node_ip:port> <existing_node_ip:port>。
  • del-node:用於移除集群中的一個節點,需要指定要移除的節點的IP和埠號作為參數,例如:del-node <node_ip:port>。
  • reshard:用於重新分片,可以根據需要重新分配集群中的槽位。
  • check:用於檢查集群的狀態,可以獲取當前集群的信息和狀態。

5: 配置8007為集群主節點

使用add-node命令新增一個主節點8007(master)。新增節點的ip:port應該放在命令的前面,已知存在節點的ip:port應該放在命令的後面。當你在日誌的最後看到[OK] New node added correctly這個提示時,代表新節點加入成功。

/usr/local/redis‐5.0.3/src/redis‐cli ‐a xiaoyu ‐‐cluster add‐node 192.168.0.61:8007 192.168.0.61:8001

6: 查看集群狀態

192.168.0.61:8001> /usr/local/redis‐5.0.3/src/redis‐cli ‐a xiaoyu ‐c ‐h 192.168.0.61 ‐p 8001
192.168.0.61:8001> cluster nodes

請註意:當成功添加節點後,新增的節點將不包含任何數據,因為它尚未分配任何哈希槽。因此,我們需要手動為新節點分配哈希槽。

7: 我將使用redis-cli命令為8007分配hash槽,並找到集群中的任意一個主節點,然後對該主節點進行重新分片工作。

/usr/local/redis‐5.0.3/src/redis‐cli ‐a xiaoyu ‐‐cluster reshard 192.168.0.61:8001

輸出如下:

... ...
How many slots do you want to move (from 1 to 16384)? 600
(ps:需要多少個槽移動到新的節點上,自己設置,比如600個hash槽)
What is the receiving node ID? 2728a594a0498e98e4b83a537e19f9a0a3790f38
(ps:把這600個hash槽移動到哪個節點上去,需要指定節點id)
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
(ps:輸入all為從所有主節點(8001,8002,8003)中分別抽取相應的槽數指定到新節點中,抽取的總槽數為600個)
... ...
Do you want to proceed with the proposed reshard plan (yes/no)? yes
(ps:輸入yes確認開始執行分片任務)
... ...

8: 查看下最新的集群狀態

192.168.0.61:8001> /usr/local/redis‐5.0.3/src/redis‐cli ‐a xiaoyu ‐c ‐h 192.168.0.61 ‐p 8001
192.168.0.61:8001> cluster nodes

image

如上圖所示,我們可以得出結論:在集群中,我們已經成功為8007分配了hash槽,這意味著我們可以在8007上進行數據的讀寫操作了!因此,我們可以確認8007已經成功加入到集群中,並且作為一個主節點(Master)存在。

9: 配置8008為8007的從節點

添加從節點8008到集群中去並查看集群狀態

/usr/local/redis‐5.0.3/src/redis‐cli ‐a xiaoyu ‐‐cluster add‐node 192.168.0.61:8008 192.168.0.61:8001

image

如圖所示,還是一個master節點,沒有被分配任何的hash槽。

10: 為了將當前的8008節點作為從節點(slave)指向之前創建的8007主節點,我們需要執行replicate命令。首先,我們需要連接到8008節點的客戶端,然後使用集群命令來執行操作。

 /usr/local/redis‐5.0.3/src/redis‐cli ‐a xiaoyu ‐c ‐h 192.168.0.61 ‐p 8008
 192.168.0.61:8008> cluster replicate 2728a594a0498e98e4b83a537e19f9a0a3790f38 #後面這串id為8007的節點id

查看下目前的集群狀態,8008節點已成功添加為8007節點的從節點了

image

縮容

1: 刪除8008從節點

請使用del-node命令來刪除節點8008。指定節點的IP地址為[IP地址],埠為[埠號],節點ID為[8008]。

/usr/local/redis‐5.0.3/src/redis‐cli ‐a xiaoyu ‐‐cluster del‐node 192.168.0.61:8008 a1cfe35722d151cf70585cee21275565393c0956

再次使用cluster nodes命令查看集群狀態。根據下圖所示,可以看到已成功移除節點8008,而且該節點的redis服務也已經停止。

image

2: 刪除8007主節點

最後,我們嘗試刪除之前加入的主節點8007。這個步驟相對比較麻煩一些,因為主節點裡面分配了hash槽。因此,我們必須先將8007里的hash槽放入其他可用主節點中,然後再進行移除節點操作,以避免數據丟失問題。目前只能將master的數據遷移到一個節點上,暫時無法實現平均分配功能。執行命令如下:

/usr/local/redis‐5.0.3/src/redis‐cli ‐a xiaoyu ‐‐cluster reshard 192.168.0.61:8007

輸出如下:

... ...
How many slots do you want to move (from 1 to 16384)? 600
What is the receiving node ID? dfca1388f124dec92f394a7cc85cf98cfa02f86f
(ps:這裡是需要把數據移動到哪?8001的主節點id)
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:2728a594a0498e98e4b83a537e19f9a0a3790f38
(ps:這裡是需要數據源,也就是我們的8007節點id)
Source node 2:done
(ps:這裡直接輸入done 開始生成遷移計劃)
... ...
Do you want to proceed with the proposed reshard plan (yes/no)? Yes
(ps:這裡輸入yes開始遷移)

至此,我們已經成功將主節點8007的數據遷移到8001上。現在,讓我們來查看一下集群的當前狀態,如下圖所示。你會註意到,8007下麵已經沒有任何hash槽了,這證明遷移已經成功完成!

image

3: 最後,我們可以直接使用del-node命令刪除8007主節點。這樣就可以完全移除該節點了。

/usr/local/redis‐5.0.3/src/redis‐cli ‐a xiaoyu ‐‐cluster del‐node 192.168.0.61:8007 2728a594a0498e98e4b83a537e19f9a0a3790f38

現在,讓我們來查看一下集群的當前狀態,你會發現一切都已經還原到最初的狀態了!這代表我們的工作取得了巨大的成功,大功告成!

image

總結

通過本文,我們學習瞭如何擴展和縮容Redis集群。擴容操作包括增加新的主節點和從節點,並將它們添加到集群中。我們首先創建了新的文件夾,並將原始節點的配置文件複製到新的文件夾中。然後,我們修改了新節點的配置文件,指定新的埠和目錄。接下來,我們啟動了新的節點,並使用redis-cli命令添加新的主節點和從節點到集群中。為了確保新節點成功加入集群,我們手動為它們分配了hash槽。最後,我們查看了集群狀態,確保所有操作都成功完成。

縮容操作涉及刪除節點。我們首先使用del-node命令從集群中刪除從節點,並查看集群狀態以確認節點已成功刪除。然後,我們嘗試刪除主節點,這需要先將其hash槽遷移到其他節點上,然後再刪除主節點。我們使用reshard命令將主節點的hash槽遷移到其他主節點上,並查看集群狀態以確認遷移成功。最後,我們使用del-node命令刪除主節點,並再次查看集群狀態以確認節點已成功刪除。

通過學習擴展和縮容操作,我們可以更好地管理和優化Redis集群,提高其性能和可伸縮性。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 代碼地址: https://gitee.com/Aes_yt/middleware-demo/tree/master/rabbitmq 安裝RabbitMq 1. docker拉取鏡像 docker pull rabbitmq:3.9.29-management 2. 創建rabbitmq容器 do ...
  • 自從開始搞YouTube中文配音以來,我們一直是7*24小時,夜以繼日的在批量處理一些優質的學習資源,一方面是翻譯,另一方面是配音。這樣用戶在打開的時候,就能獲得經過我們優化的翻譯和配音了。 這次我們剛剛處理完一個油管上非常火爆的​IT類學習頻道:Edureka。 該頻道內全是IT行業的免費學習視頻 ...
  • math庫常用函數+產生隨機數總結 1.對x開平方 double sqrt(x);//返回值為double類型,輸入的x類型隨意,只要是數的類型 2.求常數e的x次方 double exp(x);//返回值為double類型,輸入的x類型隨意,只要是數的類型 3.求x的y次方 double pow( ...
  • TLS雙向認證的基本原理及示意流程圖,幫助更好的理解TLS的加密功能,及安全能力,此外還給出了部分源碼的實現及Token實現在的方案及能力 ...
  • 在我們WPF應用端的時候,和WInform開發或者Vue前端開發一樣,有時候也需要對內容進行轉義處理,如把一些0,1數值轉換為具體含義的文本信息,或者把一些布爾變數轉換為是否等,都是常見的轉換處理,本篇隨筆介紹在WPF應用端對內容使用Converter類實現內容的轉義處理的操作。 ...
  • 目錄構建riscv64-unknown-linux-musl編譯工具鏈直接下載官方工具鏈嘗試自己編譯T-head Gcc下載編譯binutils編譯交叉gcc編譯musl手動合成fip.bin和boot.sd編譯u-boot生成cvi_board_memmap.h,cvipart.h和imgs.h繼 ...
  • 前面介紹了 XN297LBW, 順帶再介紹一個非常類似的型號 XL2400, 生產商是深圳芯嶺技術, 同時市面上還有一個 WL2400, 從數據手冊看和 XL2400 是一模一樣的. XL2400 和XN297LBW 一樣都是 SOP8 封裝的2.4GHz頻段無線收發晶元, 但是零售價格更便宜, 在... ...
  • 本 PostgreSQL 教程可幫助您快速瞭解 PostgreSQL。您將通過許多實際示例快速掌握 PostgreSQL,並將這些知識應用於使用 PostgreSQL 開發應用程式。 如果你是 … 尋求快速學習 PostgreSQL。 使用 PostgreSQL 作為後端資料庫管理系統開發應用程式。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...