Redis集群服務器的實現(xiàn)(圖文步驟)
集群簡介
試想有一家餐廳,如果顧客人數(shù)較少,那么餐廳只需要一個服務員即可,如圖1。但是,當顧客人數(shù)非常多時,一個服務員是絕對不夠的,如圖2。此時,餐廳需要雇用更多的服務員來解決大量訪問(顧客就餐)的問題。如圖3。
以上的情景就是“集群”的產(chǎn)生原因及解決方案。將顧客比作客戶端,服務員比作服務器端,當少量客戶端訪問服務器端時,一臺服務器完全足夠;但如果有大量的客戶端來訪問服務器端,就需要在服務器端搭建多臺服務器,以緩解大量訪問帶來的壓力。服務器端搭建的多臺服務器,就稱為“集群服務器”。
集群特點
失敗遷移
餐廳里,如果只有一個服務員,那么一旦服務員出現(xiàn)異常情況(如生病、事假等),顧客的所有就餐請求都將無法滿足。同樣地,如果只有一臺服務器,那么一旦服務器出現(xiàn)異常(如宕機、物理損壞等),所有的客戶端請求也將無法得到響應。為了避免上述風險,就可以使用多臺服務器組成“集群服務器”,即使某一臺服務器發(fā)生了異常,集群服務器也依然能夠正常地處理客戶端請求。例如,當客戶端訪問服務器C時,即使服務器C發(fā)生了異常,集群服務器也可以通過服務器A或服務器B對客戶端做出響應。這種容錯機制,就是集群服務器的第一個特點——失敗遷移。
負載均衡
如果在一臺服務器中部署了4個功能,那么無論客戶端請求哪一個功能,都需要這臺服務器來處理,如圖4。而如果采用的是集群服務器,就可以只在某一臺服務器上部署部分功能(例如只部署3個功能),多臺服務器共同處理客戶端請求。如圖5。此集群服務器中,4個功能均被部署了三次,因此能夠處理的請求次數(shù)也將提高三倍。換句話說,此集群服務器可以將一臺服務器的負載量,分配到四臺服務器上處理,即負載均衡。此外,集群服務器可以分為“水平集群”和“垂直集群”。水平集群是指在不同的計算機上各自安裝一臺服務器;垂直集群是指在同一臺計算機上安裝多個服務器。
使用Apache + Tomcat搭建集群服務器
Apache是web服務器,解析速度非??觳⑶曳€(wěn)定性強,但只能解析靜態(tài)網(wǎng)頁,無法處理JSP等動態(tài)網(wǎng)頁。而Tomcat是運行在Apache之上的應用服務器,可以解析靜態(tài)網(wǎng)頁及動態(tài)網(wǎng)頁,但解析速度比Apache稍慢。因此,可以采用Apache + Tomcat 搭建服務器,實現(xiàn)“動靜分離”,即用Apache處理靜態(tài)網(wǎng)頁,用Tomcat處理動態(tài)網(wǎng)頁。此外,Apache可以對多個Tomcat服務器進行調(diào)度,因此可以在Apache上搭建多個Tomcat服務器,從而實現(xiàn)Tomcat集群。(具體步驟請參閱相關資料)
使用Nginx + Tomcat搭建集群服務器
Nginx 是一款輕量級的反向代理服務器,可以方便地存儲服務端的靜態(tài)資源,實現(xiàn)服務端資源的動靜分離,以及快速搭建集群服務器。Nginx 支持“萬”級別的高并發(fā)連接,用于反向代理時,非常穩(wěn)定,并且能夠在不間斷服務的情況下進行維護(即熱部署)。此外,Nginx是一款開源軟件,使用成本低廉。
(a)在服務器中,HTML、CSS、JS、圖片、音頻、視頻等資源屬于靜態(tài)資源;由java編寫的后臺代碼(servlet等)屬于動態(tài)資源。通常,Tomcat 等服務器擅長處理動態(tài)資源,而對靜態(tài)資源的處理效率較差。因此,如果能將服務器中的靜態(tài)資源和動態(tài)資源相分離,只把動態(tài)請求交給Tomcat等服務器處理,而把靜態(tài)資源交給Nginx處理,就能大幅提高服務端的整體性能。Nginx可以根據(jù)客戶端請求的URL后綴判斷請求的是靜態(tài)資源還是動態(tài)資源。(Nginx+Tomcat實現(xiàn)動靜分離具體步驟請參閱相關資料)
(b)垂直集群案例(在IP為192.168.43.169的電腦上安裝兩個Tomcat服務器)
第一步,配置Tomcat
官網(wǎng)下載Tomcat后解壓,重命名,如C:\Users\johny\Desktop\apache-tomcat-9.1080
再復制一份,重命名C:\Users\johny\Desktop\apache-tomcat-9.2080
修改兩個Tomcat的配置文件
把項目ssm.war分別部署到兩個Tomcat服務器,直接復制粘貼到webapps下,即可。
啟動兩個Tomcat服務器,雙擊startup.bat文件,即可。
注:由于Tomcat依托于jdk,想通過雙擊Tomcat服務器下\bin\startup.bat啟動Tomcat服務器前,須先配置環(huán)境變量JAVA_HOME
第二步,配置數(shù)據(jù)庫
由于ssm項目中是通過遠程連接訪問數(shù)據(jù)庫,所以需要在mysql8.x中創(chuàng)建新用戶。
第三步,配置Nginx
官網(wǎng)下載Nginx后解壓,如 C:\Users\johny\Desktop\nginx-1.16.1\
修改Nginx的配置文件
把前端項目文件夾dist復制粘貼到d盤根目錄下,即 d:/dist
啟動Nginx服務器,雙擊nginx.exe文件,即可。
第四步,測試
在瀏覽器請求 http://192.168.43.169:8081/,并不斷進行操作,Nginx服務器默認會在兩臺Tomcat之間輪詢訪問
第五步,配置“IP_Hash”策略,避免Session混亂
IP_Hash策略的原理是:Nginx會計算每個用戶請求時所在IP地址的Hash值,因為同一個用戶的IP值相同,因此對同一個用戶計算的Hash值也必然相同。之后,Nginx再建立Hash值和Tomcat節(jié)點的一一對應關系,這樣就保證每個用戶只會訪問集群中的同一個服務器節(jié)點,就不會造成Session混亂的情況。
修改Nginx配置ip_hash
這樣,同一用戶始終訪問的就是集群中的同一個Tomcat節(jié)點,因此,每次訪問時獲取的Session對象就是相同的了。
問題:
Nginx同網(wǎng)段ip_hash負載均衡無效果?。?!
Nginx ip_hash在局域網(wǎng)中所有機器訪問的都是同一臺機器沒有Hash。造成原因如被Hash的ip為192.168.43.169;實則上Nginx進行Hash算法時取的是192.168.43。所以在局域網(wǎng)同網(wǎng)段所有機器得到的結(jié)果服務器都是同一臺。
解決:
修改Nginx目錄源碼:nginx-1.16.1\src\http\modules\ngx_http_upstream_ip_hash_module.c
將源碼修改為通過全IP進行hash,可參閱相關資料。
還可以開發(fā)獨立的Session服務器,或者使用Session廣播等方式讓多個Tomcat共享同一份Session對象,有興趣可自行研究。
(c)水平集群案例(在IP為192.168.43.169和IP為192.168.43.166的兩臺電腦上分別安裝一個Tomcat服務器)
【IP為192.168.43.169的電腦】
第一步,配置Tomcat
官網(wǎng)下載Tomcat后解壓,重命名,如C:\Users\johny\Desktop\apache-tomcat-9.1080
修改Tomcat的配置文件
把項目ssm.war分別部署到Tomcat服務器,直接復制粘貼到webapps下,即可。
啟動Tomcat服務器,雙擊startup.bat文件,即可。
第二步,配置數(shù)據(jù)庫
由于ssm項目中是通過遠程連接訪問數(shù)據(jù)庫,所以需要在mysql8.x中創(chuàng)建新用戶。
第三步,配置Nginx
官網(wǎng)下載Nginx后解壓,如 C:\Users\johny\Desktop\nginx-1.16.1\
修改Nginx的配置文件
把前端項目文件夾dist復制粘貼到d盤根目錄下,即 d:/dist
啟動Nginx服務器,雙擊nginx.exe文件,即可。
【IP為192.168.43.166的電腦】
把192.168.43.169電腦上已配置并部署項目的C:\Users\johny\Desktop\apache-tomcat-9.1080
復制一份,雙擊startup.bat文件,啟動Tomcat服務器,即可。
【測試】
瀏覽器請求 http://192.168.43.169:8081/,并不斷進行操作,Nginx服務器會對兩臺電腦上的Tomcat進行輪詢訪問
到此這篇關于Redis集群服務器的實現(xiàn)(圖文步驟)的文章就介紹到這了,更多相關Redis集群服務器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot中redis并發(fā)鎖的等待時間設置長短的方法
在SpringBoot應用中,Redis鎖的等待時間設置不當可能導致資源浪費、響應時間增加、死鎖風險升高、系統(tǒng)負載增加、業(yè)務邏輯延遲以及故障恢復慢等問題,建議合理設置等待時間,并考慮使用其他分布式鎖實現(xiàn)方式提高性能2024-10-10Windows環(huán)境下打開Redis閃退的解決方案
每次使用完Redis后,我們習慣性的動作是直接叉掉doc頁面,這樣導致的結(jié)果是Redis在后臺繼續(xù)運行,沒有關閉,所以當再次打開的時候直接閃退,文中有詳細的解決方案,需要的朋友可以參考下2024-03-03