先說說我要幹什麼,如題:使用nginx實現多個tomcat服務器的負載均衡。javascript
大名鼎鼎,相信不少人都聽過,之前感受很厲害,用了以後發現真的很厲害。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
好吧,這是個人理解,可能不夠詳細,這裏給你們推薦一片文章,介紹的挺好的: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和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的使用,之前也試着學習過,但是感受也是不得要領,可是此次由於系統上線以後須要在不間斷訪問的前提下替換部署,感受用起來挺快,理解起來也更流暢。業務發展纔是促進技術發展的源動力,對於技術發展而言是這樣,對於我的技術積累也是這樣。在尚未遇到相應的業務場景的時候只能是不斷提升本身的學習能力,在業務場景真的到來之際,能應用本身的能力解決實際問題,提升本身的技術和能力,而這裏的業務場景就是程序員的時勢。不斷提升本身,而後等待時勢的到來。