Redis集群服務(wù)器的實(shí)現(xiàn)(圖文步驟)
集群簡(jiǎn)介
試想有一家餐廳,如果顧客人數(shù)較少,那么餐廳只需要一個(gè)服務(wù)員即可,如圖1。但是,當(dāng)顧客人數(shù)非常多時(shí),一個(gè)服務(wù)員是絕對(duì)不夠的,如圖2。此時(shí),餐廳需要雇用更多的服務(wù)員來(lái)解決大量訪(fǎng)問(wèn)(顧客就餐)的問(wèn)題。如圖3。

以上的情景就是“集群”的產(chǎn)生原因及解決方案。將顧客比作客戶(hù)端,服務(wù)員比作服務(wù)器端,當(dāng)少量客戶(hù)端訪(fǎng)問(wèn)服務(wù)器端時(shí),一臺(tái)服務(wù)器完全足夠;但如果有大量的客戶(hù)端來(lái)訪(fǎng)問(wèn)服務(wù)器端,就需要在服務(wù)器端搭建多臺(tái)服務(wù)器,以緩解大量訪(fǎng)問(wèn)帶來(lái)的壓力。服務(wù)器端搭建的多臺(tái)服務(wù)器,就稱(chēng)為“集群服務(wù)器”。
集群特點(diǎn)
失敗遷移
餐廳里,如果只有一個(gè)服務(wù)員,那么一旦服務(wù)員出現(xiàn)異常情況(如生病、事假等),顧客的所有就餐請(qǐng)求都將無(wú)法滿(mǎn)足。同樣地,如果只有一臺(tái)服務(wù)器,那么一旦服務(wù)器出現(xiàn)異常(如宕機(jī)、物理?yè)p壞等),所有的客戶(hù)端請(qǐng)求也將無(wú)法得到響應(yīng)。為了避免上述風(fēng)險(xiǎn),就可以使用多臺(tái)服務(wù)器組成“集群服務(wù)器”,即使某一臺(tái)服務(wù)器發(fā)生了異常,集群服務(wù)器也依然能夠正常地處理客戶(hù)端請(qǐng)求。例如,當(dāng)客戶(hù)端訪(fǎng)問(wèn)服務(wù)器C時(shí),即使服務(wù)器C發(fā)生了異常,集群服務(wù)器也可以通過(guò)服務(wù)器A或服務(wù)器B對(duì)客戶(hù)端做出響應(yīng)。這種容錯(cuò)機(jī)制,就是集群服務(wù)器的第一個(gè)特點(diǎn)——失敗遷移。
負(fù)載均衡
如果在一臺(tái)服務(wù)器中部署了4個(gè)功能,那么無(wú)論客戶(hù)端請(qǐng)求哪一個(gè)功能,都需要這臺(tái)服務(wù)器來(lái)處理,如圖4。而如果采用的是集群服務(wù)器,就可以只在某一臺(tái)服務(wù)器上部署部分功能(例如只部署3個(gè)功能),多臺(tái)服務(wù)器共同處理客戶(hù)端請(qǐng)求。如圖5。此集群服務(wù)器中,4個(gè)功能均被部署了三次,因此能夠處理的請(qǐng)求次數(shù)也將提高三倍。換句話(huà)說(shuō),此集群服務(wù)器可以將一臺(tái)服務(wù)器的負(fù)載量,分配到四臺(tái)服務(wù)器上處理,即負(fù)載均衡。此外,集群服務(wù)器可以分為“水平集群”和“垂直集群”。水平集群是指在不同的計(jì)算機(jī)上各自安裝一臺(tái)服務(wù)器;垂直集群是指在同一臺(tái)計(jì)算機(jī)上安裝多個(gè)服務(wù)器。

