nginx+tomcat配置集群负载均衡

思路:
安装nginx监听80端口,即域名指向的端口,通过nginx的负载均衡到多台服务器上,例如两个tomcat

当通过负载均衡实现均衡调用时,tomcat的session却不能实现共享,可以通过memcached实现session共享,以实现多台服务之间的跳转仍然session在线

以window环境为例
1.nginx安装配置
下载http://nginx.org/en/download.html
安装nginx
配置文件

	#设定负载均衡的服务器列表  
	upstream myapp{   
		#weigth参数表示权值,权值越高被分配到的几率越大  
		#max_fails 当有#max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查  
		#fail_timeout 在以后的#fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器  
		#这里指定多个源服务器,ip:端口,80端口的话可写可不写   
		#指向两台本机的tomcat
		server 127.0.0.1:8080 weight=5;	
		server 127.0.0.1:9080 weight=5; 
	}
	
	第一个虚拟主机 
    server {
		#监听IP端口
        listen       80;
		#主机名
        server_name  localhost;#域名
		#具体配置的应用指向myapp 
		
		location ~* \.(gif|jpg|jpeg|png|css|ico|html)$ {
    		#root /usr/local/project/html;
			#root d:/appbase/project/html;
			proxy_pass http://myapp;#请求转向定义的服务器列表 
			expires 1h;
            access_log off;
		}
		
		location /myproject{
		#location ~ \.jsp$ {
			ssi  on;
			proxy_pass http://myapp;
			client_max_body_size 3m;
			client_body_buffer_size 128k; 
			#include /opt/apps/nginx/conf/proxy.conf;
		}		
		#...略
		}



2. 下载http://tomcat.apache.org/,减压出两个tomcat来
安装配置tomcat集群,例如本机有两个tomcat,则为了避免端口冲突需要修改端口
其中一台使用默认配置,不做修改,另外一台修改端口

<Server port="8005" shutdown="SHUTDOWN">改为
<Server port="8006" shutdown="SHUTDOWN">


<Connector port="8080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
  改为
<Connector port="9080" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />
  
  
这样就有了由两个tomcat组成的集群了,

 
然后添加应用,在两个tomcat的\conf\Catalina\localhost目录下增加你自己的应用配置,例如我有一个myproject-1.0.war的应用放在D:\appBase\project\myproject-1.0.war
则在目录下新建myproject.xml的配置文件

<Context docBase="D:\appBase\project\myproject-1.0.war" path="myproject" reloadable="true"></Context>

这样当启动时,就会减压war包到webapps目录下了,
这样nginx+tomcat的集群就搭建起来了,但是他们还缺少session的共享,使两台tomcat的跳转能共享session。

3.
使用memcached共享session,首先需要有一台memcached服务器,我同样以本机做服务器,下载安装memcached,从网上找到一个windows 版的地址http://code.jellycan.com/files/memcached-1.2.6-win32-bin.zip


在tomcat客户端,需要下载依赖包,放到tomcat的lib目录下
 http://memcached-session-manager.googlecode.com/files/memcached-session-manager-1.3.0.jar
 http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-jodatime-1.3.0.jar
 http://memcached-session-manager.googlecode.com/files/msm-javolution-serializer-cglib-1.3.0.jar
 http://spymemcached.googlecode.com/files/memcached-2.4.2.jar
 http://memcached-session-manager.googlecode.com/files/javolution-5.4.3.1.jar
 
 然后在你的应用配置文件myproject.xml为自己的应用增加session共享
 
<Context docBase="D:\appBase\project\myproject-1.0.war" path="myproject" reloadable="true">
	<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"  
    memcachedNodes="n1:localhost:11211"  
    requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"  
    sessionBackupAsync="false"  
    sessionBackupTimeout="20"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"  
    copyCollectionsForSerialization="false"  
    />
</Context>




这样就算大功告成了,启动memcached、两台tomcat和nginx,
访问http://localhost/myproject 实际浏览器默认是通过请求的80端口
所以nginx监听到80端口后,根据负载均衡服务器列表中服务的权重,分发到应用服务上的8080或9080端口上,
当其中一台收到请求,会将sessionid同步到memcached服务器中,返回结果,当再一次请求分发到另一台应用服务器上时,可以通过memcached获取同步session数据,实现session的共享。


参考:
http://www.cnblogs.com/xiaogangqq123/archive/2011/03/02/1969006.html
http://www.blogjava.net/libin2722/articles/352841.html
http://www.iteye.com/topic/676347

你可能感兴趣的:(nginx+tomcat配置集群负载均衡)