更新時間:2022-02-15 09:53:29 來源:動力節點 瀏覽1178次
要創建 redis 的分布式環境,您有 2 個選項,如下所示 -
Redis Sentinel — 當速度不是您最關心的問題時使用 sentinel,這使其成為具有高可用性問題的小型實施的絕佳選擇。
Redis 集群——它提供高可用性和集群解決方案。考慮到訪問您的數據,它是確保高可用性同時保持快速訪問速度的絕佳選擇
底線 — 如果您需要自動故障轉移解決方案而不使用完整的集群解決方案,請使用 sentinel。要使用分片獲得完整的集群集群解決方案,請使用集群。
對于這個故事,我將創建一個完整的集群解決方案,因此我將采用集群方式。
每個 Redis 集群節點都需要打開兩個 TCP 連接。用于服務客戶端的普通 Redis TCP 端口,例如 6379,加上數據端口加上 10000 得到的端口,即 16379。請確保在防火墻中打開這兩個端口,否則 Redis 集群節點將無法通信。
Redis Cluster 不使用一致性散列,而是使用不同形式的分片,其中每個鍵在概念上都是我們所謂的散列槽的一部分。Redis Cluster 中有16384個哈希槽。
Redis 集群中的每個節點都負責哈希槽的子集,例如,您可能有一個具有 3 個節點的集群,其中:
節點 A 包含從 0 到 5500 的哈希槽。
節點 B 包含從 5501 到 11000 的哈希槽。
節點 C 包含從 11001 到 16383 的哈希槽。
Redis 集群使用主從配置來支持分布式環境。在本例中,我們將創建 3 個主節點和 3 個從節點。每個主節點至少有 1 個從節點。
如果您想以最少的配置立即啟動并運行集群,請使用redis 包中默認提供的“ create-cluster”腳本。有很多關于如何使用 `create-cluster` 腳本創建集群的教程,所以我不打算介紹。相反,我將展示如何手動執行此操作,這為您提供了極大的自由度來調整集群配置參數。
安裝
由于我們正在模擬一個 6 節點集群(3 個主節點和 3 個從節點),我們將創建 6 個文件夾,即 6001、6002、6003、6004、6005、6006。這里的文件夾名稱代表每個實例將運行的端口號。在每個節點上,即在每個文件夾中,通過執行以下命令下載并制作 redis 包 -
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz $ tar xzf redis-5.0.5.tar.gz $ cd redis-5.0.5 $ make
您也可以簡單地下載一個文件夾中的包并將其復制到其他文件夾。這將為您節省一些下載時間和帶寬。
現在編譯的二進制文件在src目錄中可用。
現在你有了 redis,你可以在目錄中看到一個 `redis.conf` 文件src。這是您應該在其中定義所有集群配置參數的配置文件。以下是您應該在 `redis.conf` 中開始的最小配置示例 -
端口 6001 cluster-enabled 是cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly 是
如您所見,啟用集群模式的只是cluster-enabled指令。每個實例還包含存儲此節點配置的文件的路徑,默認情況下為nodes.conf. 該文件永遠不會被人類觸及;它只是由 Redis 集群實例在啟動時生成,并在每次需要時更新。請注意,按預期工作的最小集群需要包含至少三個主節點。
在每個目錄中創建一個redis.conf文件,從 6001 到 6006。作為配置文件的模板,只需使用上面的小示例,但請確保6001根據目錄名稱將端口號替換為正確的端口號。
最后在您最喜歡的終端應用程序中打開 6 個終端選項卡。像這樣啟動每個實例,每個選項卡一個:
./src/redis-server ./redis.conf
以下是啟動后其中一個節點的屏幕截圖。您可以看到從每個實例的日志中可以看到,由于不nodes.conf存在文件,因此每個節點都為自己分配了一個新 ID。
此特定實例將永遠使用此 ID,以便實例在集群上下文中具有唯一名稱。每個節點都使用此 ID 記住其他所有節點,而不是通過 IP 或端口。IP 地址和端口可能會改變,但唯一的節點標識符在節點的整個生命周期內都不會改變。我們將此標識符簡稱為Node ID。
現在打開一個新的終端窗口并在src目錄中執行以下命令。
./redis-cli --cluster create 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 127.0.0.1:6006 --cluster-replicas 1
該選項--cluster-replicas 1意味著我們希望為每個創建的主服務器創建一個從服務器。其他參數是您要用于創建新集群的實例的地址列表。
顯然,符合我們要求的唯一設置是創建一個具有 3 個主節點和 3 個從節點的集群。
您可以在以下屏幕截圖中看到它說[OK] All 16384 slots covered
在上面的屏幕截圖中,以下行的意思正是他們所說的。
將副本 127.0.0.1:6005 添加到 127.0.0.1:6001
將副本 127.0.0.1:6006 添加到 127.0.0.1:6002
將副本 127.0.0.1:6004 添加到 127.0.0.1:6003
運行在端口 6001、6002 和 6003 上的節點是主節點,運行在端口 6005、6006 和 6004 上的節點分別是這些主節點的從節點。
集群現在已啟動并運行。您可以通過執行命令來測試它,如下面的屏幕截圖所示
以下命令表明我在集群模式下使用 redis-cli 并連接到在端口 6001 上運行的節點。
./src/redis-cli -c -p 6001
之后,您可以看到鍵值對存儲在節點中,具體取決于它們保存到的哈希槽。它還表明我可以從任何節點訪問任何密鑰。在上面的屏幕截圖中,密鑰 foo 保存在節點 6003 中,但即使我在節點 6002 上,我也能夠檢索到它。
您的 redis 集群現在已啟動并完全正常運行。如果您想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容全面,從入門到精通,適合0基礎的小伙伴學習,希望對大家能夠有所幫助哦。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習