Redis實戰(zhàn)(13) - 手把手搭建Redis集群環(huán)境 (3主3從)

作者: 修羅debug
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 by-sa 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。



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

內(nèi)容:Redis集群的搭建,可以說是保證Redis對外提供服務(wù)“可靠性、高可用性”的保證,故而還是有必要學(xué)習(xí)學(xué)習(xí)如何搭建集群環(huán)境以及如何在項目中以集群的方式連接、使用Redis服務(wù)的!

在前文我們花了十幾篇文章的篇幅介紹了Redis在Spring Boot2.0搭建的微服務(wù)項目下的應(yīng)用,更多的是偏向于“開發(fā)層面”的技術(shù)與知識點的掌握,本文我們將介紹跟Redis相關(guān)的“運維層面”的技術(shù)與知識,即如何在Windows本地搭建“集群開發(fā)環(huán)境”!

一、準備工具

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

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

B. Ruby Installer v2.3.3 x64(Windows 版,下載地址:https://rubyinstaller.org/downloads/

二、搭建集群環(huán)境

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


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


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

主(Master

從(Slave

備注

7100             

7101

0結(jié)尾的為主,其它數(shù)字結(jié)尾的為從

7200             

7201

0結(jié)尾的為主,其它數(shù)字結(jié)尾的為從

7300             

7301

0結(jié)尾的為主,其它數(shù)字結(jié)尾的為從

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


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


其中,redis.7100.conf 配置文件的內(nèi)容為:

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

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

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


當然啦,有一些機靈的小伙伴會發(fā)現(xiàn)這6個配置文件的內(nèi)容中有一些相同的配置項!沒錯,對于這些配置項其實是可以將其抽取出來放在一共用的配置文件中的,然后再在每個子文件夾下的配置文件的內(nèi)容末加入include指令,如“include redis.cluster.conf”等等,在這里就不演示了,各位小伙伴可以自行嘗試!

(4)緊接著,我們打開DOS命令行界面,進入Redis的安裝目錄,準備安裝并啟動這6個節(jié)點對應(yīng)的Redis服務(wù),下面兩行命令為“安裝與卸載Redis節(jié)點服務(wù)”:

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

下面,我們對7100端口對應(yīng)的Redis節(jié)點服務(wù)進行安裝與啟動,如下圖所示:


同樣的道理,我們安裝并啟動剩下的端口對應(yīng)的Redis節(jié)點服務(wù),如下圖所示:


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


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


至此,6個節(jié)點的Redis服務(wù)已經(jīng)全部安裝并且啟動完畢!

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

gem install redis

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


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


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


之后,我們?nèi)匀辉贒OS命令行界面進入Redis的安裝目錄,并輸入以下命令實現(xiàn)Redis的主從主從部署(記?。褐髟谇埃瑥脑诤螅?/span>

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

回車后,輸入yes,再次回車,會看到如下圖的結(jié)果:


在上圖中出現(xiàn)的那一大串東西,如 2ffe5c338a97c4a98f88359368ce3f7784d45f9c ,這個正是該Redis節(jié)點服務(wù)的ID,在調(diào)整集群時,經(jīng)常會用到!

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


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

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

redis-trib.rb del-node <ip>:<port> 'node_id'   //單引號內(nèi)放置節(jié)點id

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

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

#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

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

好了,本篇文章我們就介紹到這里了,建議各位小伙伴一定要照著文章提供的樣例代碼擼一擼,只有擼過才能知道這玩意是咋用的,否則就成了“空談?wù)摺保?/span>

對Redis相關(guān)技術(shù)棧以及實際應(yīng)用場景實戰(zhàn)感興趣的小伙伴可以前往Debug搭建的技術(shù)社區(qū)的課程中心進行學(xué)習(xí)觀看:https://www.fightjava.com/web/index/course/detail/12 !

其他相關(guān)的技術(shù),感興趣的小伙伴可以關(guān)注底部Debug的技術(shù)公眾號,或者加Debug的微信,拉你進“微信版”的真正技術(shù)交流群!一起學(xué)習(xí)、共同成長!

補充:

1、本文涉及到的相關(guān)的源代碼可以到此地址,check出來進行查看學(xué)習(xí):

https://gitee.com/steadyjack/SpringBootRedis

2、目前Debug已將本文所涉及的內(nèi)容整理錄制成視頻教程,感興趣的小伙伴可以前往觀看學(xué)習(xí):https://www.fightjava.com/web/index/course/detail/12

3、關(guān)注一下Debug的技術(shù)微信公眾號,最新的技術(shù)文章、課程以及技術(shù)專欄將會第一時間在公眾號發(fā)布哦!