更新時(shí)間:2022-02-15 09:53:29 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1472次
要?jiǎng)?chuàng)建 redis 的分布式環(huán)境,您有 2 個(gè)選項(xiàng),如下所示 -
Redis Sentinel — 當(dāng)速度不是您最關(guān)心的問題時(shí)使用 sentinel,這使其成為具有高可用性問題的小型實(shí)施的絕佳選擇。
Redis 集群——它提供高可用性和集群解決方案??紤]到訪問您的數(shù)據(jù),它是確保高可用性同時(shí)保持快速訪問速度的絕佳選擇
底線 — 如果您需要自動(dòng)故障轉(zhuǎn)移解決方案而不使用完整的集群解決方案,請使用 sentinel。要使用分片獲得完整的集群集群解決方案,請使用集群。
對于這個(gè)故事,我將創(chuàng)建一個(gè)完整的集群解決方案,因此我將采用集群方式。
每個(gè) Redis 集群節(jié)點(diǎn)都需要打開兩個(gè) TCP 連接。用于服務(wù)客戶端的普通 Redis TCP 端口,例如 6379,加上數(shù)據(jù)端口加上 10000 得到的端口,即 16379。請確保在防火墻中打開這兩個(gè)端口,否則 Redis 集群節(jié)點(diǎn)將無法通信。
Redis Cluster 不使用一致性散列,而是使用不同形式的分片,其中每個(gè)鍵在概念上都是我們所謂的散列槽的一部分。Redis Cluster 中有16384個(gè)哈希槽。
Redis 集群中的每個(gè)節(jié)點(diǎn)都負(fù)責(zé)哈希槽的子集,例如,您可能有一個(gè)具有 3 個(gè)節(jié)點(diǎn)的集群,其中:
節(jié)點(diǎn) A 包含從 0 到 5500 的哈希槽。
節(jié)點(diǎn) B 包含從 5501 到 11000 的哈希槽。
節(jié)點(diǎn) C 包含從 11001 到 16383 的哈希槽。
Redis 集群使用主從配置來支持分布式環(huán)境。在本例中,我們將創(chuàng)建 3 個(gè)主節(jié)點(diǎn)和 3 個(gè)從節(jié)點(diǎn)。每個(gè)主節(jié)點(diǎn)至少有 1 個(gè)從節(jié)點(diǎn)。
如果您想以最少的配置立即啟動(dòng)并運(yùn)行集群,請使用redis 包中默認(rèn)提供的“ create-cluster”腳本。有很多關(guān)于如何使用 `create-cluster` 腳本創(chuàng)建集群的教程,所以我不打算介紹。相反,我將展示如何手動(dòng)執(zhí)行此操作,這為您提供了極大的自由度來調(diào)整集群配置參數(shù)。
安裝
由于我們正在模擬一個(gè) 6 節(jié)點(diǎn)集群(3 個(gè)主節(jié)點(diǎn)和 3 個(gè)從節(jié)點(diǎn)),我們將創(chuàng)建 6 個(gè)文件夾,即 6001、6002、6003、6004、6005、6006。這里的文件夾名稱代表每個(gè)實(shí)例將運(yùn)行的端口號。在每個(gè)節(jié)點(diǎn)上,即在每個(gè)文件夾中,通過執(zhí)行以下命令下載并制作 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
您也可以簡單地下載一個(gè)文件夾中的包并將其復(fù)制到其他文件夾。這將為您節(jié)省一些下載時(shí)間和帶寬。
現(xiàn)在編譯的二進(jìn)制文件在src目錄中可用。
現(xiàn)在你有了 redis,你可以在目錄中看到一個(gè) `redis.conf` 文件src。這是您應(yīng)該在其中定義所有集群配置參數(shù)的配置文件。以下是您應(yīng)該在 `redis.conf` 中開始的最小配置示例 -
端口 6001 cluster-enabled 是cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly 是
如您所見,啟用集群模式的只是cluster-enabled指令。每個(gè)實(shí)例還包含存儲(chǔ)此節(jié)點(diǎn)配置的文件的路徑,默認(rèn)情況下為nodes.conf. 該文件永遠(yuǎn)不會(huì)被人類觸及;它只是由 Redis 集群實(shí)例在啟動(dòng)時(shí)生成,并在每次需要時(shí)更新。請注意,按預(yù)期工作的最小集群需要包含至少三個(gè)主節(jié)點(diǎn)。
在每個(gè)目錄中創(chuàng)建一個(gè)redis.conf文件,從 6001 到 6006。作為配置文件的模板,只需使用上面的小示例,但請確保6001根據(jù)目錄名稱將端口號替換為正確的端口號。
最后在您最喜歡的終端應(yīng)用程序中打開 6 個(gè)終端選項(xiàng)卡。像這樣啟動(dòng)每個(gè)實(shí)例,每個(gè)選項(xiàng)卡一個(gè):
./src/redis-server ./redis.conf
以下是啟動(dòng)后其中一個(gè)節(jié)點(diǎn)的屏幕截圖。您可以看到從每個(gè)實(shí)例的日志中可以看到,由于不nodes.conf存在文件,因此每個(gè)節(jié)點(diǎn)都為自己分配了一個(gè)新 ID。

