tomcat+nginx+redis集群试验

Nginx负载平衡 + Tomcat + 会话存储Redis配置要点

  使用Nginx作为Tomcat的负载平衡器,Tomcat的会话Session数据存储在Redis,能够实现0当机的7x24 运营效果。因为将会话存储在Redis中,因此Nginx就不必配置成stick粘粘某个Tomcat方式,这样才能真正实现后台多个Tomcat负载平 衡,用户请求能够发往任何一个tomcat主机,当我们需要部署新应用代码时,只要停止任何一台tomcat,所有当前在线用户都会导向到运行中的 tomcat实例,因为会话数据被序列化到Redis,在线用户不会受到影响,一旦停掉的tomcat实例上线,另外其他重复部署过程。

Nginx

  首先,我们安装Nginx:

$ sudo rpm -ivh nginx-1.4.2-1.el6.ngx.x86_64.rpm

编辑/etc/nginx/nginx.conf,加入负载平衡配置:

http {

upstream tomcat  {

server localhost:8080;

server localhost:8081;

}

include       /etc/nginx/mime.types;

default_type  application/octet-stream;

更新/etc/nginx/conf.d/default.conf,用下面location配置替代原来:

location / {

proxy_pass  http://tomcat;

}

重新启动Nginx:

sudo service nginx restart

Tomcat实例

  下面我们开始安装两个Tomcat实例,改变第二个服务器端口,防止它们冲突,这时如果你在浏览器输入 https://localhost,我们访问到缺省的Tomcat页面,因为我们没有设置会话粘粘sticky sessions,每个请求分发使用负载平衡round robin算法,也就是意味着每次请求都会创建一个新的会话,通过tomcat内建案例可以方便看到这种行为,进入http://localhost/examples/servlets/servlet/SessionExample,过一会儿刷新一下这个页面,注意到每次Session ID都会改变,让我们来解决这个问题。

  下载安装Redis,在http://redis.io/download 有文档说明如何安装和启动,启动服务器以后,使用客户端程序检查是否正在工作。

  最后,我们需要配置Tomcat存储会话到Redis,我们需要使用 tomcat-redis-session-manager开源库包,具体需要一些调整,下载这个项目的源码项目,重新构建,本文使用版本为commons-pool2-2.2.jar 和 jedis-2.6.1.jar.复制这些Jar到tomcat的lib目录。

  将你的commons-pool, jedis 更新版本和tomcat版本在tomcat-redis-session-manager的build.gradle中配置一下,然后重新构 建项目,将构建结果 tomcat-redis-session-manager-1.2.jar 复制到tomcat lib目录下,两个实例都要复制,在tomcat的context.xml中配置:

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />

<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"

host="localhost"

port="6379"

database="0"

maxInactiveInterval="60" />

  重新启动tomcat一切完成,你现在可以看到tomcat会话存储在redis中,使用先前tomcat内置案例,试验两个tomcat开机和关机不同情况进行测试,会话数据都不会受到影响。

tomcat+nginx+redis集群试验

2014-08-01 15:10:06本站整理浏览(1432)

tomcat+nginx+redis集群试验,有需要的朋友可以参考下。

redis的安装不说了

只说处理session的问题。

首先要下载三个包:tomcat-redis-session-manager.jar and
jedis-2.0.0.jar,和commons-pool-1.6.jar,最开始用的包是commons-pool-2点多的,但是不是启动
tomcat的时候报错,说找不到org.apache.commons.pool什么什么类,然后我把commons-pool-2点多的那个jar包
解压后看到它的包名是org.apache.commons.pool2,所以才会发生上述的错误,因此我就换成了commons-pool-
1.6.jar。然后启动成功。

然后在tomcat的conf/server.xml中的Host节点中配置如下:

 <Context path="" docBase="/usr/local/tomcat/webapps/web" debug="0" reloadable="true">
        <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
        <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
            host="localhost"
            port="6379"
            database="0"
            maxInactiveInterval="60"
         />
</Context>

本来是照着官网https://github.com/jcoleman/tomcat-redis-session-manager,这个上面配置的,但是报错,xml解析错误,把注释去掉就好了。

nginx安装之前的博客中有,下面说一下配置:

在http节点中,添加如下:

upstream myproject {
<span style="white-space:pre">	</span>#这个是配置后端的tomcat,我是在本地启动了两个tomcat,一个端口为8080,一个为8081
       server localhost:8080;
       server localhost:8081;
<span style="white-space:pre">	</span>#下面这三行可以注释掉,这是因为之前用nginx配置根据jvm进行负载均衡
     #  server localhost:8080 srun_id:jvm1;
     #  server localhost:8081 srun_id:jvm2;
     #  jvm_route $cookie_JSESSIONID|sessionid reverse;
    }

在location节点下配置:

 location / {
        #     root   html;
        #    index  index.html index.htm;
        add_header Cache-Control ‘no-store‘;
         client_max_body_size 100m;
         proxy_set_header Host $http_host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #         proxy_cache Z;
         proxy_cache_valid 200 1m;
<span style="white-space:pre">	</span>#重要的是这里,这里的Myproject和上面的那段配置中的myproject名字一样就可以了,非常简单
         proxy_pass   http://myproject;
        }

两个tomcat,端口设为不一样的,然后每个tomcat里面部署一个项目,当然项目非常简单,tomcat1里面有一个index.jsp,一个test.jsp,tomcat2里面有一个index.jsp

tomcat1中的index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<html>
<body>

SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 111111锛.);
%>

