nginx+tomcat集群负载均衡(实现 session复制)关键字: nginx+tomcat集群负载均衡
Nginx+tomcat 做负载均衡 http://blog./u2/83793/showart_1354266.html 架构描述 前端一台nginx服务器做负载均衡器,后端放N台tomcat组成集群处理服务,通过nginx转发到后面(注:没做动静分离,静态动态全部都转给tomcat) 优点:实现了可弹性化的架构,在压力增大的时候可以临时添加tomcat服务器添
加到这个架构里面去 一,配置nginx 1, 下载包 Wget http:///nginx/nginx-0.6.32.tar.gz ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 2, 安装nginx包 a.安装pcre tar zxvf pcre-7.2.tar.gz cd pcre ./configure --prefix
= /pcre Make;make
install b,安装nginx tar zxvf
nginx-0.6.32.tar.gz cd nginx-0.6.32 ./configure --prefix=/nginx
–with-pcre=/pcre --with-http_rewrite_module Make;make install 3, 修改配置文件 Vi /nginx/conf/nginx.conf #用户组 user nobody nobody; #cpu个数,可以按照实际服务器来计算 worker_processes 8; worker_rlimit_nofile 51200; events { use epoll; #连接数 worker_connections 8192 ; } http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size
128; # access_log off; # access_log logs/access.log; #缓存的时间,(可以根据不同文件设置不同时间) # expires 2h; tcp_nodelay on; keepalive_timeout 30; gzip on; gzip_min_length 10; gzip_buffers 4
8k; gzip_http_version 1.1; gzip_types text/plain
application/x-javascript text/css text/html application/xml; sendfile on; tcp_nopush on; reset_timedout_connection on; client_max_body_size 30m; #设定负载均衡列表 upstream backend { server 172.23.254.2:8080; server 172.23.254.3:8080; } #设定虚拟主机 server { listen 80; server_name www.; #对 / 所有做负载均衡 (本机nginx采
用完全转发,所有请求都转发到后端的tomcat集群) location / { root /web/www ; index index.jsp index.htm
index.html; 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; proxy_pass http://backend; } } } 主要在配置proxy与upstream Upstream具有负载均衡能力,可以自动判断下面的机器,并且自动踢出不能正常提供服务的机器。 4,启动程序 /nginx/sbin/nginx 5,编写启动脚本 Vi nginx.sh #!/bin/sh CWD=`pwd` 二,配置tomcat 1, 下载tomcat5.59 tar zxvf tomcat5.59 2,修改配置文件 a,配置数据源 b,优化tomcat最大并发数 <Connector
port="8080" maxHttpHeaderSize="8192" maxThreads="2048"
minSpareThreads="100" maxSpareThreads="200" enableLookups="false"
redirectPort="8443" acceptCount="500" connectionTimeout="20000"
disableUploadTimeout="true" /> c,添加虚拟主机 (注,主转发的虚拟主机必须用localhost,否则nginx不能通过内网ip转发,而只有通过域名转发 d,测试 打开http://ip:8080 页面能访问则正常 2, 其他的tomcat服务器也用同样的配置 三,做tomcat集群 两台机器 172.23.254.2 172.23.254.3 做集群需要修改的文件配置有三个地方 1,
修改conf/server.xml配置文件 b.找到Cluster标签,去掉注释,同时修改tcpListenAddress为本机ip
172.23.254.2 (注:这一段Cluster必须放在hosts里面) 2, 修
改应用的web.xml 修改web应用里面WEB-INF目录下的web.xml文件,加入标签 <distributable/> 直接加在</web-app>之
前就可以了 这个是加入tomcat的session复制的,做tomcat集群必须需要这一
步,否则用户的session就无法正常使用。 3, 开
启防火墙 这两个tomcat之间必须开启防火墙信
任。 分别启动两个tomcat,查看每一个tomcat是否都启动了8080端口以及4001端口 再用netstat –an 查看链接情况 tcp 0 0
172.23.254.2:43320 172.23.254.3:4001 ESTABLISHED tcp 0 0
172.23.254.2:46544 172.23.254.3:4001 TIME_WAIT tcp 0 0
172.23.254.2:40118 172.23.254.3:4001 ESTABLISHED tcp 0 0
172.23.254.2:4001 172.23.254.3:48804 ESTABLISHED tcp 0 0
172.23.254.2:4001 172.23.254.3:34254 ESTABLISHED 如果两台机器的4001端口分别建立了连
接,则说明集群配置成功,可以进行session复制。 可能存在的问题 1, session复
制问题 以前用apache做负载均衡的时候,是选
择了用 session sticky的模式,这样的话,用户每次进来都会是同一个服务器中的session,不会被转发到其他的服务器上。在这样的情况下,tomcat即
使不做session复制也不会影响用户访问。但是nginx并
不支持sticky功能。所以必须要做session复
制。否则很多地方就根本没法用。比如登录过程,先等到了第一个tomcat上,产生了一个session,在刷新页面,刷到另外一个tomcat的
机器上,没有这个session,就会出现问题了。所以程序员在写jsp的时候也要注意这一点 举个简单的例子,比如我们在单机应用情况下修改SESSION中用户的某一个数据,那么通常就是: 可能经常会遇到session复
制不正常的情况。除了在服务端找原因再也程序上找下原因。都是有可能导致session复制不正常
的 2.页面同步 为确保后面tomcat的
服务器上的页面程序是一致的,可以采用如下方式 a,rsync同步,或者做成页面按钮,提供给编辑,修改了程序即使点击同步 b,共享区域存储,或者采取drbd网
络raid模式 3,确认nginx可以转发成功, 在nginx上wget一下后面转发的url(包过端口),如果可以打
开,那就可以转发过去。如果不能打开,则无法转发 |
|
来自: ShangShujie > 《资料》