Linux+Nginx+Tomcat+Redis實現負載均衡,應用集羣及session共享

一.環境介紹

Linux: CentOS 7 64位系統 
Nginx: 版本1.9.5 
Tomcat: 版本7.0 
Redis: 3.0.4css

使用nginx作負載均衡, 2臺tomcat應用服務器, 使用redis統一存儲session 
準備2臺linux服務器html

服務器A: ip 192.168.186.128 用於安裝nginx(端口80)和tomcat1(端口8080) 
服務器B: ip 192.168.186.129 用於安裝tomcat2(端口8080)和redis(端口6379)java

本文着重介紹負載均衡,應用集羣配置以及解決session共享問題, 而對於nginx, tomcat, redis的安裝將略過linux

二.配置

nginx配置:
修改nginx.conf文件
user  www;
worker_processes  1; pid logs/nginx.pid; events { worker_connections 1024; } 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; gzip on; #負載均衡配置 upstream tomcat.com { server localhost:8080 max_fails=3 weight=1 fail_timeout=60s; server 192.168.186.129:8080 max_fails=3 weight=3 fail_timeout=60s; } server { listen 80; server_name localhost; charset utf-8; location / { root /alidata/www; index index.html index.htm; } #將全部動態請求(即以jsp結尾的請求轉發tomcat服務器) location ~ .*.jsp$ { index index.jsp; proxy_pass http://tomcat.com; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }

 

負載均衡配置中的參數解析:

server localhost:8080 max_fails=3 weight=1 fail_timeout=60s; 
max_fails: 最大的失敗鏈接數, 即當鏈接此服務器3次都失敗時, nginx則將不會再轉發請求至這臺服務器上 
weight: 即權重, 數值越大則分配的請求將會越多, 
fail_timeout: 鏈接失敗的超時時間, 即超過指定時間還未鏈接成功,就會將請求轉發至其餘服務器nginx

tomcat的配置:

添加如下3個jar文件到tomcat的lib目錄中(用於tomcat服務器session保存至redis數據庫, 實現session共享):redis

tomcat-redis-session-manager-1.2-tomcat-7-java-7.jar 
jedis-2.0.0.jar 
commons-pool-1.5.5.jar數據庫

點擊下載tomcat

修改兩個tomcat服務器conf目錄下context.xml文件, 在節點中添加以下配置:服務器


<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> 
<Manager className="com.radiadesign.catalina.session.RedisSessionManager" 
host="192.168.186.129" 
port="6379" 
database="0" 
maxInactiveInterval="60" /> 
session

鏈接參數請改成您的實際環境中的參數。

在tomcat1的應用訪問根目錄下新建jsp,在body中添加以下代碼:

<% session.setAttribute("name", "tomcat1"); %> success access tomcat1; 在tomcat1的session中存入key爲name, value爲tomcat1的記錄 一樣在tomcat2的應用訪問根目錄下新建jsp,在body中添加以下代碼: <% String name = (String) session.getAttribute("name"); %> success access tomcat2;<br/> <%=name %>

依次啓動reids, tomcat1, tomcat2, nginx

訪問http://192.168.186.128/index.jsp 
會發現頁面均勻的顯示

success access tomcat1; 
success access tomcat2;

而且查看redis數據庫時會發現, 有session信息存入redis數據庫

至此, 配置成功! 此案例僅用於介紹負載均衡,應用集羣配置以及解決session共享問題, 而實際應用中, 還須要對nginx, tomcat, redis等進行配置優化以達到最佳性能, 此處不做詳細說明, 有興趣能夠一塊兒討論

相關文章
相關標籤/搜索