<%=(String)session.getAttribute("user")%>
</body>
</html>

tomcat1中的test.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<html>
<body>
<%
       session.setAttribute("user","12345");
%>

        test session;
</body>
</html>

tomcat2中的index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
<html>
<body>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<%
out.println("This is Tomcat Server 222222锛.);
%>

<%=(String)session.getAttribute("user")%>
</body>
</html>

两个tomcat的server.xml都需要配置,两个tomcat都需要把那三个包放在tomcat目录的lib目录下面。完了之后就可以分别启动两个tomcat了。

然后进nginx的bin目录下,直接./nginx启动nginx

然后运行http://YourIP/,

会发现基本上是tomcat1-tomcat2-tomcat1-tomcat2,进每个server的频率基本一致。然
后运行http://YourIP/test.jsp,页面出来之后再运行http://YourIP/,可以看到每个tomcat的index.jsp
页面都打印出来了user的值。

至此,试验成功!

由于本人工作比较忙,每次写博客都写的很乱,主要是给自己看。如果大家有什么地方有疑问,或者我写的不对,可以通过评论提出来,我看到后会及时回复,和大家一起交流。

时间: 2024-10-06 01:22:49

tomcat+nginx+redis集群试验的相关文章

Tomcat+Nginx+Memcacheed集群部署

主机环境 redhat6.5 64位 实验环境 服务端1 ip172.25.29.1   nginx 服务端2 ip 172.25.29.2    tomcat+memcached 服务端3 ip 172.25.29.3    tomcat+memcaceed 安装包  jdk-7u79-linux-x64.tar.gz apache-tomcat-7.0.37.tar.gz nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz asm

redhat6.5 Tomcat+Nginx+Memcacheed集群部署

主机环境 redhat6.5 64位 实验环境 服务端1 ip172.25.29.1   nginx 服务端2 ip 172.25.29.2    tomcat+memcached 服务端3 ip 172.25.29.3    tomcat+memcaceed 安装包  jdk-7u79-linux-x64.tar.gz apache-tomcat-7.0.37.tar.gz nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz asm

Tomcat8+Redis+Nginx实现集群

Tomcat8.5.14+Redis+Nginx实现集群 知识点 1)什么是集群 集群是一组相互独立的.通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理. 说白了就是同一个业务,部署在多个服务器上. 2)集群所遇到的问题 session共享 基于NFS的Session共享 基于数据库的Session共享 基于Cookie的Session共享 基于缓存的Session共享(本次选用这种方式) 3)集群优点 提高性能 降低成本 提高可扩展性 增强可靠性 测试环境 JDK版本:J

