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

案例说明:

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

部署环境:

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

集群构成:

  1. httpd + tomcat + mod_jk

版本选择:

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

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

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

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

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

2.部署tomcat

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

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

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

同理,tomcat2的配置:

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

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

  1. <!--编辑webapps/test/test.jsp,主要用来测试负载均衡情况-->
  2.  
  3. <%@ page contentType="text/html; charset=GB2312" %>
  4. <html>
  5. <head>
  6. <title>tomcat-cluster-test-page</title>
  7. </head>
  8. <body>
  9. SessionID: <%=session.getId() %>
  10. </body>
  11. </html>

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

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

  1. #在apache2/conf/下增加wokers.properties文件
  2. #文件内添加内容,形式如下:
  3.  
  4. #server
  5. worker.list=loadbalancer,jkstatus
  6.  
  7. #tomcat1
  8. worker.tomcat1.port= #该端口是tomcat1的AJP服务端口,设置方式如2.1所示
  9. worker.tomcat1.host=localhost #如果tomcat部署在其他机器上,可填写其服务器IP
  10. worker.tomcat1.type=ajp13
  11. worker.tomcat1.lbfactor=
  12.  
  13. #tomcat2
  14. worker.tomcat2.port= #该端口是tomcat2的AJP服务端口,设置方式如2.1所示
  15. worker.tomcat2.host=localhost
  16. worker.tomcat2.type=ajp13
  17. worker.tomcat2.lbfactor=
  18.  
  19. #loadbalancer
  20. worker.loadbalancer.type=lb
  21. worker.loadbalancer.balance_workers=tomcat1,tomcat2
  22. worker.loadbalancer.sticky_session=1
    worker.jkstatus.type=status

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

  1. #编辑apache2/conf/httpd.conf,在底部增加配置:
  2.  
  3. #加载mod_jk模块
  4. LoadModule jk_module modules/mod_jk.so
  5.  
  6. #指定负载均衡配置文件
  7. JkWorkersFile conf/workers.properties
  8.  
  9. #定义日志输出
  10. JkLogFile logs/mod_jk.log
  11. JkLogLevel debug
  12.  
  13. #mod_jk按照访问路径来做请求分发
  14. #负载均衡的监控页面请求
  15. JkMount /jkstatus jkstatus
  16.  
  17. #将其他任意请求都交由loadbalancer控制器处理
  18. JkMount /* loadbalancer

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

  1. #!/bin/bash
  2. # file: run.sh
  3. # what: httpd-controller, Usage: run.sh [OPTIONS] <start|status|stop>
  4.  
  5. case "$1" in
  6. start)
  7. /tomcat/apache2/bin/apachectl -f /tomcat/apache2/conf/httpd.conf
  8. echo "apache-httpd started."
  9. ;;
  10. stop)
  11. kill -TERM `cat /tomcat/apache2/logs/httpd.pid`
  12. echo "apache-httpd stopped."
  13. ;;
  14. status)
  15. if [ -z "`ps -ef|grep httpd|grep -v grep`" ]; then
  16. echo "apache-httpd not started."
  17. else
  18. echo "apache-httpd is running."
  19. fi
  20. ;;
  21. *)
  22. echo "Usage: $0 [OPTIONS] <start|stop|status>"
  23. ;;
  24. esac

4.启动tomcat和httpd:

  1. tomcat1/bin/startup.sh
  2. tomcat2/bin/startup.sh
  3.  
  4. apache2/bin/run.sh start

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

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

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

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

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

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

  1. [tomcat@server ~]tomcat1/bin/shutdown.sh
  2. [tomcat@server ~]cd test/
  3. [tomcat@server ~/test]$for((i=;i<;i++))
  4. >do
  5. >wget http://192.168.1.100:8080/test/test.jsp 2>/dev/null
  6. >done
  7. [tomcat@server ~/test]
  8. [tomcat@server ~/test]$awk -F. '/SessionID/{a[$2]++}END{for(i in a){print i, a[i]}}' test.jsp*
  9. 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. 6. Java 加解密技术系列之 3DES

    Java 加解密技术系列之 3DES 序 背景 概念 原理 代码实现 结束语 序 上一篇文章讲的是对称加密算法 — — DES,这篇文章打算在 DES 的基础上,继续多讲一点,也就是 3 重 DES ...

  2. 分布式版本控制git常见问题之gitignore冲突(精简版)

    上次写的的太模糊了,现在简单直接写出个人心得,如下: 原因是有人提交了.gitignore里面的内容,所以和本地的不一样,这样就有问题,那么pull都不可以,所以要这样: git update-ind ...

  3. 数据库MySQL纯净卸载

    有些人在安装MySQL后,卸载后再次安装时,一直安装不上去,到最后不得不重装系统来安装MySQL.这里教大家如何将MySQL卸载干净,不影响下次安装. 卸载过程 1.停止mysql服务 2.进行卸载 ...

  4. numpy中linspace用法 (等差数列创建函数)

    linspace  函数 是创建等差数列的函数, 最好是在 Matlab  语言中见到这个函数的,近期在学习Python 中的 Numpy, 发现也有这个函数,以下给出自己在学习过程中的一些总结. ( ...

  5. java(5)循坏结构

    一. while循环 1.循环的优点? 减少重复代码的编写:程序会更加的简洁 2.语法 while(表达式){ // 1.表达式是[循环条件],结果必须是boolean类型 //2.{}中的代码,即[ ...

  6. Spring学习(3)---Spring设值注入和构造注入

    (一)设值注入就是指要被注入的类中定义有一个setter()方法,并在参数中定义需要注入的对象.简单的看个例子. 建一个User类: package com.ioc; public class Use ...

  7. Java IO学习笔记七

    System对IO的支持 System是系统的类,其中的方法都是在控制台的输入和输出,但是通过重定向也是可以对文件的输入输出 System中定义了标准输入.标准输出和错误输出流,定义如下: stati ...

  8. vue组件(Vue+webpack项目实战系列之三)

    组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.特别对于大型应用开发来说,尽量组件化,并且先造好轮子库,不要重复去写组件,这会显著提升项目 ...

  9. MiniProfiler使用点滴记录-2017年6月23日11:08:23

    1.看似针对同样一段查询表ef达式,重复执行却没有被记录下来.其实这是正常情况,因为ef并没有重复去执行 相同sql查询. 2.MiniProfiler结合MVC过滤器进行 拦截记录Sql,示例代码: ...

  10. Linux网络编程“惊群”问题总结

    1.前言 我从事Linux系统下网络开发将近4年了,经常还是遇到一些问题,只是知其然而不知其所以然,有时候和其他人交流,搞得非常尴尬.如今计算机都是多核了,网络编程框架也逐步丰富多了,我所知道的有多进 ...