@网络老鼠技术小屋

网络老鼠技术小屋-涂飞平的博客空间

Tomcat+Redis+Nginx应对大并发访问

7 月前 2

昨天接到省局信息中心通知,今天要完成压力测试。昨天在应用服务器部署了Nginx,以1(Nginx)+3(Tomcat)模式来应对压力测试,由于Web应用需要账户登录,避免Session在不同Tomcat失效的问题,Nginx配置了IP_HASH(根据客户端IP达到粘滞会话目的)模式。这种模式在测试阶段,由于测试环境都在一个内网中,基本上所有的压力最后都压在其中一个Tomcat上,应该是内网段IP经过IP_HASH算法计算后结果一样,所有的访问均打到一台Tomcat中,1+3模式的效果还是没有完全达到。
nginx+tomcat
所以打算今天抽点时间,使用Redis来做Session共享,让Nginx根据实际负载情况将请求转到空闲的Tomcat,达到1+3的最大作用。
nginx-tomcat-redis
从GitHub获取源码:


  git clone https://github.com/jcoleman/tomcat-redis-session-manager

由于这个项目采用Gradle编译,我编写了一个对应的POM文件,以便使用maven进行代码编译:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.orangefunction</groupId>
	<artifactId>jcoleman</artifactId>
	<packaging>jar</packaging>
	<version>2.0.0</version>
	<name>tomcat-redis-session-manager</name>
	<url>https://github.com/jcoleman/tomcat-redis-session-manager</url>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-catalina</artifactId>
			<version>7.0.27</version>
		</dependency>

		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.5.2</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-pool2</artifactId>
			<version>2.2</version>
		</dependency>
	</dependencies>

	<build>
		<finalName>tomcat-redis-session-manager</finalName>
		<plugins>
		<plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <configuration>
        <source>1.7</source>
        <target>1.7</target>
      </configuration>
    </plugin>
	</plugins>
	</build>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<organization>
		<name>yonyou audit</name>
		<url>http://audit.yonyou.com</url>
	</organization>
</project>

注意,这里tomcat的版本根据实际tomcat使用的版本来定。
使用命令

mvn clean package -DskipTests=true

来编译出jar包
使用命令

mvn dependency:copy-dependencies

获取所有的依赖jar包
将以下包:commons-pool2-2.2.jar,jedis-2.5.2.jar,tomcat-redis-session-manager.jar放在三个tomcat/lib目录中。
修改tomcat/conf/context.xml文件,加入以下内容:

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
    <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
         host="localhost"
         port="6379"
         database="0"
         maxInactiveInterval="60" />

都是默认的参数,如果有变化,ip和端口根据实际情况修改!
启动redis,tomcat(3个),nginx,然后通过刷新浏览器。请求被均匀打到不同的tomcat中,效果达到了。
tomcats-server虽然通过了压力测试,但实际使用情况,需要等到11月1日全省试点使用,访问量上来后,才能知道真实的表现。

nginx和tomcat详细配置,可以参考博文:
http://m.blog.csdn.net/chszs/article/details/42610365

评论

"Tomcat+Redis+Nginx应对大并发访问" 有 2 条评论

  • 实际使用效果还是非常好,充分利用了服务器的高效处理能力。

  • 评论:
    5 月前

    试点了一个半月,没啥毛病

编写评论