使用Apache + Tomcat搭建集群服務(wù)器
Apache是web服務(wù)器,解析速度非??觳⑶曳€(wěn)定性強(qiáng),但只能解析靜態(tài)網(wǎng)頁(yè),無(wú)法處理JSP等動(dòng)態(tài)網(wǎng)頁(yè)。而Tomcat是運(yùn)行在A(yíng)pache之上的應(yīng)用服務(wù)器,可以解析靜態(tài)網(wǎng)頁(yè)及動(dòng)態(tài)網(wǎng)頁(yè),但解析速度比Apache稍慢。因此,可以采用Apache + Tomcat 搭建服務(wù)器,實(shí)現(xiàn)“動(dòng)靜分離”,即用Apache處理靜態(tài)網(wǎng)頁(yè),用Tomcat處理動(dòng)態(tài)網(wǎng)頁(yè)。此外,Apache可以對(duì)多個(gè)Tomcat服務(wù)器進(jìn)行調(diào)度,因此可以在A(yíng)pache上搭建多個(gè)Tomcat服務(wù)器,從而實(shí)現(xiàn)Tomcat集群。(具體步驟請(qǐng)參閱相關(guān)資料)
使用Nginx + Tomcat搭建集群服務(wù)器
Nginx 是一款輕量級(jí)的反向代理服務(wù)器,可以方便地存儲(chǔ)服務(wù)端的靜態(tài)資源,實(shí)現(xiàn)服務(wù)端資源的動(dòng)靜分離,以及快速搭建集群服務(wù)器。Nginx 支持“萬(wàn)”級(jí)別的高并發(fā)連接,用于反向代理時(shí),非常穩(wěn)定,并且能夠在不間斷服務(wù)的情況下進(jìn)行維護(hù)(即熱部署)。此外,Nginx是一款開(kāi)源軟件,使用成本低廉。
(a)在服務(wù)器中,HTML、CSS、JS、圖片、音頻、視頻等資源屬于靜態(tài)資源;由java編寫(xiě)的后臺(tái)代碼(servlet等)屬于動(dòng)態(tài)資源。通常,Tomcat 等服務(wù)器擅長(zhǎng)處理動(dòng)態(tài)資源,而對(duì)靜態(tài)資源的處理效率較差。因此,如果能將服務(wù)器中的靜態(tài)資源和動(dòng)態(tài)資源相分離,只把動(dòng)態(tài)請(qǐng)求交給Tomcat等服務(wù)器處理,而把靜態(tài)資源交給Nginx處理,就能大幅提高服務(wù)端的整體性能。Nginx可以根據(jù)客戶(hù)端請(qǐng)求的URL后綴判斷請(qǐng)求的是靜態(tài)資源還是動(dòng)態(tài)資源。(Nginx+Tomcat實(shí)現(xiàn)動(dòng)靜分離具體步驟請(qǐng)參閱相關(guān)資料)
(b)垂直集群案例(在IP為192.168.43.169的電腦上安裝兩個(gè)Tomcat服務(wù)器)

第一步,配置Tomcat
官網(wǎng)下載Tomcat后解壓,重命名,如C:\Users\johny\Desktop\apache-tomcat-9.1080
再?gòu)?fù)制一份,重命名C:\Users\johny\Desktop\apache-tomcat-9.2080
修改兩個(gè)Tomcat的配置文件


把項(xiàng)目ssm.war分別部署到兩個(gè)Tomcat服務(wù)器,直接復(fù)制粘貼到webapps下,即可。

啟動(dòng)兩個(gè)Tomcat服務(wù)器,雙擊startup.bat文件,即可。

注:由于Tomcat依托于jdk,想通過(guò)雙擊Tomcat服務(wù)器下\bin\startup.bat啟動(dòng)Tomcat服務(wù)器前,須先配置環(huán)境變量JAVA_HOME
第二步,配置數(shù)據(jù)庫(kù)
由于ssm項(xiàng)目中是通過(guò)遠(yuǎn)程連接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),所以需要在mysql8.x中創(chuàng)建新用戶(hù)。


第三步,配置Nginx
官網(wǎng)下載Nginx后解壓,如 C:\Users\johny\Desktop\nginx-1.16.1\
修改Nginx的配置文件

把前端項(xiàng)目文件夾dist復(fù)制粘貼到d盤(pán)根目錄下,即 d:/dist
啟動(dòng)Nginx服務(wù)器,雙擊nginx.exe文件,即可。
第四步,測(cè)試
在瀏覽器請(qǐng)求 http://192.168.43.169:8081/,并不斷進(jìn)行操作,Nginx服務(wù)器默認(rèn)會(huì)在兩臺(tái)Tomcat之間輪詢(xún)?cè)L問(wèn)


第五步,配置“IP_Hash”策略,避免Session混亂
IP_Hash策略的原理是:Nginx會(huì)計(jì)算每個(gè)用戶(hù)請(qǐng)求時(shí)所在IP地址的Hash值,因?yàn)橥粋€(gè)用戶(hù)的IP值相同,因此對(duì)同一個(gè)用戶(hù)計(jì)算的Hash值也必然相同。之后,Nginx再建立Hash值和Tomcat節(jié)點(diǎn)的一一對(duì)應(yīng)關(guān)系,這樣就保證每個(gè)用戶(hù)只會(huì)訪(fǎng)問(wèn)集群中的同一個(gè)服務(wù)器節(jié)點(diǎn),就不會(huì)造成Session混亂的情況。
修改Nginx配置ip_hash

