上一篇文章給大家講了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 實現高可用的負載均衡!