memcached演练(3) 使用memcached搭建tomcat集群

上篇文章,已经明确了tomcat集群的必要性,主要从高可用和高并发量考虑。一般使用tomcat集群搭建,都要使用前置设一个nginx或apache作个反向代理,将请求转发给后端tomcat。使用tomcat集群,必然会引来session数据共享问题。如何解决这个问题?可借助memcached实现。

主要内容

  1. 测试单台tomcat的吞吐率
  2. 搭建apache+mod_jk+2个tomcat集群环境
  3. 搭建apache+mod_jk+2个tomcat+memcached集群环境
  4. 对比2个环境的吞吐率情况

环境准备

确认apache服务位置及版本号

[[email protected] httpd]# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Feb 22 2013 11:17:44
[[email protected] httpd]# which httpd
/usr/sbin/httpd
#apache主目录:/etc/httpd

确认JDK 及tomcat服务

[[email protected] tomcat-sets]$ ls /u01/tomcat-sets
apache-tomcat-node1
[[email protected] apache-tomcat-node1]$ cat /proc/meminfo 
MemTotal:        1937148 kB
...
[[email protected] /]$ /u01/tomcat-sets/apache-tomcat-node1/bin/version.sh 
Using CATALINA_BASE:   /u01/tomcat-sets/apache-tomcat-node1
Using CATALINA_HOME:   /u01/tomcat-sets/apache-tomcat-node1
Using CATALINA_TMPDIR: /u01/tomcat-sets/apache-tomcat-node1/temp
Using JRE_HOME:        /usr/local/java/jdk1.6.0_45
...
Server version: Apache Tomcat/7.0.33
Server built:   Nov 18 2012 04:15:21
Server number:  7.0.33.0
OS Name:        Linux
OS Version:     2.6.32-358.el6.i686
Architecture:   i386
JVM Version:    1.6.0_45-b06
JVM Vendor:     Sun Microsystems Inc.

1.测试单台tomcat的吞吐率

1.1准备一个静态测试资源(staticProtocal.html,大小50K)

资源可以通过http://192.168.163.146:8080/examples/staticProtocal.html访问

[[email protected] examples]$ ll /u01/tomcat-sets/apache-tomcat-node1/webapps/examples
total 72
-rw-r--r--.  1 hadoop hadoop  1179 Nov 19  2012 index.html
drwxr-xr-x. 22 hadoop hadoop  4096 Aug 10 18:48 jsp
drwxr-xr-x.  3 hadoop hadoop  4096 Aug 10 18:48 servlets
-rw-rw-r--.  1 hadoop hadoop 50663 Aug 12 21:09 staticProtocal.html
drwxr-xr-x.  7 hadoop hadoop  4096 Aug 10 18:48 WEB-INF
drwxr-xr-x.  2 hadoop hadoop  4096 Aug 10 18:48 websocket

1.2启动apache-tomcat-node1,端口为默认的8080

1.3 在另外一台主机使用apache ab命令测试

C:\Apache24\bin>ab  -n 10000 -c 4  http://192.168.163.146:8080/examples/staticProtocal.html
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.163.146 (be patient)
Completed 1000 requests
...
Completed 10000 requests
Finished 10000 requests

Server Software:        Apache-Coyote/1.1
Server Hostname:        192.168.163.146
Server Port:            8080

Document Path:          /examples/staticProtocal.html
Document Length:        50663 bytes

