Redis集群服務(wù)器的實(shí)現(xiàn)(圖文步驟)
集群簡(jiǎn)介
試想有一家餐廳,如果顧客人數(shù)較少,那么餐廳只需要一個(gè)服務(wù)員即可,如圖1。但是,當(dāng)顧客人數(shù)非常多時(shí),一個(gè)服務(wù)員是絕對(duì)不夠的,如圖2。此時(shí),餐廳需要雇用更多的服務(wù)員來解決大量訪問(顧客就餐)的問題。如圖3。
以上的情景就是“集群”的產(chǎn)生原因及解決方案。將顧客比作客戶端,服務(wù)員比作服務(wù)器端,當(dāng)少量客戶端訪問服務(wù)器端時(shí),一臺(tái)服務(wù)器完全足夠;但如果有大量的客戶端來訪問服務(wù)器端,就需要在服務(wù)器端搭建多臺(tái)服務(wù)器,以緩解大量訪問帶來的壓力。服務(wù)器端搭建的多臺(tái)服務(wù)器,就稱為“集群服務(wù)器”。
集群特點(diǎn)
失敗遷移
餐廳里,如果只有一個(gè)服務(wù)員,那么一旦服務(wù)員出現(xiàn)異常情況(如生病、事假等),顧客的所有就餐請(qǐng)求都將無法滿足。同樣地,如果只有一臺(tái)服務(wù)器,那么一旦服務(wù)器出現(xiàn)異常(如宕機(jī)、物理損壞等),所有的客戶端請(qǐng)求也將無法得到響應(yīng)。為了避免上述風(fēng)險(xiǎn),就可以使用多臺(tái)服務(wù)器組成“集群服務(wù)器”,即使某一臺(tái)服務(wù)器發(fā)生了異常,集群服務(wù)器也依然能夠正常地處理客戶端請(qǐng)求。例如,當(dāng)客戶端訪問服務(wù)器C時(shí),即使服務(wù)器C發(fā)生了異常,集群服務(wù)器也可以通過服務(wù)器A或服務(wù)器B對(duì)客戶端做出響應(yīng)。這種容錯(cuò)機(jī)制,就是集群服務(wù)器的第一個(gè)特點(diǎn)——失敗遷移。
負(fù)載均衡
如果在一臺(tái)服務(wù)器中部署了4個(gè)功能,那么無論客戶端請(qǐng)求哪一個(gè)功能,都需要這臺(tái)服務(wù)器來處理,如圖4。而如果采用的是集群服務(wù)器,就可以只在某一臺(tái)服務(wù)器上部署部分功能(例如只部署3個(gè)功能),多臺(tái)服務(wù)器共同處理客戶端請(qǐng)求。如圖5。此集群服務(wù)器中,4個(gè)功能均被部署了三次,因此能夠處理的請(qǐng)求次數(shù)也將提高三倍。換句話說,此集群服務(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)頁,無法處理JSP等動(dòng)態(tài)網(wǎng)頁。而Tomcat是運(yùn)行在Apache之上的應(yīng)用服務(wù)器,可以解析靜態(tài)網(wǎng)頁及動(dòng)態(tài)網(wǎng)頁,但解析速度比Apache稍慢。因此,可以采用Apache + Tomcat 搭建服務(wù)器,實(shí)現(xiàn)“動(dòng)靜分離”,即用Apache處理靜態(tài)網(wǎng)頁,用Tomcat處理動(dòng)態(tài)網(wǎng)頁。此外,Apache可以對(duì)多個(gè)Tomcat服務(wù)器進(jìn)行調(diào)度,因此可以在Apache上搭建多個(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 支持“萬”級(jí)別的高并發(fā)連接,用于反向代理時(shí),非常穩(wěn)定,并且能夠在不間斷服務(wù)的情況下進(jìn)行維護(hù)(即熱部署)。此外,Nginx是一款開源軟件,使用成本低廉。
(a)在服務(wù)器中,HTML、CSS、JS、圖片、音頻、視頻等資源屬于靜態(tài)資源;由java編寫的后臺(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ù)客戶端請(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
再復(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,想通過雙擊Tomcat服務(wù)器下\bin\startup.bat啟動(dòng)Tomcat服務(wù)器前,須先配置環(huán)境變量JAVA_HOME
第二步,配置數(shù)據(jù)庫
由于ssm項(xiàng)目中是通過遠(yuǎn)程連接訪問數(shù)據(jù)庫,所以需要在mysql8.x中創(chuàng)建新用戶。
第三步,配置Nginx
官網(wǎng)下載Nginx后解壓,如 C:\Users\johny\Desktop\nginx-1.16.1\
修改Nginx的配置文件
把前端項(xiàng)目文件夾dist復(fù)制粘貼到d盤根目錄下,即 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之間輪詢?cè)L問
第五步,配置“IP_Hash”策略,避免Session混亂
IP_Hash策略的原理是:Nginx會(huì)計(jì)算每個(gè)用戶請(qǐng)求時(shí)所在IP地址的Hash值,因?yàn)橥粋€(gè)用戶的IP值相同,因此對(duì)同一個(gè)用戶計(jì)算的Hash值也必然相同。之后,Nginx再建立Hash值和Tomcat節(jié)點(diǎn)的一一對(duì)應(yīng)關(guān)系,這樣就保證每個(gè)用戶只會(huì)訪問集群中的同一個(gè)服務(wù)器節(jié)點(diǎn),就不會(huì)造成Session混亂的情況。
修改Nginx配置ip_hash
這樣,同一用戶始終訪問的就是集群中的同一個(gè)Tomcat節(jié)點(diǎn),因此,每次訪問時(shí)獲取的Session對(duì)象就是相同的了。
問題:
Nginx同網(wǎng)段ip_hash負(fù)載均衡無效果?。?!
Nginx ip_hash在局域網(wǎng)中所有機(jī)器訪問的都是同一臺(tái)機(jī)器沒有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
將源碼修改為通過全I(xiàn)P進(jìn)行hash,可參閱相關(guān)資料。
還可以開發(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ù)庫
由于ssm項(xiàng)目中是通過遠(yuǎn)程連接訪問數(shù)據(jù)庫,所以需要在mysql8.x中創(chuàng)建新用戶。
第三步,配置Nginx
官網(wǎng)下載Nginx后解壓,如 C:\Users\johny\Desktop\nginx-1.16.1\
修改Nginx的配置文件
把前端項(xiàng)目文件夾dist復(fù)制粘貼到d盤根目錄下,即 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)行輪詢?cè)L問
到此這篇關(guān)于Redis集群服務(wù)器的實(shí)現(xiàn)(圖文步驟)的文章就介紹到這了,更多相關(guān)Redis集群服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Redis單線程架構(gòu)的優(yōu)勢(shì)與不足
很多人都遇到過這么一道面試題:Redis是單線程還是多線程?這個(gè)問題既簡(jiǎn)單又復(fù)雜,說他簡(jiǎn)單是因?yàn)榇蠖鄶?shù)人都知道Redis是單線程,說復(fù)雜是因?yàn)檫@個(gè)答案其實(shí)并不準(zhǔn)確,本文就給大家講講Redis單線程架構(gòu)的優(yōu)勢(shì)與不足,需要的朋友可以參考下2024-02-02springboot中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ù)慢等問題,建議合理設(shè)置等待時(shí)間,并考慮使用其他分布式鎖實(shí)現(xiàn)方式提高性能2024-10-10Redis list 類型學(xué)習(xí)筆記與總結(jié)
這篇文章主要介紹了Redis list 類型學(xué)習(xí)筆記與總結(jié),本文著重講解了關(guān)于List的一些常用方法,比如lpush 方法、lrange 方法、rpush 方法、linsert 方法、 lset 方法等,需要的朋友可以參考下2015-06-06Windows環(huán)境下打開Redis閃退的解決方案
每次使用完Redis后,我們習(xí)慣性的動(dòng)作是直接叉掉doc頁面,這樣導(dǎo)致的結(jié)果是Redis在后臺(tái)繼續(xù)運(yùn)行,沒有關(guān)閉,所以當(dāng)再次打開的時(shí)候直接閃退,文中有詳細(xì)的解決方案,需要的朋友可以參考下2024-03-03redis中zSet實(shí)現(xiàn)排行榜的使用示例
在工作中,有時(shí)候需要實(shí)現(xiàn)排行榜功能,本文主要介紹了redis中zSet實(shí)現(xiàn)排行榜的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10