1. 程式人生 > >Nginx+Tomcat+redis 叢集安裝及配置

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都在一臺機器上,為了方便測試和部署。

大致的整個配置的架構:

tomcat-nginx-redis

在這個圖中,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。

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

tomcat

tomcat

從截圖中,可以看出,分別訪問了不同的tomcat,但是得到的session卻是相同的,說明達到了叢集的目的。

在這個架構中,有個明顯的瓶頸,就是資料庫。因為使用了企業級的oracle資料庫,所以在壓力測試種也沒有出現大的問題。但是作為後續的可以優化的地方,資料庫是一定要做讀寫分離的。