Concurrency Level:      4
Time taken for tests:   12.065 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      509120000 bytes
HTML transferred:       506630000 bytes
Requests per second:    828.81 [#/sec] (mean)
Time per request:       4.826 [ms] (mean)
Time per request:       1.207 [ms] (mean, across all concurrent requests)
Transfer rate:          41207.63 [Kbytes/sec] received
...

经过测试,单台tomcat的结果是:QPS:828.81

都有这样一个共识,apache处理静态文件的能力,比tomcat强大。是骡子是马,比比看。

1.4 简单编辑apache配置文件httpd.conf。(最好修改之前备份下)

$ cat /etc/httpd/conf/httpd.conf 
...
ServerName localhost:80
DocumentRoot "/var/www/html"
...

1.5 将刚才的staticProtocal.html文件,复制到DocumentRoot“/var/www/html”目录下。

$ ls /var/www/html/
staticProtocal.html

1.6 启动httpd

$  service httpd start
Starting httpd: [  OK  ]

这时候可以通过链接访问资源:http://192.168.163.146/staticProtocal.html

1.7 测试apache吞吐量

C:\Apache24\bin>ab  -n 10000 -c 4  http://192.168.163.146/staticProtocal.html
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.163.146 (be patient)
Completed 1000 requests
...
Finished 10000 requests

Server Software:        Apache/2.2.15
Server Hostname:        192.168.163.146
Server Port:            80

Document Path:          /staticProtocal.html
Document Length:        50663 bytes

Concurrency Level:      4
Time taken for tests:   11.902 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      509350000 bytes
HTML transferred:       506630000 bytes
Requests per second:    840.17 [#/sec] (mean)
Time per request:       4.761 [ms] (mean)
Time per request:       1.190 [ms] (mean, across all concurrent requests)
Transfer rate:          41790.94 [Kbytes/sec] received

经过测试,单台apache的结果是:QPS:840.17

显而易见,apache处理静态文件能力略高于tomcat.

接下来,那就利用apache搭建一个双节点tomcat集群,顺带验证下QPS能达到多少。这是下一小节内容。

2.搭建apache+mod_jk+2个tomcat集群环境

2.1下载mod_jk并安装

要安装httpd-devel,否则会configure: error: Cannot find the WebServer

#  yum install httpd-devel
## 安装完httpd-devel之后,新添加目录/usr/sbin/apxs
##下载
# wget 
##解压
 # tar zxvf tomcat-connectors-1.2.41-src.tar.gz 
 # cd tomcat-connectors-1.2.41-src/native
 # ./buildconf.sh --with-apxs=/usr/sbin/apxs
 # make

到这里mod_jk.so已经生成了,最后将mod_jk.so放到apache的modules 目录下

cp /u01/software/tomcat-connectors-1.2.41-src/native/apache-2.0/mod_jk.so  /etc/httpd/modules

2.2配置mod_jk

请参考:http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html

mod_jk:支持平台Linux, FreeBSD, AIX, HP-UX, MacOS X, Solaris,Apache 1.3 and/or 2.x

mod_jk: 支持Tomcat 3.2 to Tomcat 8.

redirector 使用协议:ajp12 and ajp13

ajp12 协议针对Tomcat 3.2.x and 3.3.x.

ajp13协议支持tomcat 4+

mod_jk:2个组成部分。

The Apache HTTP Server module。由平台决定,一般是mod_jk.so, mod_jk.nlm or MOD_JK.SRVPGM

workers.properties :描述Tomcat 相关的host(s) and port(s)文件。

2.3启用jk_module模块

将下面内容片段,加入/etc/httpd/httpd.conf

# Load mod_jk module
LoadModule    jk_module  modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkLogFile logs/mod_jk.log
JkLogLevel  info
include "conf/mod_jk.conf"

2.4 配置后端tomcat 主机及端口映射,编辑或新建文件,/etc/httpd/workers.properties

配置说明参照:https://tomcat.apache.org/connectors-doc/reference/workers.html

worker.list=tomcat1
worker.tomcat1.port=8009
worker.tomcat1.host=127.0.0.1
worker.tomcat1.type=ajp13
#worker.tomcat1.lbfactor=1

现在达到的效果是apache反代1个tomcat。所以不需要配置额外的负载均衡等信息。

2.5 编辑conf/mod_jk.conf,增加资源映射

#LoadModule jk_module modules/mod_jk.so
JkMount  /*.jsp tomcat1
JkMount  /examples/* tomcat1
#JkWorkersFile conf/workers.properties

注释的两行,由于已经在httpd.conf中已经配置,所以不需要重复配置。

2.6 启动tomcat,及apache

笔者,在这一步经过测试,不能正常达到代理效果。

通过查看日志信息(/var/log/httpd/mod_jk.log)

[Fri Aug 12 22:49:23.051 2016] [9739:3078039376] [error] init_jk::mod_jk.c (3574): Initializing shm:/etc/httpd/logs/jk-runtime-status.9739 errno=13. Load balancing workers will not function properly.

通过参照网上解决方案:临时将selinux关闭

确认selinux状态
 /usr/sbin/sestatus -v 
临时关闭
  setenforce 0 
永久关闭
  修改/etc/selinux/config    设置为 SELINUX=disabled

访问测试,没有问题

http://192.168.163.146/examples/servlets/

http://192.168.163.146:8080/examples/servlets/

到了这里,完成了apache+单台tomcat的配置。

C:\Apache24\bin>ab  -n 10000 -c 4  http://192.168.163.146/examples/staticProtocal.html
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 192.168.163.146 (be patient)
Completed 1000 requests
...
Completed 10000 requests
Finished 10000 requests

Server Software:        Apache/2.2.15
Server Hostname:        192.168.163.146
Server Port:            80

Document Path:          /examples/staticProtocal.html
Document Length:        50663 bytes

Concurrency Level:      4
Time taken for tests:   13.555 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      509320000 bytes
HTML transferred:       506630000 bytes
Requests per second:    737.73 [#/sec] (mean)
Time per request:       5.422 [ms] (mean)
Time per request:       1.356 [ms] (mean, across all concurrent requests)
Transfer rate:          36693.36 [Kbytes/sec] received

很遗憾,apache+tomcat组合的QPS:737.73

-------------

未完待续

时间: 2024-08-03 20:21:22

memcached演练(3) 使用memcached搭建tomcat集群的相关文章

Tengine(nginx) 搭建Tomcat集群

好久没有更新学习的内容了,就是得强迫自己写点东西 记录自己的学习,才能更好的进步! Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验.它的最终目标是打造一个高效.稳定.安全.易用的Web平台. 首先将Tengin上传到Linux服务器上,然后进行解压 安装依赖 yum -y install gcc openssl-devel pcre-deve

(apache+tomcat集群+memcached番外篇)单台tomcat的session信息的2种持久化方式

为什么要实现搭建tomcat集群环境呢?主要因为单个tomcat无论从吞吐量和并发数上,会达到一定的极限.如果访问量超过单个tomcat的承受能力的话,tomcat一般要么拒绝提供服务,要么直接宕掉.所以,必须要依靠tomcat集群技术.举个最简单的例子,拿"送快件"比喻,如果一个人,5分钟送一件,一小时之内,送10个,一个人完全能胜任这项工作.假设现在到了双十一,要求1小时,送100个, 那怎么办?只能安排更多的人加入"送快件"这项工作中来.这其实和集群一个道理.

Java企业级电商项目实战 Tomcat集群与Redis分布式

本套课程包含:java电商项目实战课程 Tomcat集群视频教程 Redis项目实战课程课程目录1-1 课程导学1-2 大型Java项目架构演进解析1-3 一期课程与问答服务回顾1-4 一期项目结构和代码回顾1-5 课程使用系统及技术版本介绍(一期+二期)1-6 二期项目初始化第2章 Lombok框架集成及原理解析本章会对Lombok框架进行介绍,同时会讲解Lombok的原理.并手把手领着小伙伴们实战,引入Lombok以及IDE安装Lombok插件.然后会带着大家实战Coding,讲解@Data

nginx+tomcat+memcached搭建服务器集群及负载均衡

在实际项目中,由于用户的访问量很大的原因,往往需要同时开启多个服务器才能满足实际需求.但是同时开启多个服务又该怎么管理他们呢?怎样实现session共享呢?下面就来讲一讲如何使用tomcat+nginx搭建服务器集群以及如何实现session共享. 环境: apache-tomcat-6.0.29+apache-tomcat-6.0.29+jdk1.6+win7(由于自己只是做了一个demo,j就没有用到服务器系统了) 1.首先我们准备两个tomcat(tomcat1,tomcat2),并将端口

Tomcat集群使用Memcached实现Session共享

Session是什么? 用户访问服务器资源主要分成两类,一类是无状态访问,例如请求一张图片.另一类是有状态访问,这种情况下,服务器需要记录追踪用户状态,并根据用户所处状态做出不同响应,典型的例子是购物车.Session的作用就是在Web服务器上保持用户的状态信息. Tomcat集群为什么需要Session共享? 当客户端访问Tomcat集群时,所有的请求将被Nginx拦截,由Nginx做负载均衡后转发给后台真实Tomcat.按照这个流程就可能出现一个问题,当用户进行页面刷新或跳转时,每次请求将被

Tomcat集群环境下session共享方案梳理(1)-通过memcached(MSM)方法实现

对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式: 一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据: 另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据. Tomcat集群session同步方案有以下几种方式: 1)使用tomcat自带的

Nginx+Memcached+Tomcat集群配置

1.   Nginx Nginx是通过将多个Web Server绑定到同一个IP地址下,以实现多个WebServer间的负载均衡,降低单个Web Server的负荷,以提高整体的性能与稳定性. 安装和配置Nginx的简单方式如下: 1)      下载并解压Nginx到本地目录:http://nginx.org/en/download.html 2)      对Nginx的配置主要是对它的配置文件/conf/nginx.conf的修改.如下链接是nginx.conf配置文件各个属性的详细说明:

nginx+memcached+tomcat集群 session共享完整版

nginx+memcached+tomcat集群 session共享完整版 集群环境 1.nginx版本 nginx-1.6.2.tar.gz 2.jdk 版本 jdk-7u21-linux-x64.tar.gz 3.tomcat 版本  7.0.29 4.memcached 版本 memcached-1.4.22.tar.gz 5. CentOS 6.5 系统采用一台服务做测试 一.nginx安装 安装依赖包 yum -y install gcc gcc-c++ 1.安装pcre库 tar z

memcached演练(2) 访问memcached服务

通过上节<memcached演练(1) 搭建memcached服务>,已经成功在linux虚拟机上安装了memcached服务,并设置了自启动. STAT version 1.4.29 Mem:          1891 主要内容 使用telnet命令行工具,操作memcached服务 使用java spymemcached工具访问memcached服务 监控插入不同数据量的数据,响应时间 监控memcached主机繁忙&清闲对比情况 调整memcached的内存指标,插入相同的数据