Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

在微服務、分佈式系統架構盛行的時代,我們幾乎闊以在項目中見到緩存中間件Redis的身影,作為一款具有高性能、高可用、擴展性強的中間件,Redis可以說是出盡了風頭!本文我們將介紹如何在本地Windows系統下搭建Redis的集群環境(採用Master-Slave的模式,即3主3從),並在文末提供如何基於Spring Boot2.0搭建的項目以集群的方式連接至Redis服務,進一步多掌握一項運維層面的硬技能!

Redis集群的搭建,可以說是保證Redis對外提供服務"可靠性、高可用性"的保證,故而還是有必要學習學習如何搭建集群環境以及如何在項目中以集群的方式連接、使用Redis服務的!

在前文我們花了十幾篇文章的篇幅介紹了Redis在Spring Boot2.0搭建的微服務項目下的應用,更多的是偏向於"開發層面"的技術與知識點的掌握,本文我們將介紹跟Redis相關的"運維層面"的技術與知識,即如何在Windows本地搭建"集群開發環境"!

一、準備工具

A.Windows 64位下的Redis服務~綠色簡化安裝版,如果是單機的話,雙擊redis-server.exe即可使用!

(下載地址:https://pan.baidu.com/s/1mHs91Jp5-TR-etNryIumyA 提取碼:a67m)

B. Ruby Installer v2.3.3 x64(Windows 版,下載地址: )


二、搭建集群環境

(1)將下載成功的Redis安裝包直接找個磁盤目錄解壓下來即可(文件目錄不要含有中文字符),在這裡我是將其解壓到D盤根目錄,如下圖所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

同時安裝好Ruby,在這裡我直接將其安裝到默認的安裝目錄即可,即C:\Ruby23-x64,如下圖所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

(2)安裝完成之後,接下來我們進入Redis的集群部署環節,當然啦,在開始之前,有必要交代一下:Redis集群搭建的節點數量至少要6個,在這裡我們就以6個節點為例,其中6個節點的角色為:3主3從,即3 Master ~ 3 Slave,如下所示:


Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

在Redis的安裝目錄,即D:\Redis 下新建一個cluster文件夾,然後在其中新建6個子文件夾,以端口進行命名,如下所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

接下來,在每個子文件夾內,新建一個後綴名為conf的配置文件,以端口7100為例,新建的文件為:redis.7100.conf 如下圖所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

其中,redis.7100.conf 配置文件的內容為:

<code>port 7100

appendonly yes
appendfilename "appendonly.7100.aof"

maxmemory 200mb
maxmemory-policy allkeys-lru

cluster-enabled yes
cluster-config-file nodes-7100.conf
cluster-node-timeout 15000
cluster-slave-validity-factor 10
cluster-migration-barrier 1
cluster-require-full-coverage yes/<code>

這些都是Redis最為基本的配置,主要是端口號、持久化aof配置、最大內存配置以及達到最大內存時的Key淘汰策略等(相關參數的含義自行百度即可!)

(3)其他子文件夾如7101、7200、7201、7300和7301則只需要仿照7100文件夾進行配置,並將 xx.conf 配置文件中的內容改為對應的端口即可!最終得到的6個配置文件如下圖所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

當然啦,有一些機靈的小夥伴會發現這6個配置文件的內容中有一些相同的配置項!沒錯,對於這些配置項其實是可以將其抽取出來放在一共用的配置文件中的,然後再在每個子文件夾下的配置文件的內容末加入include指令,如"include redis.cluster.conf"等等,在這裡就不演示了,各位小夥伴可以自行嘗試!

(4)緊接著,我們打開DOS命令行界面,進入Redis的安裝目錄,準備安裝並啟動這6個節點對應的Redis服務,下面兩行命令為"安裝與卸載Redis節點服務":

<code>//安裝命令
redis-server  --service-install cluster/7100/redis.7100.conf  --service-name  redis7100
// 卸載命令
redis-server  --service-uninstall  --service-name  redis7100/<code>

下面,我們對7100端口對應的Redis節點服務進行安裝與啟動,如下圖所示:


Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

同樣的道理,我們安裝並啟動剩下的端口對應的Redis節點服務,如下圖所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

按住ctrl+r,輸入 services.msc並回車,可以看到安裝並啟動成功的各個Redis節點服務,如下圖所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

最終我們可以發現,在安裝Redis的根目錄下新增了幾個節點配置文件與持久化相關的文件,如下圖所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

至此,6個節點的Redis服務已經全部安裝並且啟動完畢!

(5)接下來,我們需要藉助Ruby命令(gem)安裝Redis的相關組件。開啟另一個DOS命令行界面,然後cd到Ruby的安裝目錄,執行如下的命令:

<code>gem install redis/<code> 

回車之後,需要稍等一會兒,如果可以見到如下圖的返回結果,則表示安裝成功:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

訪問https://github.com/microsoftarchive/redis/tree/3.2/src ,下載redis-trib.rb,我們將基於此創建Redis的集群,如下圖所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

下載成功後,將其放進Redis的安裝目錄下,如下圖所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

之後,我們仍然在DOS命令行界面進入Redis的安裝目錄,並輸入以下命令實現Redis的主從主從部署(記住:主在前,從在後):

<code>redis-trib.rb create --replicas 1 127.0.0.1:7100 127.0.0.1:7200 127.0.0.1:7300 127.0.0.1:7101 127.0.0.1:7201 127.0.0.1:7301/<code>

回車後,輸入yes,再次回車,會看到如下圖的結果:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

在上圖中出現的那一大串東西,如 2ffe5c338a97c4a98f88359368ce3f7784d45f9c ,這個正是該Redis節點服務的ID,在調整集群時,經常會用到!


(6)之後,我們輸入 redis-cli -c -h 127.0.0.1 -p 7100 ,連接集群中的某個Redis節點服務,然後再輸入cluster nodes ,即可看到目前已經搭建成功的Redis集群的情況,如下圖所示:

Redis實戰(13)-手把手搭建Redis集群環境 (3主3從)

當然啦,你也可以利用RedisDesktopManager登錄進去查看其集群狀況!下面是集群特有的命令,供諸位作參考:

<code>cluster info     //集群總攬
cluster nodes   //列出集群當前已知的所有節點(node),以及這些節點的相關信息

cluster meet        //將指定的節點(ip:port)添加到集群中,讓它成為集群的一員
cluster forget       //從集群中移除 node_id 節點
cluster replicate    //將當前節點設置為 node_id 節點的從節點
cluster saveconfig           //將節點的配置文件保存到硬盤裡面

cluster addslots  [slot ...]   //將一個或多個槽(slot)指派(assign)給當前節點
cluster delslots  [slot ...]    //移除當前節點的一個或多個槽
cluster flushslots   //移除當前節點的所有槽(刪除集群內的最後一個主節點時,可用到)
cluster setslot  node    //將槽 slot 指派給 node_id 節點。如果槽已經指派給另一個節點,那麼先讓另一個節點刪除該槽,再進行指派
cluster setslot  migrating    //將本節點的槽 slot 遷移到 node_id 節點中去
cluster setslot  importing    //從 node_id 節點中導入槽 slot 到本節點來
cluster setslot  stable   //取消對槽 slot 的導入(import)或者遷移(migrate)

cluster keyslot  //計算鍵 key 應該被放置在哪個槽上
cluster countkeysinslot  //返回槽 slot 目前包含的鍵值對數量
cluster getkeysinslot   //返回 count 個 slot 槽中的鍵/<code>

如果想要移除某個服務節點(從節點),可以採用如下命令即可:

<code>redis-trib.rb del-node : 'node_id'   //單引號內放置節點id/<code>

(如果是移除主節點Master,如果主節點上有從節點,則要將從節點刪除或轉移到其它主節點上去,該主節點才能被刪除;如果主節點上有槽(Slot),則要將槽刪除或轉移到其它主節點上去,該主節點才能被刪除)


(7)最後,我們基於前面篇章搭建的Spring Boot2.0整合Redis的項目中,採用集群配置的方式連接到"Redis服務"!事實上,我們只需要調整application.properties的配置即可,其他的一律不需要動,調整後的Redis配置如下所示:

<code>#redis 單機配置
#spring.redis.host=127.0.0.1
#spring.redis.port=6379
#spring.redis.password=

spring.redis.jedis.pool.min-idle=100
spring.redis.jedis.pool.max-idle=300
spring.redis.jedis.pool.max-active=500

#集群配置
spring.redis.cluster.nodes=127.0.0.1:7100,127.0.0.1:7200,127.0.0.1:7300,127.0.0.1:7101,127.0.0.1:7201,127.0.0.1:7301/<code>

最終將項目啟動起來,如果期間沒有任何問題,你再用之前文章的案例簡單測試一下(或者執行一下現有的Java單元測試亦可),如果沒有任何異常並且可以得到返回結果,那麼就足以說明我們搭建的Redis集群環境沒啥問題!

好了,本篇文章我們就介紹到這裡了,建議各位小夥伴一定要照著文章提供的樣例代碼擼一擼,只有擼過才能知道這玩意是咋用的,否則就成了"空談者"!

對Redis相關技術棧以及實際應用場景實戰感興趣的小夥伴可以前往Debug搭建的技術社區的課程中心進行學習觀看: !

其他相關的技術,感興趣的小夥伴可以私信Debug!


分享到:


相關文章: