文档章节

Tomcat+redis+nginx配置

五大三粗
 五大三粗
发布于 2015/11/25 10:59
字数 852
阅读 10612
收藏 21

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

为客户开发的一个绩效系统,采用了java web的开发方式,使用了一些spring mvc, mybatis之类的框架。相比于oracle ebs的二次开发,这种开发更加灵活,虽然和ebs集成的时候遇到一些问题,但是最后也都解决了。

在部署的时候,客户要求要能同事承受一两千人在线,相对于客户公司的总人数(七八万人),应该足够了。ebs的二次都是直接部署在oracle ebs的application server上面,之前也没怎么关注过程序的部署。这次采用tomcat部署,考虑到单个tomcat的最大也就能承受500左右的在线人数,这次采用了一个小的集群部署,使用了5个tomcat,反向代理使用的nginx。

现在程序基本稳定,压力测试也都能没什么大的问题,趁着有时间,把部署和配置都整理一下。

准备

apache tomcat 7.0.55

nginx 1.7.2

redis 2.8.9

配置环境使用三个tomcat, 三台tomcat、redis和nginx都在一台机器上,为了方便测试和部署。

大致的整个配置的架构:

tomcat-nginx-redis

在这个图中,nginx做为反向代理,将客户请求根据权重随机分配给三台tomcat服务器,redis做为三台tomcat的共享session数据服务器。

规划

redis

localhost:6379

nginx

localhost:80

tomcat

localhost:8081
localhost:8082
localhost:8083

配置

tomcat

修改tomcat文件夹中conf/context.xml文件,在context节点下添加如下配置:

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

conf/server.xml文件中的端口根据规划依次修改。

另外要在tomcat的lib文件夹下分别添加三个jar文件,这个地方jar文件的版本有可能会有冲突,配置的时候需要多尝试。我这里的版本如下,是验证过可以使用的,通过maven的库都可以下载到。

tomcat-redis-session-manager-1.2-tomcat-7.jar

jedis-2.2.0.jar

commons-pool-1.6.jar

nginx

修改nginx文件目中的conf/nginx.conf文件为:

#user  nobody;
worker_processes  1;

error_log  logs/error.log;

pid        logs/nginx.pid;

events {
	worker_connections  1024;
}


http {
	include       mime.types;
	default_type  application/octet-stream;

	log_format  main  '$remote_addr - $remote_user [$time_local] 	"$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

	access_log  logs/access.log  main;

	sendfile        on;
	#tcp_nopush     on;

	#keepalive_timeout  0;
	keepalive_timeout  65;

	#gzip  on;

	upstream  localhost   {  
          server   localhost:8081 weight=1;  
          server   localhost:8082 weight=2;  
		  server   localhost:8083 weight=3; 
	}  

	server {
    	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://localhost;  
       	 	proxy_set_header  X-Real-IP  $remote_addr;  
        	client_max_body_size  100m;  
    	}

    	#error_page  404              /404.html;

    	# redirect server error pages to the static page /50x.html
    	#
    	error_page   500 502 503 504  /50x.html;
    	location = /50x.html {
        	root   html;
    	}

	}
}

redis的配置就直接使用默认配置,因为只是测试用,和tomcat一样没有做参数优化配置。

运行

分别启动redis、nginx和三台tomcat。

redis

nginx

tomcat

测试

在三个tomcat的webapps/ROOT目录下,分别添加session.jsp

<%@ 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 3
</body>
</html>

注:每个tomcat下的标示不同

tomcat

tomcat

tomcat

从截图中,可以看出,分别访问了不同的tomcat,但是得到的session却是相同的,说明达到了集群的目的。

在这个架构中,有个明显的瓶颈,就是数据库。因为使用了企业级的oracle数据库,所以在压力测试种也没有出现大的问题。但是作为后续的可以优化的地方,数据库是一定要做读写分离的。

© 著作权归作者所有

上一篇: java内存调优
下一篇: 学习JVM
五大三粗
粉丝 163
博文 2293
码字总数 4767276
作品 0
广州
程序员
私信 提问
加载中

评论(5)

艳飞
艳飞
启动tomcat报错,不知道什么原因?错误信息如下:
java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfig
  at java.lang.Class.getDeclaredConstructors0(Native Method)
  at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
  at java.lang.Class.getConstructor0(Class.java:3075)
  at java.lang.Class.newInstance(Class.java:412)
  at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:145)
咖啡男孩
写的很详细,不错。
姬亚赛
姬亚赛
受教了
有什么关系呢
有什么关系呢
43可以提供下用到的几个jar文件吗?
有什么关系呢
有什么关系呢
大姐,你都改哪里了。也没有个标记。1
配置session共享失败 多tomcat+redis+nginx

配置多个服务器上的tomcat共享session, 按照网上的参考, 安装了redis2.8.3, 在tomcat的context.xml文件中也添加了必要参数. 一开始的时候, 发现报错. 然后把放入session的user实体类添加了序...

合取
2015/12/02
1K
5
Tomcat+redis+nginx 负载均衡session同步

以下均为看了别人博客补充出来的步骤记录。没有太多原理上的说明 session同步的方法是配置tomcat,配合redis目的。显然这种方法是入门级的。 实际上个人认为更专业的途径应该是要在代码层面控...

HeyS1
2016/11/15
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

没有更多内容

加载JDBC驱动

我们平时在连接数据库时需要加载驱动,通常做法是将JDBC驱动程序放在类路径中的某个位置,然后用Class.forName()查找并加载驱动程序。 这也就意味着要么将驱动程序打包到jar中,要么将驱动程...

uknow8692
22分钟前
4
0
TCP三次握手详情

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。 客户端在收发数据前要使用 conn...

vinci321
24分钟前
4
0
适用于PDF文件的MIME媒体类型

使用PDF时,我遇到了MIME类型application/pdf和application/x-pdf等。 这两种类型之间是否存在差异,如果是这样,它是什么? 一个比另一个更受欢迎吗? 我正在开发一个必须提供大量PDF的网络...

技术盛宴
30分钟前
5
0
Docker数据挂载

Docker数据管理 在容器中管理数据主要有两种方式: 数据卷(Volumes) 挂载主机目录(Bind mounts) 数据卷 数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特...

CodingDiary
42分钟前
6
0
jQuery获取特定的选项标签文本

好吧,说我有这个: <select id='list'> <option value='1'>Option A</option> <option value='2'>Option B</option> <option value='3'>Option C</option></select> 如果我想......

javail
46分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部