nginx多tomcat負載均衡

目的

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

nginx

大名鼎鼎,相信不少人都聽過,之前感受很厲害,用了以後發現真的很厲害。nginx能夠作如下幾件事:php

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

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

反向代理

好吧,以前我也爲這個問題糾結挺久,爲何叫反向?既然有反向,那確定有正向,現有客戶端x,代理服務器y,最終服務器z,如今x直接訪問z:x->z,經過代理服務器y:x->y->z,不管正反代理服務器y都是位於x、z之間,正反是根據代理服務器代理的是誰來判斷的html

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

好吧,這是個人理解,可能不夠詳細,這裏給你們推薦一片文章,介紹的挺好的:http://bbs.51cto.com/thread-967852-1-1.htmljava

負載均衡

如今客戶端全部請求都通過nginx了,那麼nginx就能夠決定將這些請求轉發給誰,若是服務器A的資源更充分(CPU更多、內存更大等等),服務器B沒有服務器A處理能力強,那麼nginx就會吧更多的請求轉發到A,轉發較少的請求到服務器B,這樣就作到了負載均衡,並且就算其中一臺服務器宕機了,對於用戶而言也能正常訪問網站。node

動靜分離

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

實現多tomcat負載均衡

tomcat和nginx安裝再次再也不贅述,不過注意若是多個tomcat安裝在同一臺機器上的話,注意修改server.xml(在%tomcat_home%/conf/server.xml)中的端口號,如下是個人tomcat配置狀況程序員

tomcat A:10.10.31.11:8888web

tomcat A:10.10.31.11:9999redis

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的使用,之前也試着學習過,但是感受也是不得要領,可是此次由於系統上線以後須要在不間斷訪問的前提下替換部署,感受用起來挺快,理解起來也更流暢。業務發展纔是促進技術發展的源動力,對於技術發展而言是這樣,對於我的技術積累也是這樣。在尚未遇到相應的業務場景的時候只能是不斷提升本身的學習能力,在業務場景真的到來之際,能應用本身的能力解決實際問題,提升本身的技術和能力,而這裏的業務場景就是程序員的時勢。不斷提升本身,而後等待時勢的到來。

相關文章
相關標籤/搜索