LVS+Keepalived+Nginx+Tomcat高可用集群搭建(转)

LVS+Keepalived+Nginx+Tomcat高可用集群搭建 最近公司重整架构,十几台服务器而且还要尽可能节约成本.我就谷歌了一下在几种集群之前进行比较最终采用了Keepalived+Nginx做负债均衡高可用.虽然之前也研究过集群,看过很多集群方面的原理和架构,但毕竟没有真正操作过以下案例是在虚拟机中完成实验其实对于高可用搭建来说只用给出Keepalived和Nginx的配置即可后面的一些安装搭建完全是本人项目需要可以不用理睬仅供参考. 本文只是实验搭建记录方便以后在服务器中实施搭建.

Nginx Redis redis分片 redis哨兵 redis集群 等 常用命令

Nginx  Redis  redis分片  redis哨兵  redis集群 等 常用命令 1.1.1 Nginx命令 前提:nginx的命令执行,必须在nginx的根目录中完成 命令: 1.启动nginx     start nginx 2.重启nginx     nginx -s reload 3.关闭nginx     nginx -s stop Linux命令 1.1.2 cd命令集 ifconfig  检查IP地址 cd命令是linux中最基本的命令语句,必须熟练掌握 cd / 返回

【转载】tomcat+nginx+redis实现均衡负载、session共享(一)

http://www.cnblogs.com/zhrxidian/p/5432886.html 在项目运营时,我们都会遇到一个问题,项目需要更新时,我们可能需先暂时关闭下服务器来更新.但这可能会出现一些状况: 1.用户还在操作,被强迫终止了(我们可以看日志等没人操作的时候更新,但总可能会有万一) 2.不知道的用户可能会想网站是不是被攻击了,降低了对网站的信任程度,从而导致失去部分潜在客户,这点尤其对金融互联网公司不利. 在查了一些资料后,决定采用Tomcat + Nginx + Redis来实现

架构设计:系统存储(18)——Redis集群方案:高性能

1.概述 通过上一篇文章(<架构设计:系统存储(17)--Redis集群方案:高可用>)的内容,Redis主从复制的基本功能和进行Redis高可用集群监控的Sentinel基本功能基本呈现给了读者.虽然本人并不清楚上一篇根据笔者实际工作经验所撰写的文章有什么重大问题,导致那么多朋友集体点踩而且截止目前又没有任何人愿意为笔者指出这些问题,但是这不会影响笔者继续学习.总结技术知识的热情.从这篇文章开始我们一起来讨论Redis中两种高性能集群方案,并且在讨论过程中将上一篇文章介绍的高可用集群方案结合

tomcat实现session集群及tomcat+memcached共享session存储(四)

接博客nginx或httpd实现负载均衡tomcat(三) tomcat实现会话管理原理及实现: tomcat管理会话使用的专用的会话管理组件,tomcat的会话管理器有4种: 1.标准会话管理器(StanderdManager) 2.持久会话管理器(PersistentManager可以基于文件存储(FileStore)或JDBC存储(JDBCStore)) 基于JDBC的话就可以实现高可用tomcat的session集群. 1.DeltaManager会话管理器 2.BackupManage

Redis集群方案(来自网络)

参考: https://www.zhihu.com/question/21419897 http://www.cnblogs.com/haoxinyue/p/redis.html 为什么集群? 通常,为了提高网站响应速度,总是把热点数据保存在内存中而不是直接从后端数据库中读取.Redis是一个很好的Cache工具.大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,在这种情况下,如何正确架构Redis呢? 首先,无论我们是使用自己的物理主机,还是使用云服务主机,内存资源往往是有限制的,