博客园 首页 联系 订阅 管理

1、下载nginx,下载地址:http://nginx.org/

 

2、下载tomcat7

 

3、下载memcache

 

一、Nginx解压后,在conf包下找到:nginx.conf,并在同一目录下新增proxy.conf和gzip.conf

 

nginx.conf配置如下:

#Nginx所用用户和组,window下不指定
#user  niumd niumd;
  
#工作的子进程数量(通常等于CPU数量或者2倍于CPU)
worker_processes  4;
  
#错误日志存放路径
error_log  logs/error.log  info;
  
#指定pid存放文件
pid        logs/nginx.pid;
  
events {
    #使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
    #use epoll;
    
    #允许最大连接数
    worker_connections  2048;
}
  
http {
    include       mime.types;
    default_type  application/octet-stream;
    access_log  logs/access.log;
         fastcgi_intercept_errors on;
         
  
    client_header_timeout  3m;
    client_body_timeout    3m;
    send_timeout           3m;
  
    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;
  
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
  
    #keepalive_timeout  75 20;
         #keepalive_timeout  0;
  
    include    gzip.conf;
         include    proxy.conf;
         
    upstream localhost {
      #ip_hash;
      server localhost:18081 weight=3;
      server localhost:18080 weight=1;
     }
  
    server {
            listen       80;
            server_name  localhost;  
                            #自定义40X或者50X页面的时候需要开启 fastcgi_intercept_errors on;(上面已经开启) 
                            error_page  404     http://127.0.0.1/404.html;
                            
                            #定义网站首页
                            #root:定义网站首页存放地址
                            #index:定义网站首页名称
                            location / {   
                                     root D:/test; 
                                     index main.html; 
                            } 
                            
                            #定义静态资源存放地址
                            location ~ \.(html|js|css|png|gif|jpg|jpeg|bmp)$ {   
                                     root D:/test; 
                            }
         
                            #将jsp的请求转移到tomcat里面
            location ~ \.(jsp)$ {
                               proxy_connect_timeout   3;
                               proxy_send_timeout      30;
                               proxy_read_timeout      30;
                    proxy_pass http://localhost;
            }
   }
}

gzip.conf配置如下:

gzip               on;
gzip_min_length    1000;
gzip_types           text/plain text/css application/javascript application/x-javascript;

proxy.conf配置如下:

proxy_redirect          off;
proxy_set_header        Host $host;
proxy_set_header        X-Real-IP $remote_addr;
proxy_set_header        X-Forwarded-For   $proxy_add_x_forwarded_for;
client_max_body_size    10m;
client_body_buffer_size 128k;
proxy_connect_timeout   300;
proxy_send_timeout      300;
proxy_read_timeout      300;
proxy_buffer_size       4k;
proxy_buffers           4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

至此,nginx配置成功!

双击nginx.exe启动nginx,在浏览器中输入:http://127.0.0.1会显示nginx.conf中配置的

location / {   
               root D:/test; 
               index main.html; 
            }

main.html页面。目前,已经将静态文件分离!

二、

tomcat 

         我使用的是tomcat7.X;将tomcat拷贝2份,分别将tomcat的端口改变。如果不在同一台机子上则不用更改。以下列出更改的地方:

         Conf\server.xml:

         A:  <Server port="18005" shutdown="SHUTDOWN">

         B:  <Connector port="18080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443"  URIEcoding="UTF-8"/>

        C:  <Connector port="18009" protocol="AJP/1.3" redirectPort="8443" />

         D:     <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">

         jvmRoute="tomcat1"是做Session共享的时候使用的。

         同理,配置tomcat2!

        

由于上面的Nginx.conf已经添加了两台tomcat所以,现在启动Nginx和tomcat 访问127.0.0.1/[your project]/index.jsp  即能看出Nginx负载均衡,将请求分发到不同的tomcat中。

三、nginx+tomcat7+memcache事项session共享

 

依赖包:

couchbase-client-1.2.3.jar

javolution-5.5.1.jar

memcached-session-manager-1.6.5.jar

memcached-session-manager-tc7-1.6.5.jar

msm-flexjson-serializer-1.6.5.jar

msm-javolution-serializer-1.6.5.jar

msm-kryo-serializer-1.6.5.jar

msm-xstream-serializer-1.6.5.jar

spymemcached-2.10.3.jar

放到tomcat目录下lib中即可。

 

配置tomcat,使其将session保存到memcache中:

方法一:在server.xml中配置。

找到host节点下的context节点,配置:

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
	        memcachedNodes="n1:127.0.0.1:11211" 
	        requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" 
	        sessionBackupAsync="false" sessionBackupTimeout="3000" 
	        transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" 
	        copyCollectionsForSerialization="false" />

memcachedNodes="n1:127.0.0.1:11211"是配置的memcache节点地址,我配置在本机所以用127.0.0.1,可替换成memcache安装ip地址即可。

方法二:在context.xml中配置。
找到context节点,加入:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 
	        memcachedNodes="n1:127.0.0.1:11211" 
	        requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$" 
	        sessionBackupAsync="false" sessionBackupTimeout="3000" 
	        transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" 
	        copyCollectionsForSerialization="false" />

两种方法都可以。但是方法一如果在maven项目中,热部署是失败的。所以推荐方法二。



四、编写测试页面index.jsp

<%@ page contentType="text/html; charset=utf-8" %> 
<%@ page import="java.util.*" %> 
<html><head><title>Cluster App Test1</title></head> 
<body> 
   Server Info: You are now on server II!
   <% 
out.println(request.getLocalAddr() + ":" + request.getLocalPort());
%> 
<br><br>
    <%  
out.println("<br> ID " + session.getId()+"<br>");  
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {  
String dataValue = request.getParameter("dataValue") ; 
session.setAttribute(dataName, dataValue);  
}  
out.print("<b>Session list</b> <br>");  
Enumeration e = session.getAttributeNames();  
while (e.hasMoreElements()) {  
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();  
out.println( name + " = " + value+"<br>"); 
System.out.println( name + " = " + value); 
} 
%>
                
<form action="index.jsp" method="POST"> 
          name:<input type=text size=20 name="dataName"> <br> 
          key:<input type=text size=20 name="dataValue"> <br> 
          <input type=submit> 
    </form> 
  </body> 
</html>

 

 

五、测试

 

运行memcache  nginx  2个tomcat,启动无误后,在页面访问:http://localhost/yourproject/index.jsp,根据页面提示操作后显示如下:

 

此时访问的是tomcat1,sessionid如图所示。

为方便让nginx+tomcat负载均衡容易显示,关掉tomcat1,再访问http://localhost/yourproject/index.jsp,显示如下:

 

由上两张图可以看到,访问的是tomcat2服务器,但是sessionid是一直的,我们传递的值也是一致的。至此,tomcat+ngnix+memcache负载均衡和session共享完成!