一直對於負載均衡比較陌生,今天嘗試着去了解了一下,並做了一個小的實驗,對於這個概念有一些認識,在此做一個簡單的總結
什么是負載均衡
負載均衡,英文 名稱為Load Balance,指由多台服務器以對稱的方式組成一個服務器集合,每台服務器都具有等價的地位,都可以單獨對外提供服務而無須其他服務器的輔助。通過某種 負載分擔技術,將外部發送來的請求均勻分配到對稱結構中的某一台服務器上,而接收到請求的服務器獨立地回應客戶的請求。負載均衡能夠平均分配客戶請求到服 務器陣列,借此提供快速獲取重要數據,解決大量並發訪問服務問題,這種集群技術可以用最少的投資獲得接近於大型主機的性能。
1.在本機准備2個tomcat 並修改端口號,避免啟動出現沖突
2.新建一個簡單的web項目,放到tomcat的webapps下
分別啟動兩個tomcats 可以訪問到對應得Web服務,頁面內容有所區別 為了區分不同的服務器
3.下載一個nginx服務器 http://www.pcre.org/
直接解壓后 不需要安裝。接下去我們打開cmd,進入nginx的目錄下,輸入start nginx。
我們可以看到一個窗口一閃而過,這樣nginx就已經被開啟了,我們在任務管理器中可以找到它的進程。
現在我們在瀏覽器中輸入localhost。可以看到出現一個頁面。
4.之前我們是直接訪問tomcat服務器,現在我想通過nginx訪問tomcat,這個需要去修改nginx的核心配置文件,在其目錄下的conf文件夾下的nginx.conf文件
我們就知道我們需要修改的文件中的server部分,這是它原有的代碼,我刪除了它注釋部分。現在我們就能明白為什么輸入localhost,
它訪問的是它歡迎頁面即index.html。
下面我們對這段代碼進行一些小小修改。就是將請求轉向我們定義的服務器。
隨后在cmd中輸入命令nginx -s reload即可重啟nginx。
現在我們實現了nginx的反向代理!!!
接下了我嘗試着通過nginx實現負載均衡
重啟一下nginx 輸入對應的地址
反復刷會出現兩個tomcat來回切,切換的頻率由weigth來決定
5 session 不同步問題
做一個簡單的測試,在我們寫好的web工程頁面做如下修改:
然后再訪問
發現session不一樣,session 丟失了,這他媽好扯淡,這樣的負載均衡有bug啊
然后查了一些資料后發現可以配redis使用,解決這個問題,
redis就是一個大大的Map,在內存中維護的。
5 用redis共享session
將如下幾個jar拷貝到${TOMCAT_HOME}/lib下
tomcat-redis-session-manager-VERSION.jar jedis-2.5.2.jar commons-pool2-2.2.jar
配置tomcat
編輯${TOMCAT_HOME}/conf/context.xml,在context中加入
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="localhost" port="6379" database="0" maxInactiveInterval="60" />
其中host和port為redis的ip和端口
至此配置完成,tomcat會使用redis來托管session。
最后重啟tomcat 訪問驗證
session 不同步的問題解決了!!!
至此完成了Nginx+tomcat+redis實現反向代理 、負載均衡及session同步,此文記錄下我的實踐過程,如有錯誤不足之處歡迎大神指點,不喜勿噴。