由于公司新业务突然上来了,单个Tomcat实例已经不能满足业务发展的需要了,只能通过搭建集群来解决问题了。所以就出现了下面的内容:

1.Redis保存Session信息

为了保存Session信息在集群中可用,所以session信息不能保存Tomcat中,因为如果是这样的话要想实现Session信息的共享就必须通过Session复制的方式来同步Tomcat之间的Session信息,这样比较费力费力而且性能消耗比较大,所以选择通过redis来实现Session信息的保存和共享。

1.1Redis的安装

  教程很多,不做赘述。(http://www.redis.cn/)

1.2Tomcat 使用Redis保存Session信息的配置修改

  下面只考虑一个Redis的情况,如果需要配置Redis的主从和集群还需要其他处理。

1.2.1context.xml修改(位于conf目录下面)

<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60" />

上面的配置文件中className 需要和tomcat-redis-session-manager包的路径信息保持一致,这个可以jar包可以通过Github获取(https://github.com/jcoleman/tomcat-redis-session-manager),自己打包获取,没有从MAVEN中仓库中获取到。

1.2.2server.xml修改(位于conf目录下面)

修改服务监听和关闭端口。

1.3所需要的相关Jar包文件(放在Tomcat下面的lib目录中)

  通过上面的Github地址可以知道,还需要tomcat-redis-session-manager、redis的客户端操作工具jedis以及commons-pool2的支持,但是实际的操作过程中发现还需要commons-logging-1.2\commons-pool-1.6、tomcat-juli-7.0.69的支持。注意注意相应的版本信息问题,如果jedis的版本信息过高就会出错,下面是我的相应的jar包列表。

2.Tomcat集群部署

2.1可以首先简单测试一下上面的Tomcat信息是否完成了Session信息保存在Redis中。很简单,写一个页面访问成功后,打印出相应的Session信息,关闭Tomcat后重启在此访问,判断Session信息是否一致即可,一致说明Session信息成功保存在了redis中,否则没有

2.2将上面的tomcat复制多个即可,注意修改相应的服务端口号信息

3.Nginx

因为有多个Tomcat实例,为了是每一个实例都可以正常的对外服务,所以需要一个统一的请求处理入口,然后通过请求分发来实现对服务的处理,也就是负载均衡和转发 。因为有些其他的特殊需求,要保证每一个服务和IP的关系,通过IP_HASH作为负载均衡的策略处理。

3.1Nginx的安装(centos)

第一步:下载稳定版本的Nginx,解压

第二步:yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel

第三步:进入解压目录 ./configure --with-http_ssl_module

第四步:   make & make install

可以参考文章(http://www.cnblogs.com/skynet/p/4146083.html)

3.2Nginx负责均衡的配置

3.2.1 找到Nginx的安装路径(默认):/usr/local/nginx

3.2.2 修改配置文件conf/nginx.conf

   #设定负载均衡的服务器列表ip_hash
upstream backend {
server 127.0.0.1:8080 ;
server 127.0.0.1:8081 ;
server 127.0.0.1:8082 ;
server 127.0.0.1:8083 ;
ip_hash;
}
        listen       80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / {
root html;
index index.html index.htm;
proxy_pass http://backend;
}

关于nginx的配置文件的使用在这里不做说明。第一个配置需要指明负载发服务器地址和使用负载均衡策略。

4.提供服务

4.1 启动Redis服务

4.2放入服务逐个启动Tomcat

4.3启动Nginx服务

4.4可以正常提供服务了。

5.改进与说明

这只是提供了构建一个Tomcat集群的简单的思路和实现,还有很多完善的地方,针对服务的高可用和稳定性还需要做很多的工作,以后会把服务慢慢的加上去。

Tomcat集群+Nginx+Redis服务搭建的更多相关文章

  1. Nginx+tomcat集群使用redis共享session

    一 :nginx负载均衡 当Tomcat当做独立的Servlet容器来运行时,可看做是能运行Java Servlet的独立Web服务器. 此外 Tomcat还可以作为其他Web服务器进程内或者进程外的 ...

  2. linux搭建tomcat集群+nginx

    安装JDK 一.官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下 ...

  3. Tomcat集群 Nginx负载均衡 shell脚本实时监控Nginx

    第一步,安装Tomcat 系统环境:Centos7 第1步:下载tomcat安装包 tomcat官网:https://tomcat.apache.org/ 第2步:安装包上传至linux中 第3步:下 ...

  4. Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式

    史诗级Java/JavaWeb学习资源免费分享 欢迎关注我的微信公众号:"Java面试通关手册"(坚持原创,分享各种Java学习资源,面试题,优质文章,以及企业级Java实战项目回 ...

  5. linux下利用httpd搭建tomcat集群,实现负载均衡

    公司使用运营管理平台是单点tomcat,使用量大,或者导出较大的运营数据时,会造成平台不可用,现在需要搭建tomcat集群,调研后,决定使用apache的httpd来搭建tomcat集群.以下是搭建步 ...

  6. 【原创】搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群

    为什么移除首页?哪里不符合要求?倒是回我邮件啊! 一.环境搭建 Linux下Vagrant搭建Tomcat7.Java7 二.Nginx的安装配置与测试 *虚拟机下转至root sudo -i 1)下 ...

  7. 搭建Nginx(负载均衡)+Redis(Session共享)+Tomcat集群

    一.环境搭建 Linux下Vagrant搭建Tomcat7.Java7 二.Nginx的安装配置与测试 *虚拟机下转至root sudo -i 1)下载并解压(目前官网最新版本) 创建安装目录:mkd ...

  8. 使用Nginx搭建Tomcat9集群,Redis实现Session共享

    使用Nginx搭建Tomcat9集群,Redis实现Session共享 1.tomcat准备 首先准备两个tomcat9 ,修改配置文件server.xml 如果在多个服务器上分别启动tomcat 则 ...

  9. nginx+tomcat实现集群,redis实现session共享,软连接实现文件共享:http://blog.csdn.net/hua1586981/article/details/78132710

    转载 2017年02月08日 16:52:41 730 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食apache和IIS的份额.那究竟它有什么作用呢?可能很多人未必了解. 说到反向代理,可能 ...

随机推荐

  1. [Oracle] 分析功能(1)- 语法

    语法概览 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZGJhbm90ZQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQ ...

  2. oracle_控制用户权限

     oracle_控制用户权限 ①对 限制     数据库安全:     系统安全     数据安全性     系统权限: 对于数据库的权限     对象权限: 操作数据库对象的权限 1.系统权限 ...

  3. Android 在非主线程无法操作UI意识

    Android在应用显示Dialog是一个非常easy事儿,但我从来没有尝试过Service里面展示Dialog. 经验UI操作要在主线程,本地的服务Service是主线程里没错,可是远程servic ...

  4. 大话设计模式C++实现-文章7章-代理模式

    一个.UML画画 二.概念 代理模式:为其它对象提供一种代理以控制对这个对象的訪问. 三.应用场景 (1)远程代理.也就是为一个对象在不同的地址空间提供局部代表.这样能够隐藏一个对象存在于不同地址空间 ...

  5. POJ--2289--Jamie&#39;s Contact Groups【二分图的多个匹配+二分法答案】

    链接:id=2289">http://poj.org/problem?id=2289 意甲冠军:有n个人,m个分组,每一个人能够分配到一些组别.问怎样分能使得人数最多的组别人数最少. ...

  6. C++几个小函数

    之前看书,遇到几个编程题,要实现一些库自带的函数.于是动手写了写,并且做了一些测试.今晚在测试的时候,还发现了一些其他内存分配的问题,顺路一起记下.这里只写了字符串转整型,字符串赋值函数. #incl ...

  7. java_访问权限修饰符

    java的访问权限修饰符有四种,根据权限由大到小的顺序为:public,protected,包访问权限(默认,没有修饰符),private. 根据修饰的东西不同,详细介绍如下: 1.修饰类的话分为两种 ...

  8. dojo加载树错误

    1.错误叙述性说明    error loading undefined children.    TypeError:this._arrayOfTopLevelItems is undefied. ...

  9. Model绑定

    Model绑定 在前面的几篇文章中我们都是采用在URI中元数据类型进行传参,实际上ASP.NET Web API也提供了对URI进行复杂参数的绑定方式--Model绑定.这里的Model可以简单的理解 ...

  10. X86在逻辑地址、线性地址、理解虚拟地址和物理地址

    参考:http://bbs.chinaunix.net/thread-2083672-1-1.html 本贴涉及的硬件平台是X86.假设是其他平台,不保证能一一对号入座.可是举一反三,我想是全然可行的 ...