关于如何搭建Tomcat集群网上还是能搜到很多相关的教程,这里结合我自己在实际应用中的操作做下备忘。

案例说明:

  这里以在本机部署的2个tomcat来做集群。当然,tomcat集群可以是分布式的,而差异也仅仅是在地址-端口的配置上,文章后面会讲到。

部署环境:

操作系统: Red Hat Enterprise Linux Server release 6.0 (Santiago)(x64)
JDK版本: 1.6.0_45

集群构成:

httpd + tomcat + mod_jk

版本选择:

httpd-2.2.
apache-tomcat-7.0.
mod_jk-1.2.-httpd-2.2.3 #这里写的是httpd-2.2.3,但其实跟httpd-2.2.26也能适配

以上文件(都是我从Apache官网下载的)我已经做了打包并上传至百度云盘,需要的朋友可以使用下面的链接下载:

把所需文件上传至服务器以后,我们就可以动手来搭建了。

1.首先安装httpd,过程很简单如下:

#解压httpd包
tar -zxf httpd-2.2..tar.gz
cd httpd-2.2./ #配置预编译选项,这里只关心输出目录就可以了
./configure --prefix=~/apache2
#编译
make
#安装
make install

2.部署tomcat

#解压tomcat包,并复制成2份
tar -zxf apache-tomcat-7.0..tar.gz
mv apache-tomcat-7.0./ tomcat1/
cp -r tomcat1/ tomcat2/

2.1配置tomcat属性,这里以tomcat1、2为例(这里需要注意的地方主要是端口,设置时不要造成冲突即可):

#修改tomcat配置文件server.xml,主要修改:Shutdown端口,Connect服务端口,AJP端口
<Server port="" shutdown="SHUTDOWN">
<Connector port="" protocol="HTTP/1.1" redirectPort="" />
<Connector port="" protocol="AJP/1.3" redirectPort="" />
#修改集群名称和tomcat别名
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
#去掉cluster节点的注释
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
#修改以上端口是为了避免本机内多个tomcat同时运行造成端口冲突
#修改tomcat配置文件context.xml,为<Context>节点增加distributable="true"属性

同理,tomcat2的配置:

#修改tomcat配置文件server.xml,主要修改:Shutdown端口,Connect服务端口,AJP端口
<Server port="" shutdown="SHUTDOWN">
<Connector port="" protocol="HTTP/1.1" redirectPort="" />
<Connector port="" protocol="AJP/1.3" redirectPort="" />
#修改集群名称和tomcat别名
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
#去掉cluster节点的注释
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
#修改以上端口是为了避免本机内多个tomcat同时运行造成端口冲突
#修改tomcat配置文件context.xml,为<Context>节点增加distributable="true"属性

2.2为tomcat增加个测试文件,后期测试集群性能使用:

<!--编辑webapps/test/test.jsp,主要用来测试负载均衡情况-->

<%@ page contentType="text/html; charset=GB2312" %>
<html>
<head>
<title>tomcat-cluster-test-page</title>
</head>
<body>
SessionID: <%=session.getId() %>
</body>
</html>

OK,基本上tomcat的配置到这里就结束了。

3.为httpd增加集群配置文件

#在apache2/conf/下增加wokers.properties文件
#文件内添加内容,形式如下: #server
worker.list=loadbalancer,jkstatus #tomcat1
worker.tomcat1.port= #该端口是tomcat1的AJP服务端口,设置方式如2.1所示
worker.tomcat1.host=localhost #如果tomcat部署在其他机器上,可填写其服务器IP
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor= #tomcat2
worker.tomcat2.port= #该端口是tomcat2的AJP服务端口,设置方式如2.1所示
worker.tomcat2.host=localhost
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor= #loadbalancer
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=tomcat1,tomcat2
worker.loadbalancer.sticky_session=1
worker.jkstatus.type=status

3.1将mod_jk解压到apache2/modules下并命名文件为mod_jk.so,接下来修改配置文件如下:

#编辑apache2/conf/httpd.conf,在底部增加配置:

#加载mod_jk模块
LoadModule jk_module modules/mod_jk.so #指定负载均衡配置文件
JkWorkersFile conf/workers.properties #定义日志输出
JkLogFile logs/mod_jk.log
JkLogLevel debug #mod_jk按照访问路径来做请求分发
#负载均衡的监控页面请求
JkMount /jkstatus jkstatus #将其他任意请求都交由loadbalancer控制器处理
JkMount /* loadbalancer

3.2为httpd手写一个启动控制器:

#!/bin/bash
# file: run.sh
# what: httpd-controller, Usage: run.sh [OPTIONS] <start|status|stop> case "$1" in
start)
/tomcat/apache2/bin/apachectl -f /tomcat/apache2/conf/httpd.conf
echo "apache-httpd started."
;;
stop)
kill -TERM `cat /tomcat/apache2/logs/httpd.pid`
echo "apache-httpd stopped."
;;
status)
if [ -z "`ps -ef|grep httpd|grep -v grep`" ]; then
echo "apache-httpd not started."
else
echo "apache-httpd is running."
fi
;;
*)
echo "Usage: $0 [OPTIONS] <start|stop|status>"
;;
esac

4.启动tomcat和httpd:

tomcat1/bin/startup.sh
tomcat2/bin/startup.sh apache2/bin/run.sh start

启动后,通过浏览器访问下监控页面http://192.168.1.100:8080/jkstatus

访问http://192.168.1.100:8080/test/test.jsp,页面显示正常:

那么我们来找个机器测试下负载均衡性能,测试结果如下:

[tomcat@server ~/test]$for((i=;i<;i++))
> do
> wget http://192.168.1.100:8080/test/test.jsp 2>/dev/null
> done
[tomcat@server ~/test]$awk -F. '/SessionID/{a[$2]++}END{for(i in a){print i, a[i]}}' test.jsp*
tomcat1
tomcat2

从结果来看:负载后,tomcat接收到的请求占比差不多1:1,还是不错的。

关掉tomcat1,然后测试下访问会不会出现问题:

[tomcat@server ~]tomcat1/bin/shutdown.sh
[tomcat@server ~]cd test/
[tomcat@server ~/test]$for((i=;i<;i++))
>do
>wget http://192.168.1.100:8080/test/test.jsp 2>/dev/null
>done
[tomcat@server ~/test]
[tomcat@server ~/test]$awk -F. '/SessionID/{a[$2]++}END{for(i in a){print i, a[i]}}' test.jsp*
tomcat2

OK,所有请求都转发到tomcat2去了,说明节点故障也可以应付。tomcat集群搭建成功。

以上即是tomcat集群搭建的全过程了,文章如有不当之处各位请不吝赐教。

Tomcat集群搭建的更多相关文章

  1. haproxy+tomcat集群搭建

    web1和web2的部署可参考我之前的文章<Tomcat集群搭建>,这里就省去该过程了. #安装haproxy- .tar.gz cd haproxy-/ make TARGET=linu ...

  2. tomcat集群搭建集成nginx负载均衡

    软件基础+版本: 1.3台centos7系统,其中都已经配置完成了jdk环境,jdk的版本为 [root@node03 bin]# java -version java version "1 ...

  3. Centos下Apache+Tomcat集群--搭建记录

    一.目的 利用apache的mod_jk模块,实现tomcat集群服务器的负载均衡以及会话复制,这里用到了<Cluster>. 二.环境 1.基础:3台主机,系统Centos6.5,4G内 ...

  4. Tomcat集群搭建超详细(apache+mod_jk+tomcat)

    TOMCAT集群 目录 TOMCAT集群 1 1 集群 1 1.1 什么是集群 1 1.2 集群的特性 1 1.3 集群的分类 1 1.4 TOMCAT集群配置的优缺点 2 1.5 APACHE+TO ...

  5. solr +zookeeper+tomcat 集群搭建

    最近需要搭建一个cloudSolr集群,写下记录.基础环境是在centos6.5 64bit 3个下载地址: 1. 下载Solr-4.x http://lucene.apache.org/solr/d ...

  6. Niginx +Tomcat 集群搭建

    1 安装niginx服务器,然后启动,访问localhost;出现欢迎界面证明niginx启动成功: 如上图的目录是nginx1.1的目录结构: 2 之后下载tomcat,然后赋值一份,总共两个tom ...

  7. apache搭建Tomcat集群(Cluster)

    搭建集群: apache:特点处理静态资源(html  图片  js等) apache的请求操作,Cluster工具 tomcat:特点处理动态资源 apache+tomcat(apache是web服 ...

  8. Tomcat:基于Apache+Tomcat的集群搭建

    根据Tomcat的官方文档说明可以知道,使用Tomcat配置集群需要与其它Web Server配合使用才可以完成,典型的有Apache和IIS. 这里就使用Apache+Tomcat方式来完成基于To ...

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

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

随机推荐

  1. Linux Network Management

    Linux网络管理 (YouTube视频教程) ISO/OSI七层模型 ISO: The International Organization for Standardization 国际标准化组织 ...

  2. JVM学习笔记三:垃圾收集器与内存分配策略

    内存回收与分配重点关注的是堆内存和方法区内存(程序计数器占用小,虚拟机栈和本地方法栈随线程有相同的生命周期). 一.判断对象是否存活? 1. 引用计数算法 优势:实现简单,效率高. 致命缺陷:无法解决 ...

  3. 一不小心,陷入TCP的性能问题

    一.现象 在一次访问请求nginx中,通常只需要几毫秒的RT,但当请求数据达到某一个数值时,rt明显提高,甚至超过了300毫秒. 二.问题的原因 大家都知道,TCP为了提高带宽利用率和吞吐量,做了各种 ...

  4. [UWP]用Shape做动画

    相对于WPF/Silverlight,UWP的动画系统可以说有大幅提高,不过本文无意深入讨论这些动画API,本文将介绍使用Shape做一些进度.等待方面的动画,除此之外也会介绍一些相关技巧. 1. 使 ...

  5. Canvas学习系列一:初识canvas

    最近你开始在学习canvas,打算把学习canvas的整个学习过程当中的一些笔记与总结记录下来,如有什么不足之处还请大神们多多指出. 1. 认识canvas Canvas元素的出现,可以说开启的Web ...

  6. iOS bug调试技巧学习----breakpoint&condition

    给断点添加条件 - (void)testCondition2 { NSArray *array = @[@"我们", @"一起", @"来" ...

  7. 原生ajax异步请求基础知识

    一.同步交互与异步交互的概念: * 同步交互:客户端向服务器端发送请求,到服务器端进行响应,这个过程中,用户不能做任何其他事情(只能等待响应完才能继续其他请求). * 异步交互:客户端向服务器端发送请 ...

  8. MVC架构简介及其测试策略

    最近在WEB端测试工作中陷入了瓶颈,单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的,WEB自动化测试一时半会还没有什么进展,所以决定先学习一下网站用的MVC架构,跟着教程写了一个小网站,大概 ...

  9. SQL常用命令

    SQL常用命令使用方法: (1) 数据记录筛选: sql="select * from 数据表 where 字段名=字段值 order by 字段名 [desc]" sql=&qu ...

  10. java书系列之——前言

    第1章Java的起源 对于计算机语言的发展史,业界一般认为:B语言导致了C语言的诞生,C语言演变出了C++语言,而C++语言将让位于Java语言.要想更好地了解Java语言,就必须了解它产生的原因.推 ...