這樣,同一用戶(hù)始終訪(fǎng)問(wèn)的就是集群中的同一個(gè)Tomcat節(jié)點(diǎn),因此,每次訪(fǎng)問(wèn)時(shí)獲取的Session對(duì)象就是相同的了。
問(wèn)題:
Nginx同網(wǎng)段ip_hash負(fù)載均衡無(wú)效果?。?!
Nginx ip_hash在局域網(wǎng)中所有機(jī)器訪(fǎng)問(wèn)的都是同一臺(tái)機(jī)器沒(méi)有Hash。造成原因如被Hash的ip為192.168.43.169;實(shí)則上Nginx進(jìn)行Hash算法時(shí)取的是192.168.43。所以在局域網(wǎng)同網(wǎng)段所有機(jī)器得到的結(jié)果服務(wù)器都是同一臺(tái)。
解決:
修改Nginx目錄源碼:nginx-1.16.1\src\http\modules\ngx_http_upstream_ip_hash_module.c
將源碼修改為通過(guò)全I(xiàn)P進(jìn)行hash,可參閱相關(guān)資料。
還可以開(kāi)發(fā)獨(dú)立的Session服務(wù)器,或者使用Session廣播等方式讓多個(gè)Tomcat共享同一份Session對(duì)象,有興趣可自行研究。
(c)水平集群案例(在IP為192.168.43.169和IP為192.168.43.166的兩臺(tái)電腦上分別安裝一個(gè)Tomcat服務(wù)器)
【IP為192.168.43.169的電腦】
第一步,配置Tomcat
官網(wǎng)下載Tomcat后解壓,重命名,如C:\Users\johny\Desktop\apache-tomcat-9.1080
修改Tomcat的配置文件

把項(xiàng)目ssm.war分別部署到Tomcat服務(wù)器,直接復(fù)制粘貼到webapps下,即可。

啟動(dòng)Tomcat服務(wù)器,雙擊startup.bat文件,即可。

第二步,配置數(shù)據(jù)庫(kù)
由于ssm項(xiàng)目中是通過(guò)遠(yuǎn)程連接訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),所以需要在mysql8.x中創(chuàng)建新用戶(hù)。


第三步,配置Nginx
官網(wǎng)下載Nginx后解壓,如 C:\Users\johny\Desktop\nginx-1.16.1\
修改Nginx的配置文件

把前端項(xiàng)目文件夾dist復(fù)制粘貼到d盤(pán)根目錄下,即 d:/dist
啟動(dòng)Nginx服務(wù)器,雙擊nginx.exe文件,即可。
【IP為192.168.43.166的電腦】
把192.168.43.169電腦上已配置并部署項(xiàng)目的C:\Users\johny\Desktop\apache-tomcat-9.1080
復(fù)制一份,雙擊startup.bat文件,啟動(dòng)Tomcat服務(wù)器,即可。
【測(cè)試】
瀏覽器請(qǐng)求 http://192.168.43.169:8081/,并不斷進(jìn)行操作,Nginx服務(wù)器會(huì)對(duì)兩臺(tái)電腦上的Tomcat進(jìn)行輪詢(xún)?cè)L問(wèn)
到此這篇關(guān)于Redis集群服務(wù)器的實(shí)現(xiàn)(圖文步驟)的文章就介紹到這了,更多相關(guān)Redis集群服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Redis單線(xiàn)程架構(gòu)的優(yōu)勢(shì)與不足
很多人都遇到過(guò)這么一道面試題:Redis是單線(xiàn)程還是多線(xiàn)程?這個(gè)問(wèn)題既簡(jiǎn)單又復(fù)雜,說(shuō)他簡(jiǎn)單是因?yàn)榇蠖鄶?shù)人都知道Redis是單線(xiàn)程,說(shuō)復(fù)雜是因?yàn)檫@個(gè)答案其實(shí)并不準(zhǔn)確,本文就給大家講講Redis單線(xiàn)程架構(gòu)的優(yōu)勢(shì)與不足,需要的朋友可以參考下2024-02-02
springboot中redis并發(fā)鎖的等待時(shí)間設(shè)置長(zhǎng)短的方法
在SpringBoot應(yīng)用中,Redis鎖的等待時(shí)間設(shè)置不當(dāng)可能導(dǎo)致資源浪費(fèi)、響應(yīng)時(shí)間增加、死鎖風(fēng)險(xiǎn)升高、系統(tǒng)負(fù)載增加、業(yè)務(wù)邏輯延遲以及故障恢復(fù)慢等問(wèn)題,建議合理設(shè)置等待時(shí)間,并考慮使用其他分布式鎖實(shí)現(xiàn)方式提高性能2024-10-10
Redis list 類(lèi)型學(xué)習(xí)筆記與總結(jié)
這篇文章主要介紹了Redis list 類(lèi)型學(xué)習(xí)筆記與總結(jié),本文著重講解了關(guān)于List的一些常用方法,比如lpush 方法、lrange 方法、rpush 方法、linsert 方法、 lset 方法等,需要的朋友可以參考下2015-06-06
Windows環(huán)境下打開(kāi)Redis閃退的解決方案
每次使用完Redis后,我們習(xí)慣性的動(dòng)作是直接叉掉doc頁(yè)面,這樣導(dǎo)致的結(jié)果是Redis在后臺(tái)繼續(xù)運(yùn)行,沒(méi)有關(guān)閉,所以當(dāng)再次打開(kāi)的時(shí)候直接閃退,文中有詳細(xì)的解決方案,需要的朋友可以參考下2024-03-03
redis中zSet實(shí)現(xiàn)排行榜的使用示例
在工作中,有時(shí)候需要實(shí)現(xiàn)排行榜功能,本文主要介紹了redis中zSet實(shí)現(xiàn)排行榜的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10

