高性能網站架構之負載均衡 Nginx+tomcat+redis實現tomcat集羣

         上一篇文章給大家講了Nginx的安裝,那麼這篇文章爲大家講一下Nginx+Tomcat實現負載均衡。

         先說說爲什麼要用ngnix 做負載均衡,其實做負載均衡的最出名的莫過於F5了,F5是在硬件設施,動輒幾萬,幾十萬,幾百萬不等,對於一般的小公司來說,這也是一筆很大的開銷,所以能儘量的使用軟件,還是使用軟件,效果上雖然會差一些,但是還是能夠起到一定的作用的。

環境準備

        三臺裝有centos6.5 系統的機器。其中兩臺機器上裝有tomcat7,一臺機器上裝有nginx3.0.2,至於具體如何安裝tomcat和ngnix,這裏就不再介紹了,請大家自己去網上查找資料。

        這樣我們還需要準備一臺裝有redis服務的服務器,redis最好配置爲集羣的,這裏爲了演示tomcat集羣,就使用單臺服務器了。只與redis的安裝,大家可以參照小編的Linux安裝Redis並設置服務 。

測試程序

         環境準備好以後,我們寫一個簡單的測試程序,看看我們的兩個tomcat服務是不是使用同一個redis服務,作爲session的存儲介質。應用程序如下,兩臺tomcat服務器本來應該部署同樣的應用程序,但是這裏爲了區分,我們部署一個程序,但是頁面不一致 加上ip的最後三位,用來區分不同的服務。

<span style="font-size:18px;"><body>
   這事第一個頁面128
   <%= session.getId() %>
</body>
 
<body>
   這事第一個頁面129
   <%= session.getId() %>
</body></span>

        可以看到,如果兩個sessionid是一樣的,那麼我們就可以證明兩個tomcat服務器已經使用redis共享session了。

配置tomcat

        我們要將tomcat使用redis共享session需要的jar包,都準備好,共需要三個,如下所示。這個jar不是很好找,這裏提供一個下載地址,tomcat+redis共享session

     

         Jar包下載好以後,我們將這些jar包放入到tomcat中lib下,然後修改tomcat/conf/context.xml文件,在最後一個</Context>上邊添加 如下代碼:

<ValveclassName="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve"/>
   <ManagerclassName="com.orangefunction.tomcat.redissessions.RedisSessionManager"
       host="192.168.20.128" <!—redis的ip地址-->
       port="6379"
       database="0"
       maxInactiveInterval="60"/>

       到此我們的tomcat就配置完了!

Nginx配置

         Nginx安裝好以後,修改/usr/local/conf/nginx.conf配置文件,下邊爲最簡配置。主要配置我們的tomcat服務器的地址+端口號。和他們的權重。

<span style="font-size:18px;">#user nobody;
worker_processes  1;
 
#error_log logs/error.log;
#error_log logs/error.log  notice;
#error_log logs/error.log  info;
 
#pid       logs/nginx.pid;
 
 
events {
   #use   epoll;             #epoll是多路複用IO(I/OMultiplexing)中的一種方式,但是僅用於linux2.6以上內核,可以大大提高nginx的性能
   worker_connections  1024;  #單個後臺work processes 進程最大的併發連接數
}
 
 
http {
   include       mime.types;
   default_type application/octet-stream;
 
   #log_format  main  '$remote_addr - $remote_user [$time_local]"$request" '
   #                  '$status$body_bytes_sent "$http_referer" '
   #                 '"$http_user_agent" "$http_x_forwarded_for"';
 
   #access_log  logs/access.log  main;
 
   sendfile        on;
   #tcp_nopush     on;
    #設置超時時間
   #keepalive_timeout  0;
   keepalive_timeout  65;
   #要代理的服務器的地址和端口號    weight 爲權重,權重越大 被訪問的次數越多, 壓力越大!
  upstream myServer {
 
   server 192.168.20.128:8080;
   server 192.168.20.129:8080 weight=2;
   }
 
   #gzip  on;
    #監聽80 端口
   server {
       listen       80;
       #定義要使用的域名
       server_name  localhost;
 
       #charset koi8-r;
      #設定本虛擬主機的訪問日誌
       #access_log logs/host.access.log  main;
       #配置前綴  即要轉發到的ip+port
       location / {
           proxy_pass  http://myServer;
          # root   html;
          # index  index.html index.htm;
       }
 
       #error_page  404              /404.html;
 
       # redirect server error pages to the static page /50x.html
       #
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
           root   html;
       }
    }
}</span>

       這樣我們所有的準備工作就都做完了。接下來我們進行測試。

驗證結果

         我們先對ip爲128的進行訪問,然後再對129的進行訪問,我們會發現sessionid是不一樣的。

             

           

         然後我們通過nginx 進行訪問,我們刷新幾次,會發現他會隨機的選擇服務器,加載頁面,但是我們可以發現不管是訪問的ip爲128 還是129 的,他的sessionid都是一個,所以我們斷定兩臺tomcat服務器已經共享session了!

          

         這樣我們的tomcat使用redis 實現session共享 就實現了,並且用ngnix 實現了負載均衡,但是我們想一下,如果我們使用一個nginx,如果該nginx所在的服務器,宕機了,那麼我們的程序就掛掉了。那麼我們該如下實現一個高可用的方案呢。下篇文章將爲我們介紹nginx+keepalived 實現高可用的負載均衡!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章