Professional Documents
Culture Documents
com -1-
Tomcat 视频课程
大纲:
*安装部分
1.JDK 安装
2.Tomcat 安装
3.认识目录结构
*管理部分
1.应用部署
2.JDBC 配置
3.URL 保护
4.虚拟主机
5.集成 Apache
6.性能调整
*集群部分
1.Tomcat 集群
2.APACHE 负载与 mod_proxy_ajp.so
3.APACHE 负载与 Mod_jk.so
4.会话复制
安装部分:
一个 J2EE 服务器的运行必须要 jvm 的支持.也就是说要安装 java 运行环境。 而包含 java 运
行环境的产品使用比较流行的就是 sun 的产品:JDK ,当然还有其他公司的如 IBM,HP 等。
这些 JDK 的 RPM 包在 redhat 5 附加盘有提供。
J2EE 服务器商业版本一般都集成了 JDK 的,如 BEA 的 weblogic,IBM 的 websphere。
Sun 公司 JDK 图:
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com -2-
JDK,JRE,JVM 三者的关系:
JDK (Java Development Kit)
JDK 是整个 Java 的核心,包括了 Java 运行环境(Java Runtime Envirnment),一堆 Java 工具
和 Java 基础的类库(rt.jar)。不论什么 Java 应用服务器实质都是内置了某个版本的 JDK。
JRE(Java Runtime Environment,Java 运行环境),运行 JAVA 程序所必须的环境的集合,包
含 JVM 标准实现及 Java 核心类库。
JRE 是 Java 运行环境 (Java Runtime Enviroment) 的缩写。
jre -- java rutime environment java 运行环境 java 字节码的运行环境,要使用 Java 程序,JRE
是必不可少的环境
jdk -- java developer’s kit java 开发工具包 简单的说,你写的 java 源代码必须用 jdk 提供的编
译工具编译成.class 文件,才可由 jre 来执行,jdk 包含 jre 运行环境
1. JDK 的选择
我们作为 SA,应该清楚以下两点:
根据 J2EE 服务器要求而定
根据应用程序部署要求而定
2.JDK 的安装
安装 Jboss 需要 JDK 的支持,Jboss5 必须在 JDK5/6 系列上运行.
而 JDK 的厂商也有好几个如 IBM,BEA,HP,SUN.这里选择 Sun 公司的 JDK.
Redhat5 产品中包含了 jdk 的 rpm 包.在 supplementary 光盘中.
[foway~uplooking.com]# yum install java-1.6.0-sun*
#安装即可,但注意如果你安装了多个 rpm 包的 jdk 那么你需要使用
[foway~uplooking.com]# /usr/sbin/alternatives --config java.
[foway~uplooking.com]# /usr/sbin/alternatives --config javac.
[foway~uplooking.com]# /usr/sbin/alternatives --config java_sdk_1.6.0
切换成你需要的 JDK 版本与厂商.
[foway~uplooking.com]# java –version #看到的是你指定的 JDK 即可
Sun 公司源码:
http://java.sun.com/javase/downloads/index_jdk5.jsp
http://java.sun.com/javase/downloads/
选一种下即可. 二进制包有 2 种形式
jdk-<release>.bin 安装后在 当前执行.bin 所在目录
jdk-<release>.rpm.bin 安装后在/usr/java/jdk-<release> 目录,
同时在执行目录下有 jdk-<release>.rpm 包生成
3.JDK 环境变量
通常办法:
编辑.bashrc 或.bash_profile 或/etc/profile 或/etc/bashrc 等变量文件 添加
export JAVA_HOME=/JDK 安装目录
export PATH:$PATH:$JAVA_HOME/bin
………
推荐办法:
修改 J2EE 应用服务器的启动与关闭脚本文件中加入
export JAVA_HOME=/<jdk 安装目录>
4.Tomcat 安装
Tomcat 版本一般解压即可. 压缩包有 zip,tar 的.按照要求解压.
5.目录结构
bin:启动与停止服务的一些相关脚本
common/server:类与库等加载到 tomcat 时用,如 jdbc 驱动到 common/lib 下.
开发的独立的 classes 包可放在 common/classes 中,依赖的 classes 包放在 server/classes
conf: tomcat 服务配置相关文件
webapps:程序放置的目录,如 jsp 放到 webapps/ROOT/下.
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com -4-
在 tomcat6 中目录结构与以前的有变化的。
修改./tomcat/bin/shutdown.sh
在
# resolve links - $0 may be a softlink
后添加:
export JAVA_HOME=/usr/java/jdk1.5.0_10 #<jdk 安装路径>
[foway~uplooking.com ]# ./tomcat/bin/startup.sh
即可启动tomcat了.并可以在http://ip:8080 中看到一个猫猫了.
管理部分:
1. 应用部署.
网站默认路径在 webapps/ROOT 下.所以我们的通常的程序应该放在这里.
启动 tomcat 后
打开浏览器,输入 http://ip:8080/date.jsp 看到当前时间的话说明就成功了。
import javax.servlet.*;
import javax.servlet.http.*;
public class hello extends HttpServlet
{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void destroy()
{
super.destroy();
}
public void service(HttpServletRequest req,HttpServletResponse resp) throws
ServletException,IOException
{
resp.setContentType("text/html");
PrintWriter out=new PrintWriter(resp.getOutputStream());
out.println("<html>");
out.println("<head><title>hello ULP</title></head>");
out.println("<body>");
out.println("Hello ULP! This is test Servlet!");
out.println("</body>");
out.println("</html>");
out.close();
}
}”>hello.java
[foway~uplooking.com]#
cp /usr/local/tomcat/common/lib/servlet-api.jar /usr/java/jdk1.5.0_07/jre/lib/ext/
[foway~uplooking.com ]#export PATH=/usr/java/jdk1.5.0_07/bin:$PATH;javac hello.java
然后修改 web,xml 添加 servlet 参数:
[foway~uplooking.com ]#vi ../web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
{
private String name =null;
public TestBean(String nameInit){
this.name = nameInit;
}
public void setName(String newName){
this.name=newName;
}
public String getName(){
return this.name;
}
}”>TestBean.java
[foway~uplooking.com ]# export PATH=/usr/java/jdk1.5.0_07/bin:$PATH;javac TestBean.java
[foway~uplooking.com ]#cd /usr/local/webapps/ROOT;echo “
<%@ page import="test.TestBean" %>
<html>
<head>
<title>Test Bean</title>
</head>
<body>
<center>
<%
TestBean testBean = new TestBean("Hello ULP! test bean !");
%>
Java Bean Test:
The context is<%=testBean.getName()%>
</center>
</body>
</html>”>upbean.htm
重启 Tomcat,在浏览器输入:http://ip:8080/upbean.htm 看到:
Java Bean Test: The context isHello ULP! test bean !
即可
这样就完成了整个 Tomcat 下的 jsp、servlet 和 javabean 的配置。
2. JDBC 配置
Jdbc 是 java 连接数据库的一种驱动程序.有了它 java 才能与 sql 通信.
下面是 mysql 配置的例子.
[foway~uplooking.com]# mysql --default-character-set=gbk
>create database tomcatdb;
>use tomcatdb;
>create table dd(id int,name varchar(256)) character set gbk collate gbk_chinese_ci;
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com -8-
[foway~uplooking.com ]#
为了方便我们使用 tomcat-admin 包来配置 jdbc 参数:
如果 tomcat 中没有集成 admin 管理包,需要你额外安装它。
[foway~uplooking.com ]# cp /tmp/apache-tomcat-5.5.27/server/webapps/admin/
/usr/local/tomcat/server/webapps/ -rf
[foway~uplooking.com ]# cp /tmp/apache-tomcat-5.5.27/conf/Catalina/localhost/admin.xml
/usr/local/tomcat/conf/Catalina/localhost/
[foway~uplooking.com ]#vi /usr/local/tomcat/conf/tomcat-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager"/>
<role rolename="admin"/>
<user username="tomcat" password="tomcat" roles="tomcat"/>
<user username="both" password="tomcat" roles="tomcat,role1"/>
<user username="role1" password="tomcat" roles="role1"/>
<user username="admin" password="tomcat" roles="admin,manager"/>
</tomcat-users>
[foway~uplooking.com ] /usr/local/tomcat/bin/shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.5.0_07
[foway~uplooking.com ]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/java/jdk1.5.0_07
[foway~uplooking.com ]#
通过http://ip:8080/admin 使用admin/tomcat登陆去配置jdbc
或直接修改 conf/server.xml 添加
<Resource
name="Mysql"
type="javax.sql.DataSource"
password="tomcat"
driverClassName="com.mysql.jdbc.Driver"
maxIdle="2"
maxWait="5000"
username="tomcat"
url="jdbc:mysql://localhost/tomcatdb"
maxActive="4"/>
类似内容也可以的
[foway~uplooking.com ]#
重起tomcat 后 访问http://ip:8080/mtest.jsp 能看到dd表中数据即可
置对应参数。
JNDI 数据源配置例子:
URL 保护
何保护关键 web 应用
目前有若干种方式:
1、写 javaBean,利用 session + jdbc 专门验证 session 中的 username,passWord,如果不进行
登录,有这些代码的 JSP 页一律会拒绝访问;
2、如果使用的是 weblogic,websphere,jboss,j2ee ri 这样的 J2EE 伺服器,可以通过定义
role\group\user 进行安全部署;
3、配置站点关键应用使用 SSL,进行电子证书进行验证;
4. Ream and AAA tomcat 的特殊保护机制
5..混合型 如 apache 的 url 认证
下面我们给大家介绍 ssl 与 Ream 的实现。
SSL 配置例子:
[foway~uplooking.com]#cd $JAVA_HOME/bin;./keytool -genkey -alias tomcat -keyalg RSA
Enter keystore password: uplooking
What is your first and last name?
[Unknown]: ulp
What is the name of your organizational unit?
[Unknown]: ulp
What is the name of your organization?
[Unknown]: ulp
What is the name of your City or Locality?
[Unknown]: china
What is the name of your State or Province?
[Unknown]: Shenzhen
What is the two-letter country code for this unit?
[Unknown]: cn
Is CN=ulp, OU=ulp, O=ulp, L=china, ST=Shenzhen, C=cn correct?
[no]: y
重起tomcat 后 访问https://ip:8443
Ream 配置:
realm 的实现方式有若干种:基于 http basic authentication 的,基于 form 表单的;基于验证
的数据库。
</tomcat-users>
[foway~uplooking.com ]#
修改程序目录 WEB-INF/web.xml 加入如下内容
<security-constraint>
<web-resource-collection>
<web-resource-name>admin</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>ulp</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>http basic authentication</realm-name>
</login-config>
在</web-app>的前面。然后重启动 tomcat 服务即可。
[foway~uplooking.com ]#
注意这里保护的URL为:http://ip:8080/admin/ 下面的任何jsp页面。
虚拟主机
实现虚拟主机可以使用 tomcat 的配置,也可以使用 apache 的虚拟主机配置<前提你用
apache 访问 tomcat>。
Tomcat 虚拟主机:
修改 tomcat 安装目录下的/conf/server.xml 在 server.xml 中的
<Engine> </Engine>中添加
<Host name="192.168.0.253" debug="0"
appBase="/www/web1"
unpackWARs="true" autoDeploy="true">
<Alias>localhost</Alias>
<Alias>www</Alias>
<Alias>192.168.0.253</Alias>
<Context path="" docBase="" debug="1"/>
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="vtomcat_log."
suffix=".txt"
pattern="common" resolveHosts="false"/>
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs"
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com - 13 -
prefix="home_log_"
suffix="_app_log.txt"
timestamp="true"/>
</Host>
server.xml配置简介
server.xml的基本配置信息,更具体的配置信息见tomcat的文档
server:
port 指定一个端口,这个端口负责监听关闭tomcat的请求
shutdown 指定向端口发送的命令字符串
service:
name 指定service的名字
Connector (表示客户端和service之间的连接):
port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
minProcessors 服务器启动时创建的处理请求的线程数
maxProcessors 最大可以创建的处理请求的线程数
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得
到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请
求数,超过这个数的请求将不予处理
connectionTimeout 指定超时的时间数(以毫秒为单位)
Engine (表示指定service中的请求处理机,接收和处理来自Connector的请求):
defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的
name属性值是一样的
Context (表示一个web应用程序,通常为WAR文件,关于WAR的具体信息见servlet规范):
docBase 应用程序的路径或者是WAR文件存放的路径
path 表示此web应用程序的url的前缀,这样请求的url为http://localhost:8080/path/****
reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的/WEB-INF/lib
和/WEB-INF/classes目录的变化,自动装载新的应用程序,可以在不重起tomcat的情况下改
变应用程序
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com - 14 -
host (表示一个虚拟主机):
name 指定主机名
appBase 应用程序基本目录,即存放应用程序的目录
unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接从WAR文
件中运行应用程序
Logger (表示日志,调试和错误信息):
className 指定logger使用的类名,此类必须实现
org.apache.catalina.Logger 接口
prefix 指定log文件的前缀
suffix 指定log文件的后缀
timestamp 如果为true,
则log文件名中要加入时间,如下例:localhost_log.2001-10-04.txt
Realm (表示存放用户名,密码及role的数据库):
className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
Valve (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样):
className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve 类
可以记录应用程序的访问信息directory 指定log文件存放的位置
pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字
符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多
[foway~uplooking.com ]#
集成 Apache:
与 apache 的配合使用可以使用 mod_jk,把 tomcat 放在内网,可使用支持 ajp 协议的代理访问
tomcat 服务,如 mod_proxy_ajp.
#
#ProxyPass /tomcat/ ajp://localhost:8009/
#ProxyPass /examples/ ajp://localhost:8009/jsp-examples/
ProxyPass / balancer://proxy/
<Proxy balancer://proxy>
BalancerMember ajp://192.168.15.128:8009/
</Proxy>
在这样的代理访问配置中,apache,tomcat 的启动与停止没有先后要求的
下面是动静分离的一个例子:
[foway~uplooking.com]#whereis apxs
apxs: /usr/sbin/apxs /usr/share/man/man8/apxs.8.gz
如果没有 apxs 指令安装 httpd-devel 包
[foway~uplooking.com]# pm -qf /usr/sbin/apxs
httpd-devel-2.2.3-11.el5_1.3
[foway~uplooking.com]#wget
http://apache.mirror.phpchina.com/tomcat/tomcat-connectors/jk/source/jk-1
.2.26/tomcat-connectors-1.2.26-src.tar.gz
[foway~uplooking.com]#tar xzvf tomcat-connectors-1.2.26-src.tar.gz
[foway~uplooking.com]# cd ./tomcat-connectors-1.2.26-src/native
[foway~uplooking.com]# ./configure \
--with-apxs=/usr/sbin/apxs
[foway~uplooking.com]#make ;make install
[foway~uplooking.com]# ls /etc/httpd/modules/mod_jk*
mod_jk.so
当看到 mod_jk.so 在 apache 模块目录下时,则编译的 mod_jk 已成功.
下面是配置 mod_jk 了.
[foway~uplooking.com]#cd /etc/httpd/conf.d;vi mod_jk.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers2.properties
JkLogFile logs/mod_jk.log
# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
# JkOptions indicate to send SSL KEY SIZE,
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat set the request format
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com - 16 -
性能调整
关于性能在<<Java TM Paltform Performance>>中定义了五个性能标准
运算性能---那一个算法执行性能最好
内存分配---程序运行在 JVM 需要消耗的内存
启动时间---主要考虑运行在客户端的程序
程序扩展---在压力负载下程序可否动态调整
性能预知---什么时候觉得性能会不好
作为 SA 我们最难调整就是程序代码了。
我们只需要关心有影响的程序,可以察觉到的性能问题,而不是每一个类中的每一个方法我
们都需要想方设法的提高性能。如果程序的性能没有达到我们所期望的要求,我们才需要考
虑如何优化性能。同样的,晦涩的代码虽然提高了程序的性能,但同时可能带给我们的是维
护的噩梦。我们需要折中的考虑以上两种情况,使得程序的代码是优美的,并且运行的足够
快,达到客户所期望的性能要求。
优化代码必须要考虑以下问题:
代码已正常工作,优化可能引入新的 bug
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com - 17 -
优化代码不要造成理解与维护的难度
优化的代码能否迁移到其他平台
优化代码消耗时间多而性能提升少甚至导致晦涩的代码
所以性能的好坏很大程度在代码的测试工作上了。
优化的一般步骤:
1) 明确应用程序的性能指标,怎样才符合期望的性能需求;
2) 在目标平台进行测试;
3) 如果性能已经达到性能指标,Stop;
4) 查找性能瓶颈;
5) 修改性能瓶颈;
6) 返回到第 2 步。
JDK 调整:
选择合适 JDK
不同版本的 JDK,甚至不同厂家的 JDK 可能都存在着很大的差异,对于性能优化的程
度不同。一般来说,尽可能选择最新发布的稳定的 JDK 版本。最新的稳定的 JDK 版本相对
以前的 JDK 版本都会做一些 bug 的修改和性能的优化工作
-优化 java 堆
垃圾收集就是自动释放不再被程序所使用的对象的过程。当一个对象不再被程序所引用时,
它所引用的堆空间可以被回收,以便被后续的新对象所使用。垃圾收集器必须能够断定哪些
对象是不再被引用的,并且能够把它们所占据的堆空间释放出来。如果对象不再被使用,但
还有被程序所引用,这时是不能被垃圾收集器所回收的,此时就是所谓的“内存泄漏”。监
控应用程序是否发生了内存泄漏,有一个非常优秀的监控工具推荐给大家——Quest 公司的
JProbe 工具,使用它来观察程序运行期的内存变化,并可产生内存快照,从而分析并定位内
存泄漏的确切位置,可以精确定位到源码内。这个工具的使用我在后续的章节中还会做具体
介绍。
Java 堆是指在程序运行时分配给对象生存的空间。通过-mx/-Xmx 和-ms/-Xms 来设置起
始堆的大小和最大堆的大小。根据自己 JDK 的版本和厂家决定使用-mx 和-ms 或-Xmx 和
-Xms。Java 堆大小决定了垃圾回收的频度和速度,Java 堆越大,垃圾回收的频度越低,速
度越慢。同理,Java 堆越小,垃圾回收的频度越高,速度越快。要想设置比较理想的参数,
还是需要了解一些基础知识的。 Java 堆的最大值不能太大,这样会造成系统内存被频繁的
交换和分页。所以最大内存必须低于物理内存减去其他应用程序和进程需要的内存。而且堆
设置的太大,造成垃圾回收的时间过长,这样将得不偿失,极大的影响程序的性能。以下是
一些经常使用的参数设置:
1) 设置-Xms 等于-XmX 的值;
2) 估计内存中存活对象所占的空间的大小,设置-Xms 等于此值,-Xmx 四倍于此值;
3) 设置-Xms 等于-Xmx 的 1/2 大小;
4) 设置-Xms 介于-Xmx 的 1/10 到 1/4 之间;
5) 使用默认的设置。
根据自己的运行程序的具体使用场景,来确定最适合自己的参数设置。 除了-Xms 和
-Xmx 两个最重要的参数外,还有很多可能会用到的参数,这些参数通常强烈的依赖于垃圾
收集的算法,所以可能因为 JDK 的版本和厂家而有所不同。但这些参数一般在 Web 开发中
用的比较少,我就不做详细介绍了。在实际的应用中注意设置-Xms 和-Xmx 使其尽可能的
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com - 18 -
程序优化需要借助测试工具来分析是否有 bug,是否有内存溢出的代码了。
性能与压力测试需要专业测试软件完成了。
[foway~uplooking.com]#
集群部分
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com - 19 -
负载方式:
前端,采用硬件负载均衡器;后端,部署多台 J2EE 服务器。
前端,部署 tomcat LoadBalancer;后端,部署多台 J2EE 服务器。
前端,采用第三方软件负载均衡器;后端,部署多台 J2EE 服务器。
Session 管理:
* 内存对内存的复制;使用 Tomcat 5 自带的 SimpleTcpCluster (在 org.apache.catalina.cluster.tcp
包中,文件为 server/lib/catalina-cluster.jar)。
* 文件系统 session 持久化, session 信息从一个中央文件系统读写;
(org.apache.catalina.session.FileStore, part of catalina-optional.jar)。文件系统采用集群的文件
系统如 nfs,gfs,ocfs 等。
* 数据库 session 持久化, session 数据存储在一个 JDBC 数据存储器。
(org.apache.catalina.session.JDBCStore) ;可以使用常见的 rdbms 数据库如 mysql,oracle.
<上面的是 tomcat 支持的 3 种方式,一般 j2ee 服务器都支持这 3 种方式,不过实现原理不尽
相同>
* 采用 jboss 的 cache 模块实现 session 的管理<新的 cache 模块可以使用 memcached 了>
* 采用 dangge 公司开发的 memcached 内存集中管理 session
* 采用 terracotta 实现 session 集群管理
* 采用 oracle 公司的 java 版 coherence 实现 jvm 级别的集群实现 session 同步
* 采用 jboss 开发的 mod_cluster 与 mod_jk 或 mod_proxy_ajp 配合 session 同步
* 采用 dbcached 分布内存数据库实现
#
# Uncomment the following lines to serve the ROOT webapp
# under the /tomcat/ location, and the jsp-examples webapp
# under the /examples/ location.
#
#ProxyPass /tomcat/ ajp://localhost:8009/
#ProxyPass /examples/ ajp://localhost:8009/jsp-examples/
#add context for ajp
ProxyPass / balancer://proxy/ lbmethod=byrequests stickysession=JSESSIONID
ProxyPassReverse / balancer://proxy/
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com - 21 -
<Proxy balancer://proxy>
BalancerMember ajp://192.168.0.253:8009 route=253
BalancerMember ajp://192.168.0.252:8009 route=252
</Proxy>
[foway~uplooking.com]#/etc/init.d/httpd restart
253 上:
[foway~uplooking.com]# vi /usr/local/tomcat/conf/server.xml
找如下内容并按照红色的地方修改:
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009"
enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
<!-- Define the top level container in our container hierarchy -->
<!-- <Engine name="Catalina" defaultHost="localhost" > -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute=”253”>
其他内容不改变。
[foway~uplooking.com]#/usr/local/tomcat/bin/startup.sh
<!-- See proxy documentation for more information about using this. -->
<!--
<Connector port="8082"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" acceptCount="100" connectionTimeout="20000"
proxyPort="80" disableUploadTimeout="true" />
-->
<!-- An Engine represents the entry point (within Catalina) that processes
every request. The Engine implementation for Tomcat stand alone
analyzes the HTTP headers included with the request, and passes them
on to the appropriate Host (virtual host). -->
<!-- Define the top level container in our container hierarchy -->
<!-- <Engine name="Catalina" defaultHost="localhost" > -->
<Engine name="Catalina" defaultHost="localhost" jvmRoute=”252”>
其 他内容不改变。
[foway~uplooking.com]#/usr/local/tomcat/bin/startup.sh
这样部署好后就实现了基本的负载了与粘性会话管理了。这个时候一个用户登陆需要会话验
证的话,通过 mod_balancer 所调度的成员不能宕机,否则用户将弹出登陆页面要求登陆。
如果你没有指定默认网关,你可能需要指定在 server.xml 中
多播使用的网络:如:servel.xml 中
<Membership
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com - 23 -
className="org.apache.catalina.cluster.mcast.McastService"
mcastAddr="228.0.0.4"
则:
#route add -net 228.0.0.0 netmask 255.0.0.0 dev eth0
如果在一个内网中有多个集群,你需要指定节点复制协议方式:如
252 上修改 server.xml 中
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
tcpListenAddress="auto"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
为:
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastBindAddress="192.168.0.252"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
<!-- tcpListenAddress="auto" -->
tcpListenAddress="192.168.0.252"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
253 上:修改为:
<Membership
className="org.apache.catalina.cluster.mcast.McastService"
mcastBindAddress="192.168.0.253"
mcastAddr="228.0.0.4"
mcastPort="45564"
mcastFrequency="500"
mcastDropTime="3000"/>
本视频课程是我的个人知识总结,欢迎交流批评与指正->foway@uplooking.com - 24 -
<Receiver
className="org.apache.catalina.cluster.tcp.ReplicationListener"
<!-- tcpListenAddress="auto" -->
tcpListenAddress="192.168.0.253"
tcpListenPort="4001"
tcpSelectorTimeout="100"
tcpThreadCount="6"/>
checkInterval="60"
debug="99"
/>
</Manager>
</Context>
[foway~uplooking.com]#
分别在 253/252 上重启动 tomcat 服务即可
[foway~uplooking.com]#