- 浏览: 3503553 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wanglf1207:
EJB的确是个不错的产品,只是因为用起来有点门槛,招来太多人吐 ...
weblogic-ejb-jar.xml的元素解析 -
qwfys200:
总结的不错。
Spring Web Flow 2.0 入门 -
u011577913:
u011577913 写道也能给我发一份翻译文档? 邮件437 ...
Hazelcast 参考文档-4 -
u011577913:
也能给我发一份翻译文档?
Hazelcast 参考文档-4 -
songzj001:
DbUnit入门实战
Nginx+tomcat 做负载均衡
架构描述
前端一台nginx 服务器做负载均衡器,后端放N 台tomcat 组成集群处理服务,通过nginx 转发到后面(注:没做动静分离,静态动态全部都转给tomcat )
优点:实现了可弹性化的架构,在压力增大的时候可以临时添加tomcat 服务器添加到这个架构里面去
一,配置nginx
1, 下载包
Wget http://sysoev.ru/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.abc.com ;
# 对 / 所有做负载均衡 (本机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`
case $1 in
start)
/nginx/sbin/nginx;
;;
stop)
kill -2 `ps -ef|grep "/nginx/sbin/nginx"|grep -v "grep"|awk '{print $2}' `
;;
restart)
cd "$CMD"
$0 stop
$0 start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
二,配置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
配置文件
a.
找到Engine
标签,加入属性 jvmRoute="worker1"
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
中用户的某一个数据,那么通常就是:
User user = (User)request.getSession().getAttribute(“user”);
User.setName(“my name”);
这样我们就是直接存取出来,然后进行修改,虽然在单机情况下没有问题,但是在集群条件下,这样就导致了多台WEB
服务器上的SESSION
不同步的问题,因为SESSION
并没有改变,Tomcat
无法监视session
中某个数据的值是否发生了变化。因此,我们还需要执行如下操作以保证SESSION
的同步:
Request.getSession().setAttribute(“user”, user);
所以,我们在操作SESSION
的时候要特别注意!另外的建议就是,我们应该尽可能的不要修改SESSION
中的数据。
可能经常会遇到session 复制不正常的情况。除了在服务端找原因再也程序上找下原因。都是有可能导致session 复制不正常的
2. 页面同步
为确保后面tomcat 的服务器上的页面程序是一致的,可以采用如下方式
a,rsync 同步,或者做成页面按钮,提供给编辑,修改了程序即使点击同步
b, 共享区域存储,或者采取drbd 网络raid 模式
3 ,确认nginx 可以转发成功,
在nginx 上wget 一下后面转发的url (包过端口),如果可以打开,那就可以转发过去。如果不能打开,则无法转发
发表评论
-
collectd
2011-08-03 14:27 2281collectd是一个守护(daemon)进程,用来收集系 ... -
HP ASR(Automatic Server Recovery)机制
2011-04-15 14:24 3557ASR(Automatic Server Re ... -
LINUX下用HP的IML工具查看服务器的日志信息
2011-04-14 16:40 4893LINUX下用HP的IML工具查看 ... -
LINUX做服务器的无盘系统
2011-01-26 18:19 1923客户端是支持PXE方式启 ... -
简易搭建一个私有云平台
2010-11-17 18:30 3223众说周知Amazon EC2是一个公共云的计算平台,属于Iaa ... -
[HA]利于heartbeat构建Oracle高可用
2010-09-17 12:41 476910月 24th, 2008 @ Kevin.yuan ... -
服务部署--IP SAN潜在的关键应用
2010-08-26 09:38 2100IP SAN可以说是近几年来存储领域的关键技术之一, ... -
通过HAProxy构建开源负载均衡架构平台
2010-08-09 00:07 50121. 目的 通过此作业指导书,知道如何使用ubu ... -
MySQL负载均衡
2010-08-08 23:39 46901. 添加监控MySQL状态的端口 # vi /etc/se ... -
Ha-proxy 学习
2010-08-08 23:08 8963什么是ha-proxy ... -
SQL Server 各版本的区别
2010-08-08 17:49 4044SQL Server 2005 Enterprise Ed ... -
Oracle数据库11g版本介绍
2010-08-08 17:44 3477无论您是独立开发者、中小企业还是大型企业,这些世界一 ... -
tpmC简单计算法
2010-07-29 18:59 17965计算原则: 以单台服务器性能进行计算,即确保单台服务器工作的时 ... -
KVM遥控服务器群
2010-07-07 15:54 2151众所周知,所谓KVM,就是键盘(Keyboard)、显示器 ... -
数据存储配置参考
2010-07-02 10:07 1792型号 配 置 数量 ... -
More Numbers (OpenDS and a hint at ApacheDS)
2010-04-29 23:45 2478Some more numbers have come in. ... -
利用Copssh在windows下搭建ssh服务
2010-03-09 01:04 13433现在远程维护基本上用ssh连接,linux系 ... -
Taking a load off: Load balancing with balance
2010-03-05 16:00 1783A server is limited in how man ... -
Software Based Load Balancers
2010-03-05 15:57 1841keyword:Load Balance ref: http ... -
SAN,NAS,DAS及其架构之间区别
2010-02-26 14:11 1701随着计算机技术的发展 ...
相关推荐
最后,这个Demo可能包含了qdksDemo这个项目的配置文件、源代码以及部署脚本,帮助我们理解如何在Windows环境中配置Nginx和Tomcat,以及如何实现负载均衡和session共享的详细步骤。用户可以通过解压qdksDemo文件,...
本教程将详细讲解如何通过`Nginx`实现`Tomcat`集群的负载均衡,并实现`session`共享。 首先,我们要理解负载均衡的基本概念。负载均衡是通过将工作负载分散到多个计算资源,以优化资源使用、最大化吞吐量、最小化...
目前只支持tomcat8.5,其它版本的tomcat还没测试,自己配置过很多nginx+tomcat集群+redis实现session共享的系统,经过仔细总结得出这些,可以说是知识的结晶,欢迎大家来下载,不好的地方可以多提,有问题看到的话会...
本文将详细介绍如何在Windows环境下,利用Nginx作为反向代理服务器,与Tomcat集群配合实现负载均衡,并进行session复制,确保用户会话在不同服务器之间的一致性。 首先,Nginx是一款轻量级、高性能的HTTP和反向代理...
这个小例子"nginx+tomcat+redis完成session共享"旨在演示如何通过这三种技术实现跨服务器的用户会话共享,以提升用户体验并简化系统管理。以下是这些技术及其在会话共享中的作用: 1. **Nginx**:Nginx是一款高性能...
`标题`中提到的"使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包",实际上是指利用Redis作为中央缓存来存储和共享session数据,以解决负载均衡下的session丢失问题。 **Redis作为Session存储** Redis...
图文并茂 完成Nginx + Tomcat集群部署及配置
Nginx+Tomcat+Memcached实现tomcat集群和session共享 nginx配置
本文将详细介绍如何在Nginx、Tomcat7和Memcached的环境下实现会话保持,确保用户在多台服务器之间切换时仍能保持其会话状态。 首先,我们要理解会话保持的重要性。在分布式系统中,用户可能与集群中的任何一台...
总的来说,通过Windows上的Nginx和Tomcat集群实现负载均衡与Session共享,可以提高Web服务的可靠性、扩展性和用户体验。这个Demo2可能是一个实践案例,用于演示如何在实际环境中设置这样的架构。务必根据自己的需求...
Nginx+Tomcat7+Memcached集群Session共享 完整例子 主要是利用memcached-session-manager(下面简称msm)开源tomcat插件改变tomcat原始的session存储机制,将session的存储放到分布式缓存memcache中,从而实现对...
在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"**Nginx+Tomcat配置集群负载均衡**"就是实现这一目标的一种常见方案。Nginx是一款高性能的反向代理服务器,常用于处理静态资源和进行负载均衡;Tomcat则是...
在构建高性能、高可用的Web服务时,"nginx+redis负载均衡、session共享"是一个常见的解决方案。这个方案结合了Nginx的反向代理和负载均衡能力,以及Redis的内存数据存储和分布式特性,用于处理高并发场景下的HTTP...
首先大家注意: 本文章中没有session共享,关于session共享我会在下一篇中讲解,先实现Nginx+tomcat负载均衡再实现session共享。 从网上查了好多资料,多走了很多弯路,现在把自己成功的方法拿出来与大家分享。 ...
标题 "Nginx + ...以上知识点涵盖了Nginx、Memcached和Tomcat集群负载均衡的基本原理和实践,对于构建高可用、高性能的Web服务具有重要意义。理解并熟练掌握这些技术,对于提升大型Web应用的运维能力至关重要。
超详细Nginx+Tomcat+Redis搭建高性能负载均衡集群Session共享搭建说明,按文档步骤可轻松搭建并实现session共享
5. **集群高可用性**:为了提高系统的健壮性,可以考虑在每个Tomcat实例上启用session复制或使用粘性会话。这样,当某个Tomcat节点故障时,其已有的会话数据能被其他节点接管,避免用户被迫重新登录。 6. **负载...
技术:reids集群 nginx部署 tomcat负载均衡 说明包含: nginx+redis+tomcat分布式负载均衡文档 session共享资料 安装程序 nginx+redis+tomcat分布式负载均衡部署帮助文档 nginx+redis+tomcat分布式负载均衡...
为了实现负载均衡,Nginx会根据预设的策略(如轮询、权重轮询、最少连接等)将请求分配给后端服务器。在上述示例中,`tomcat1.example.com`的权重设为2,这意味着它将接收双倍的请求。 集群环境的另一个重要方面是...
男孩的天职nginx+tomcat集群+redis存储session 下载的是一个pdf文件,文件里面有视频演示下载地址,以及jdk1.8 tomcat8 nginx 1.8安装笔记,绝对可以用 nginx反向代理tomcat集群,请求轮训给集群的tomcat,session...