Nginx+Tomcat+redis 叢集安裝及配置
下載及安裝:
redis:http://blog.csdn.net/majian_1987/article/details/9672393
nginx:http://download.csdn.net/detail/cd4_5792/6974455
整合配置:
配置環境使用三個tomcat, 三臺tomcat、redis和nginx都在一臺機器上,為了方便測試和部署。
大致的整個配置的架構:
在這個圖中,nginx做為反向代理,將客戶請求根據權重隨機分配給三臺tomcat伺服器,redis做為三臺tomcat的共享session資料伺服器。
規劃
redis
localhost:6379
nginx
localhost: 80
tomcat
localhost:8081
localhost:8082
localhost:8083
配置
tomcat
修改tomcat資料夾中conf/context.xml檔案,在context節點下新增如下配置:
<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port= "6379"
database="0"
maxInactiveInterval="60" />
conf/server.xml檔案中的埠根據規劃依次修改。
另外要在tomcat的lib資料夾下分別新增三個jar檔案,這個地方jar檔案的版本有可能會有衝突,配置的時候需要多嘗試。我這裡的版本如下,是驗證過可以使用的,通過maven的庫都可以下載到。
tomcat-redis-session-manager-1.2-tomcat-7.jar
jedis-2.2.0.jar
commons-pool-1.6.jar
nginx
修改nginx檔案目中的conf/nginx.conf檔案為:
#user nobody;
worker_processes 1;
error_log logs/error.log;
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 localhost {
server localhost:8081 weight=1;
server localhost:8082 weight=2;
server localhost:8083 weight=3;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://localhost;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 100m;
}
#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;
}
}
}
redis的配置就直接使用預設配置,因為只是測試用,和tomcat一樣沒有做引數優化配置。
執行
分別啟動redis、nginx和三臺tomcat。
測試
在三個tomcat的webapps/ROOT目錄下,分別新增session.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>shared session</title>
</head>
<body>
<br>session id=<%=session.getId()%>
<br>tomcat 3
</body>
</html>
注:每個tomcat下的標示不同
從截圖中,可以看出,分別訪問了不同的tomcat,但是得到的session卻是相同的,說明達到了叢集的目的。
在這個架構中,有個明顯的瓶頸,就是資料庫。因為使用了企業級的oracle資料庫,所以在壓力測試種也沒有出現大的問題。但是作為後續的可以優化的地方,資料庫是一定要做讀寫分離的。