nginx+tomcat+redis集群部署环境的搭建(附环境包)

1.原理介绍

随着网站访问量的日益增大,传统的单一web 应用实例部署方式,已完全无法满足高并发的需求,集群化部署势在必行。

集群部署即一个应用多实例部署,通过负载均衡将客户端高并发求情分散到集群部署的多个实例中去,实例处理完客户端请求,将结果返回个客户端;
集群部署的服务器对外提供统一访问接口,后端的部署对客户端来说是透明的。随之访问量的不断增大可灵活的增加实例的部署数量;

集群部署存在的问题:
session 共享问题,在单实例tomcat部署中,所有客户端访问的session由tomcat统一保存;但在多实例集群部署的环境中,各tomcat节点的保存的session是不能互相访问的,这会导致客户端在访问集群中不同节点的时候重复认证。

解决方案:

通过redis或memcache 将各tomcat实例中的session保存到公共区域。如图所示


本文主要介绍如果通过nginx+tomcat+redis实现tomcat集群化部署;

2.部署方案

操作系统:win10

tomcatA + tomcatB+ tomcatC 部署三个tomcat实例

nginx1.4.7 做负载均衡和反向代理

redis3.2 实现三个tomcat实例间的session共享

为了方便大家部署练习,文章中的部署环境我已经打包,下载地址:

https://download.csdn.net/download/bdqx_007/10618070

https://pan.baidu.com/s/1L1GpdYRsOMgEMxTmxMmxqg

3.安装配置

3.1 nginx的配置

版本:nginx-1.4.7

编辑 nginx 安装目录/conf/nginx.conf 配置文件,修改配置文件如下:

   upstream local_tomcat{
        server localhost:8080 weight=10;   #tomcatA ip port  
        server localhost:8180 weight=1;    #tomcatB ip port  
        server localhost:8280 weight=1;    #tomcatC ip port  
    }
    server {
        listen       8888; 
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass http://local_tomcat;
        }

#upstream local_tomat 为新增部分,分别对应三个tomcat实例的IP及端口,由于是本机部署所以ip部分配成了localhost,实际部署中将localhost 修改为具体IP地址

weight 默认为1.weight越大,负载的权重就越大。

proxy_pass属性表示代理路径,表示nginx可以将请求转发到该链接

nginx 不能正常启动解决方法:

a.安装目录不能有中文路径;

b.80端口被占用,修改配置文件为其他端口即可,我的80端口被占用了修改为8888

3.2 tomcat的安装配置

版本tomcat7

第一步:修改tomcat目录/conf/context.xml,修改配置如下:

    <WatchedResource>WEB-INF/web.xml</WatchedResource>
<!-- tomcat-redis-session共享配置 -->  
    <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
         host="localhost"   
         port="6379"
         password="123456"
         database="0"   
         maxInactiveInterval="60" />

该配置的作用是将tomcat的session对象放到redis里面,host是安装redis服务器的ip,port是redis的端口,database是使用redis的哪个数据库。

第二步:修改tomcat目录/conf/server.xml

		<Executor name="tomcatThreadPool"        
          namePrefix="HTTP-8088-exec-"    
          prestartminSpareThreads="true"  
          maxThreads="5000"               
          maxQueueSize="100"             
          minSpareThreads="50"            
          maxIdleTime="10000"            
	/>
    <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="5000"
			   executor="tomcatThreadPool"
			   proxyPort="443"
               redirectPort="443"
			   URIEncoding="UTF-8" />

此处仅需修改tomcatA 监听端口为8080即可,线程池的配置及tomcat调优可参考我的另一篇文章

第三步: 将tomcat需要的redis jar包拷贝到 tomcat安装目录/lib  目录下:

本例使用的jar包如下三个,比较难找,大家不想费劲找的话,可以在我提供的链接中查找;

jedis-2.6.1.jar

commons-pool2-2.2.jar

tomcat-redis-session-manager1.2.jar

第四步:复制tomcatA目录,修改目录名为tomcatB 和tomcatC,修改tomcatB的监听端口为8180,tomcatC的监听端口为8280

至此tomcat配置完毕

3.3 redis的安装配置

版本:redis3.2

这个没什么特殊的,安装方法如下:

https://blog.csdn.net/gyshun/article/details/79297107

4 测试

依次启动tomcatA tomcatB tomatC  redis 及nginx 

编写测试用例session.jsp如下,将session.jsp 复制三份,分别放到三个tomcat实例的 \webapps\ROOT\ 目录下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>shared session</title>
</head>
<body>
    <br>session id=<%=session.getId()%>

    <br>tomcat B <!-- 此处记得针对不同实例名,要进行修改,否则看不出效果-->
</body>
</html>

访问nginx服务器localhost/8888/session.jsp,刷新网页,可以看到服务器名称发生变化,而sessionId不变

说明配置成功;

至此nginx+tomcat+redis 集群化部署配置完毕!

为了方便大家部署练习,文章中的部署环境我已经打包,下载地址:

https://download.csdn.net/download/bdqx_007/10618070

https://pan.baidu.com/s/1L1GpdYRsOMgEMxTmxMmxqg

 

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值