Redis實(shí)戰(zhàn)(13) - 手把手搭建Redis集群環(huán)境 (3主3從)
作者:
修羅debug
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 by-sa 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接和本聲明。
摘要:在微服務(wù)、分布式系統(tǒng)架構(gòu)盛行的時(shí)代,我們幾乎闊以在項(xiàng)目中見到緩存中間件Redis的身影,作為一款具有高性能、高可用、擴(kuò)展性強(qiáng)的中間件,Redis可以說是出盡了風(fēng)頭!本文我們將介紹如何在本地Windows系統(tǒng)下搭建Redis的集群環(huán)境(采用Master-Slave的模式,即3主3從),并在文末提供如何基于Spring Boot2.0搭建的項(xiàng)目以集群的方式連接至Redis服務(wù),進(jìn)一步多掌握一項(xiàng)運(yùn)維層面的硬技能!
內(nèi)容:Redis集群的搭建,可以說是保證Redis對(duì)外提供服務(wù)“可靠性、高可用性”的保證,故而還是有必要學(xué)習(xí)學(xué)習(xí)如何搭建集群環(huán)境以及如何在項(xiàng)目中以集群的方式連接、使用Redis服務(wù)的!
在前文我們花了十幾篇文章的篇幅介紹了Redis在Spring Boot2.0搭建的微服務(wù)項(xiàng)目下的應(yīng)用,更多的是偏向于“開發(fā)層面”的技術(shù)與知識(shí)點(diǎn)的掌握,本文我們將介紹跟Redis相關(guān)的“運(yùn)維層面”的技術(shù)與知識(shí),即如何在Windows本地搭建“集群開發(fā)環(huán)境”!
一、準(zhǔn)備工具
A.Windows 64位下的Redis服務(wù)~綠色簡(jiǎn)化安裝版,如果是單機(jī)的話,雙擊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安裝包直接找個(gè)磁盤目錄解壓下來即可(文件目錄不要含有中文字符),在這里我是將其解壓到D盤根目錄,如下圖所示:
同時(shí)安裝好Ruby,在這里我直接將其安裝到默認(rèn)的安裝目錄即可,即C:\Ruby23-x64,如下圖所示:
(2)安裝完成之后,接下來我們進(jìn)入Redis的集群部署環(huán)節(jié),當(dāng)然啦,在開始之前,有必要交代一下:Redis集群搭建的節(jié)點(diǎn)數(shù)量至少要6個(gè),在這里我們就以6個(gè)節(jié)點(diǎn)為例,其中6個(gè)節(jié)點(diǎn)的角色為: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 下新建一個(gè)cluster文件夾,然后在其中新建6個(gè)子文件夾,以端口進(jìn)行命名,如下所示:
接下來,在每個(gè)子文件夾內(nèi),新建一個(gè)后綴名為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最為基本的配置,主要是端口號(hào)、持久化aof配置、最大內(nèi)存配置以及達(dá)到最大內(nèi)存時(shí)的Key淘汰策略等(相關(guān)參數(shù)的含義自行百度即可?。?/span>
(3)其他子文件夾如7101、7200、7201、7300和7301則只需要仿照7100文件夾進(jìn)行配置,并將 xx.conf 配置文件中的內(nèi)容改為對(duì)應(yīng)的端口即可!最終得到的6個(gè)配置文件如下圖所示:
當(dāng)然啦,有一些機(jī)靈的小伙伴會(huì)發(fā)現(xiàn)這6個(gè)配置文件的內(nèi)容中有一些相同的配置項(xiàng)!沒錯(cuò),對(duì)于這些配置項(xiàng)其實(shí)是可以將其抽取出來放在一共用的配置文件中的,然后再在每個(gè)子文件夾下的配置文件的內(nèi)容末加入include指令,如“include
redis.cluster.conf”等等,在這里就不演示了,各位小伙伴可以自行嘗試!
(4)緊接著,我們打開DOS命令行界面,進(jìn)入Redis的安裝目錄,準(zhǔn)備安裝并啟動(dòng)這6個(gè)節(jié)點(diǎn)對(duì)應(yīng)的Redis服務(wù),下面兩行命令為“安裝與卸載Redis節(jié)點(diǎn)服務(wù)”:
//安裝命令
redis-server --service-install cluster/7100/redis.7100.conf --service-name redis7100
// 卸載命令
redis-server --service-uninstall --service-name redis7100
下面,我們對(duì)7100端口對(duì)應(yīng)的Redis節(jié)點(diǎn)服務(wù)進(jìn)行安裝與啟動(dòng),如下圖所示:
同樣的道理,我們安裝并啟動(dòng)剩下的端口對(duì)應(yīng)的Redis節(jié)點(diǎn)服務(wù),如下圖所示:
按住ctrl+r,輸入 services.msc并回車,可以看到安裝并啟動(dòng)成功的各個(gè)Redis節(jié)點(diǎn)服務(wù),如下圖所示:
最終我們可以發(fā)現(xiàn),在安裝Redis的根目錄下新增了幾個(gè)節(jié)點(diǎn)配置文件與持久化相關(guān)的文件,如下圖所示:
至此,6個(gè)節(jié)點(diǎn)的Redis服務(wù)已經(jīng)全部安裝并且啟動(dòng)完畢!
(5)接下來,我們需要借助Ruby命令(gem)安裝Redis的相關(guān)組件。開啟另一個(gè)DOS命令行界面,然后cd到Ruby的安裝目錄,執(zhí)行如下的命令:
gem install redis
回車之后,需要稍等一會(huì)兒,如果可以見到如下圖的返回結(jié)果,則表示安裝成功:
訪問https://github.com/microsoftarchive/redis/tree/3.2/src ,下載redis-trib.rb,我們將基于此創(chuàng)建Redis的集群,如下圖所示:
下載成功后,將其放進(jìn)Redis的安裝目錄下,如下圖所示:
之后,我們?nèi)匀辉贒OS命令行界面進(jìn)入Redis的安裝目錄,并輸入以下命令實(shí)現(xiàn)Redis的主從主從部署(記?。褐髟谇?,從在后):
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,再次回車,會(huì)看到如下圖的結(jié)果:
在上圖中出現(xiàn)的那一大串東西,如 2ffe5c338a97c4a98f88359368ce3f7784d45f9c ,這個(gè)正是該Redis節(jié)點(diǎn)服務(wù)的ID,在調(diào)整集群時(shí),經(jīng)常會(huì)用到!
(6)之后,我們輸入 redis-cli -c -h 127.0.0.1 -p 7100 ,連接集群中的某個(gè)Redis節(jié)點(diǎn)服務(wù),然后再輸入cluster nodes ,即可看到目前已經(jīng)搭建成功的Redis集群的情況,如下圖所示:
當(dāng)然啦,你也可以利用RedisDesktopManager登錄進(jìn)去查看其集群狀況!下面是集群特有的命令,供諸位作參考:
如果想要移除某個(gè)服務(wù)節(jié)點(diǎn)(從節(jié)點(diǎn)),可以采用如下命令即可:
redis-trib.rb del-node <ip>:<port> 'node_id' //單引號(hào)內(nèi)放置節(jié)點(diǎn)id
(如果是移除主節(jié)點(diǎn)Master,如果主節(jié)點(diǎn)上有從節(jié)點(diǎn),則要將從節(jié)點(diǎn)刪除或轉(zhuǎn)移到其它主節(jié)點(diǎn)上去,該主節(jié)點(diǎn)才能被刪除;如果主節(jié)點(diǎn)上有槽(Slot),則要將槽刪除或轉(zhuǎn)移到其它主節(jié)點(diǎn)上去,該主節(jié)點(diǎn)才能被刪除)
(7)最后,我們基于前面篇章搭建的Spring Boot2.0整合Redis的項(xiàng)目中,采用集群配置的方式連接到“Redis服務(wù)”!事實(shí)上,我們只需要調(diào)整application.properties的配置即可,其他的一律不需要?jiǎng)樱{(diào)整后的Redis配置如下所示:
#redis 單機(jī)配置
#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
最終將項(xiàng)目啟動(dòng)起來,如果期間沒有任何問題,你再用之前文章的案例簡(jiǎn)單測(cè)試一下(或者執(zhí)行一下現(xiàn)有的Java單元測(cè)試亦可),如果沒有任何異常并且可以得到返回結(jié)果,那么就足以說明我們搭建的Redis集群環(huán)境沒啥問題!
好了,本篇文章我們就介紹到這里了,建議各位小伙伴一定要照著文章提供的樣例代碼擼一擼,只有擼過才能知道這玩意是咋用的,否則就成了“空談?wù)摺保?/span>
對(duì)Redis相關(guān)技術(shù)棧以及實(shí)際應(yīng)用場(chǎng)景實(shí)戰(zhàn)感興趣的小伙伴可以前往Debug搭建的技術(shù)社區(qū)的課程中心進(jìn)行學(xué)習(xí)觀看:https://www.fightjava.com/web/index/course/detail/12 !
其他相關(guān)的技術(shù),感興趣的小伙伴可以關(guān)注底部Debug的技術(shù)公眾號(hào),或者加Debug的微信,拉你進(jìn)“微信版”的真正技術(shù)交流群!一起學(xué)習(xí)、共同成長(zhǎng)!
補(bǔ)充:
1、本文涉及到的相關(guān)的源代碼可以到此地址,check出來進(jìn)行查看學(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ù)微信公眾號(hào),最新的技術(shù)文章、課程以及技術(shù)專欄將會(huì)第一時(shí)間在公眾號(hào)發(fā)布哦!