此特定實(shí)例將永遠(yuǎn)使用此 ID,以便實(shí)例在集群上下文中具有唯一名稱。每個(gè)節(jié)點(diǎn)都使用此 ID 記住其他所有節(jié)點(diǎn),而不是通過 IP 或端口。IP 地址和端口可能會(huì)改變,但唯一的節(jié)點(diǎn)標(biāo)識符在節(jié)點(diǎn)的整個(gè)生命周期內(nèi)都不會(huì)改變。我們將此標(biāo)識符簡稱為Node ID。
現(xiàn)在打開一個(gè)新的終端窗口并在src目錄中執(zhí)行以下命令。
./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
該選項(xiàng)--cluster-replicas 1意味著我們希望為每個(gè)創(chuàng)建的主服務(wù)器創(chuàng)建一個(gè)從服務(wù)器。其他參數(shù)是您要用于創(chuàng)建新集群的實(shí)例的地址列表。
顯然,符合我們要求的唯一設(shè)置是創(chuàng)建一個(gè)具有 3 個(gè)主節(jié)點(diǎn)和 3 個(gè)從節(jié)點(diǎn)的集群。
您可以在以下屏幕截圖中看到它說[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
運(yùn)行在端口 6001、6002 和 6003 上的節(jié)點(diǎn)是主節(jié)點(diǎn),運(yùn)行在端口 6005、6006 和 6004 上的節(jié)點(diǎn)分別是這些主節(jié)點(diǎn)的從節(jié)點(diǎn)。
集群現(xiàn)在已啟動(dòng)并運(yùn)行。您可以通過執(zhí)行命令來測試它,如下面的屏幕截圖所示

以下命令表明我在集群模式下使用 redis-cli 并連接到在端口 6001 上運(yùn)行的節(jié)點(diǎn)。
./src/redis-cli -c -p 6001
之后,您可以看到鍵值對存儲(chǔ)在節(jié)點(diǎn)中,具體取決于它們保存到的哈希槽。它還表明我可以從任何節(jié)點(diǎn)訪問任何密鑰。在上面的屏幕截圖中,密鑰 foo 保存在節(jié)點(diǎn) 6003 中,但即使我在節(jié)點(diǎn) 6002 上,我也能夠檢索到它。
您的 redis 集群現(xiàn)在已啟動(dòng)并完全正常運(yùn)行。如果您想了解更多相關(guān)知識,可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容全面,從入門到精通,適合0基礎(chǔ)的小伙伴學(xué)習(xí),希望對大家能夠有所幫助哦。

初級 202925

初級 203221

初級 202629

初級 203743