nginx多tomcat負載均衡


目的

先說說我要干什么,如題:使用nginx實現多個tomcat服務器的負載均衡。

nginx

大名鼎鼎,相信很多人都聽過,以前感覺很厲害,用了之后發現真的很厲害。nginx可以做以下幾件事:

  • 反向代理
  • 負載均衡
  • 動靜分離
  • 網頁、圖片緩存

需要明確的是nginx並不是應用服務器,也就是說nginx不能處理動態請求(和apache一樣,熟悉apache應該知道),比如jsp、php等頁面,nginx把這些請求轉發給能處理這些頁面的程序。

反向代理

好吧,之前我也為這個問題糾結挺久,為什么叫反向?既然有反向,那肯定有正向,現有客戶端x,代理服務器y,最終服務器z,現在x直接訪問z:x->z,通過代理服務器y:x->y->z,無論正反代理服務器y都是位於x、z之間,正反是根據代理服務器代理的是誰來判斷的

  • 正向:代理服務器y代理的是客戶端,站在客戶端的角度上是正向的,所以是正向代理
  • 反向:代理服務器y代理的是最終服務器z,站在客戶端的角度上是反向的,所以是反向代理

好吧,這是我的理解,可能不夠詳細,這里給大家推薦一片文章,介紹的挺好的:http://bbs.51cto.com/thread-967852-1-1.html

負載均衡

現在客戶端所有請求都經過nginx了,那么nginx就可以決定將這些請求轉發給誰,如果服務器A的資源更充分(CPU更多、內存更大等等),服務器B沒有服務器A處理能力強,那么nginx就會吧更多的請求轉發到A,轉發較少的請求到服務器B,這樣就做到了負載均衡,而且就算其中一台服務器宕機了,對於用戶而言也能正常訪問網站。

動靜分離

借助於nginx強大的轉發功能,可以通過配置實現網站的動態請求和靜態文件進行分離,將動態請求發送到服務器A,將靜態文件轉發到服務器B,這樣便於nginx做靜態文件的緩存和后期對網站使用CDN。

實現多tomcat負載均衡

tomcat和nginx安裝再次不再贅述,不過注意如果多個tomcat安裝在同一台機器上的話,注意修改server.xml(在%tomcat_home%/conf/server.xml)中的端口號,以下是我的tomcat配置情況

tomcat A:10.10.31.11:8888

tomcat A:10.10.31.11:9999

nginx配置,nginx.conf

#user www-data;
worker_processes 3;
#pid /run/nginx.pid;

events {
        #use epoll
    worker_connections 8192;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;
    gzip_disable "msie6";

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;

     # 在這兒配置多個服務器
        upstream web_app{
            server      10.10.31.11:8888;
            server      10.10.31.11:9999
        }
        
        server{
       # nginx監聽80端口 listen 80;
       # 特別注意server_name配置,這兒在實際使用中配置多個域名,比如test.com www.test.com, server_name localhost 127.0.0.1; location / { root html; index index.html; proxy_pass http://web_app; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 100m; } } }

驗證

service nginx start

訪問:localhost或者127.0.0.1會發現兩個tomcat首頁在交替(為了區分兩個tomcat,建議修改%tomcat_home%/weapps/ROOT/index.jsp頁面,如修改兩個title分別為8888, 9999)

很簡單的配置,只有簡單的負載均衡,而且兩台服務器的權重也是一樣的,這樣配置主要是為了解決一個問題:因為系統已經上線了,如果在使用過程中發現了bug需要趕修復並重新部署,不能每次部署就shutdown-start吧,用戶突然就不能訪問網站了,還有一種方法就是等夜深人靜沒人訪問網站的時候部署,更科學的方法是使用nginx做負載均衡,這樣啟動兩台服務器A、B,部署A的時候B還在正常運行,部署完A,啟動A,再部署B。

當然了,使用nginx做負載均衡之后還有一個很重要的問題亟待解決——session集群共享,接下來想使用shiro和redis做session集群共享,這樣子隨着業務的增長,后期有更多的服務器需要負載均衡也算是有基礎了。

 

正文完。


 

最近一段時間感覺壓力有點略大,經常做夢都在想項目上的事兒,每天醒來都感覺心里有點慌慌的感覺。希望自己還是要注意到這個問題,調節好。

還有一個感觸就是:時勢造英雄,有好多技術自己沒有應用場景去學習的時候總感覺少了點什么,比如這次nginx的使用,以前也試着學習過,可是感覺也是不得要領,但是這次因為系統上線之后需要在不間斷訪問的前提下替換部署,感覺用起來挺快,理解起來也更流暢。業務發展才是促進技術發展的源動力,對於技術發展而言是這樣,對於個人技術積累也是這樣。在還沒有遇到相應的業務場景的時候只能是不斷提高自己的學習能力,在業務場景真的到來之際,能應用自己的能力解決實際問題,提高自己的技術和能力,而這里的業務場景就是程序員的時勢。不斷提高自己,然后等待時勢的到來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM