- 浏览: 128174 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
djp_java:
信息中心.平台系统部
IBM MQ 简单例子 -
clamking:
相关jar包能不能提供下下载链接啊?分享精神值得学习。
IBM MQ 简单例子 -
bingfengfzl:
新手上路,求源码按着你上面搭了可是还是不行。。求源码高手求源码 ...
spring-security 学习笔记 -
blaiu:
很感谢你的share, class MQReveiver有异常 ...
IBM MQ 简单例子 -
rokily:
很感谢你的share, class MQReveiver有异常 ...
IBM MQ 简单例子
apache+jk+tomcat来做web负载均衡和集群
环境:
操作系统:CentOS-5.3-i386
jdk1.6.0.17
apache2.2.14
tomcat6.0
jk1.2.26
一、 jdk的安装
安装的jdk为:jdk-6u17-linux-x64-rpm.bin(linux下64位的)
1. 将文件上传至linux
2. 在当前目录输入
sh jdk-6u17-linux-x64-rpm.bin
3.看到 安装程序在询问您是否尊守许可协议页面 ,回车,空格都可以,看完协议. 出现一行字:Do you aggree to the above license terms? [yes or no]
安装程序在问您是否愿意遵守刚才看过的许可协议。输入"y" 或 "yes" 回车。
4.在命令行输入:
vi /etc/profile
在里面添加如下内容
export JAVA_HOME=/usr/java/jdk1.6.0_17
export JAVA_BIN=/usr/java/jdk1.6.0_17/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
5. 在命令行输入
java -version
屏幕输出:
java version "jdk1.6.0_17"
Java(TM) 2 Runtime Environment, Standard Edition (build j dk1.6.0_17)
Java HotSpot(TM) Client VM (build jdk1.6.0_17, mixed mode)
安装JDK1.6完毕.
二、 Tomcat的安装
安装的tomcat为:apache-tomcat-6.0.18.tar.gz
1. #tar zxvf apach-tomcat-6.0.18.tar.gz
#mv apach-tomcat-6.0.18/usr/local(移动tomcat的目录)
2. 进行tomcat环境的配置(前提需要安装jdk)
#vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.6.0_17(jdk如果已经配置过的话,这里就不用写了)
export TOMCAT_HOME=/usr/local/apach-tomcat-6.0.18
保存退出
# source /etc/profile //让当前配置立即生效
3.启动tomcat服务器
$ /usr/local/apach-tomcat-6.0.18/bin/startup.sh
电脑上会出现如下内容:
Using CATALINA_BASE: /usr/local/apache-tomcat-6.0.18
Using CATALINA_HOME: /usr/local/apache-tomcat-6.0.18
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.18/temp
Using JRE_HOME: /usr/local/jdk1.6.0_17
在浏览器中输入http://localhost:8080/就可以看到tomcat的log了
tomcat的安装到此结束
三、 apache的安装
安装的apache为:httpd-2.2.14.tar.gz
1. # tar -zxvf httpd-2.2.14.tar.gz
# cd httpd-2.2.14
# ./configure --prefix=/usr/local/apache\ //安装路径
2. # make //编辑(在编译过程中出现无法编译,可能是没有安装gc编译器 在线安装gc编译器的命令是:#yum install gc )
# make install //安装
# cd /usr/local/apache/bin/
# ././apachectl //开启httpd服务
安装成功后,在IE中输入apache服务器的IP地址,可以看到It works! 说明安装成功
apache安装到此结束
四、 安装jk
安装的jk为:jakarta-tomcat-connectors-jk-1.2.6-src.tar.gz
1. # tar -zxvf jakarta-tomcat-connectors-jk-1.2.6-src.tar.gz
# cd /usr/local/jakarta-tomcat-connectors-jk-1.2.6-src/jk/native
# ./configure --with-apxs=/usr/local/apache/bin/apxs --with-java-home=/usr/java/jdk1.6.0_17/
# ./make //编译 (在编译过程中出现无法编译,可能是缺少gcc-* 在线安装gcc的命令是:yum install gcc-*)
# ./make install //安装
安装完成后 会在 /usr/local/apache/modules/ 产生mod_jk.so
安装jk到此结束
五、 开始集群配置
1. 修改apache配置文件
# vim /usr/local/apache/conf/httpd.conf
添加: Include conf/mod_jk.conf
2. 新建mod_jk.conf
# touch mod_jk.conf
# vim /usr/local/apache/conf/mod_jk.conf
加载 mod_jk Module: LoadModule jk_module modules/mod_jk.so
指定 workers.properties文件路径 :JkWorkersFile conf/workers.properties
3. 指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /*.jsp controller
JkMount /*.js controller
JkMount /jkstatus/ stat1
JkMount /test/* controller
4. 新建 workers.properties 文件
# touch workers.properties
# vim /usr/local/apache/conf/workers.properties
添加如下内容:
#server列表
worker.list = controller, stat1
#=======tomcat1=======
#ajp13端口号,在tomcat下server.xml配置, 默认为8009
worker.tomcat1.port=8009
#tomcat的主机地址,如不是主机,请填写ip地址
worker.tomcat1.host=192.168.0.1
worker.tomcat1.type=ajp13
#server的加权比重,值越高,分得的请求越多
worker.tomcat1.lbfacotr=1
#=======tomcat2=======
#ajp13端口号,在tomcat下server.xml配置, 默认为8009
worker.tomcat2.port=9009
#tomcat的主机地址,如不是主机,请填写ip地址
worker.tomcat2.host=192.168.0.2
worker.tomcat2.type=ajp13
#server的加权比重,值越高,分得的请求越多
worker.tomcat2.lbfacotr=1
#=======controller,负载均衡控制器=======
worker.controller.type=lb
#指定分担请求的tomcat
worker.controller.balanced_workers=tomcat1, tomcat2
#sticky_session属性设为1,这样负载均衡器lb就会尽量保持一个session,也就是使用户在一次会话中跟同一个Tomcat进行交互。
worker.stat1.type=status
5. tomcat 配置
1>. 修改/usr/local/tomcat1/conf/server.xml
A. 将<Engine name="Catalina" defaultHost="localhost">
修改为:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
B. 将<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改为:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4001"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<!--
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
-->
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
2>. 修改/usr/local/tomcat2/conf/server.xml
A. 将<Engine name="Catalina" defaultHost="localhost">
修改为:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
B. 将<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改为:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4001"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<!--
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
-->
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
tomcat集群各节点通过建立tcp链接来完成Session的拷贝,拷贝有同步和异步两种模式。在同步模式下,对客户端的响应必须在Session拷贝到其他节点完成后进行;异步模式无需等待Session拷贝完成就可响应。异步模式更高效,但是同步模式可靠性更高。同步异步模式由channelSendOptions参数控制,默认值是8,为异步模式,4是同步模式。在异步模式下,可以通过加上拷贝确认(Acknowledge)来提高可靠性,此时channelSendOptions设为10。
Manager用来在节点间拷贝Session,默认使用DeltaManager,DeltaManager采用的一种all-to-all的工作方式,即集群中的节点会把Session数据向所有其他节点拷贝,而不管其他节点是否部署了当前应用。当集群中的节点数量很多并且部署着不同应用时,可以使用BackupManager,BackManager仅向部署了当前应用的节点拷贝Session。但是到目前为止BackupManager并未经过大规模测试,可靠性不及DeltaManager。
Channel负责对tomcat集群的IO层进行配置。Membership用于发现集群中的其他节点,这里的address用的是组播地址(Multicast address,了解更多组播地址详情请参见http://zyycaesar.iteye.com/admin/blogs/296501),使用同一个组播地址和端口的多个节点同属一个子集群,因此通过自定义组播地址和端口就可将一个大的tomcat集群分成多个子集群。Receiver用于各个节点接收其他节点发送的数据,在默认配置下tomcat会从4000-4100间依次选取一个可用的端口进行接收,自定义配置时,如果多个tomcat点在一台物理服务器上注意要使用不同的端口。Sender用于向其他节点发送数据,具体实现通过Transport配置,PooledParallelSender是从tcp连接池中获取连接,可以实现并行发送,即集群中的多个节点可以同时向其他所有节点发送数据而互不影响。Interceptor有点类似下面将要解释的Valve,起到一个阀门的作用,在数据到达目的节点前进行检测或其他操作,如TcpFailureDetector用于检测在数据的传输过程中是否发生了tcp错误。关于Channel的编程模型,请参见http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/tribes/Channel.html。
Valve用于在节点向客户端响应前进行检测或进行某些操作,ReplicationValve就是用于用于检测当前的响应是否涉及Session数据的更新,如果是则启动Session拷贝操作,filter用于过滤请求,如客户端对图片,css,js的请求就不会涉及Session,因此不需检测,默认状态下不进行过滤,监测所有的响应。JvmRouteBinderValve会在前端的Apache mod_jk发生错误时保证同一客户端的请求发送到集群的同一个节点,tomcat官方文档并未解释如何实现这一点,而且笔者认为这一设置似乎并无多大实用性。
Deployer用于集群的farm功能,监控应用中文件的更新,以保证集群中所有节点应用的一致性,如某个用户上传文件到集群中某个节点的应用程序目录下,Deployer会监测到这一操作并把这一文件拷贝到集群中其他节点相同应用的对应目录下以保持所有应用的一致。这是一个相当强大的功能,不过很遗憾,tomcat集群目前并不能做到这一点,开发人员正在努力实现它,这里的配置只是预留了一个接口。
Listener用于跟踪集群中节点发出和收到的数据,也有点类似Valve的功能。
启动顺序 tomcat1 ---->tomcat2---->apache
./configure //配置源代码树
--prefix=/usr/local/apache2 //体系无关文件的顶级安装目录PREFIX ,也就Apache的安装目录。
--enable-module=so //打开 so 模块,so 模块是用来提 DSO 支持的 apache 核心模块
--enable-mods-shared=all //编译全部的模板,对于不需要我们可以在httpd.conf去掉。
--enable-cache //支持缓存
--enable-file-cache //支持文件缓存
--enable-mem-cache //支持记忆缓存
--enable-disk-cache //支持磁盘缓存
--enable-static-support //支持静态连接(默认为动态连接)
--enable-static-htpasswd //使用静态连接编译 htpasswd - 管理用于基本认证的用户文件
--enable-static-htdigest //使用静态连接编译 htdigest - 管理用于摘要认证的用户文件
--enable-static-rotatelogs //使用静态连接编译 rotatelogs - 滚动 Apache 日志的管道日志程序
--enable-static-logresolve //使用静态连接编译 logresolve - 解析 Apache 日志中的IP地址为主机名
--enable-static-htdbm //使用静态连接编译 htdbm - 操作 DBM 密码数据库
--enable-static-ab //使用静态连接编译 ab - Apache HTTP 服务器性能测试工具
--enable-static-checkgid //使用静态连接编译 checkgid
--disable-cgid //禁止用一个外部 CGI 守护进程执行CGI脚本
--disable-cgi //禁止编译 CGI 版本的 PHP我们不再使用worker模式编译apache,worker模式和php貌似有一些不协调不稳定之处。所以使用了默认的perfork模式。
环境:
操作系统:CentOS-5.3-i386
jdk1.6.0.17
apache2.2.14
tomcat6.0
jk1.2.26
一、 jdk的安装
安装的jdk为:jdk-6u17-linux-x64-rpm.bin(linux下64位的)
1. 将文件上传至linux
2. 在当前目录输入
sh jdk-6u17-linux-x64-rpm.bin
3.看到 安装程序在询问您是否尊守许可协议页面 ,回车,空格都可以,看完协议. 出现一行字:Do you aggree to the above license terms? [yes or no]
安装程序在问您是否愿意遵守刚才看过的许可协议。输入"y" 或 "yes" 回车。
4.在命令行输入:
vi /etc/profile
在里面添加如下内容
export JAVA_HOME=/usr/java/jdk1.6.0_17
export JAVA_BIN=/usr/java/jdk1.6.0_17/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
5. 在命令行输入
java -version
屏幕输出:
java version "jdk1.6.0_17"
Java(TM) 2 Runtime Environment, Standard Edition (build j dk1.6.0_17)
Java HotSpot(TM) Client VM (build jdk1.6.0_17, mixed mode)
安装JDK1.6完毕.
二、 Tomcat的安装
安装的tomcat为:apache-tomcat-6.0.18.tar.gz
1. #tar zxvf apach-tomcat-6.0.18.tar.gz
#mv apach-tomcat-6.0.18/usr/local(移动tomcat的目录)
2. 进行tomcat环境的配置(前提需要安装jdk)
#vi /etc/profile
export JAVA_HOME=/usr/local/jdk1.6.0_17(jdk如果已经配置过的话,这里就不用写了)
export TOMCAT_HOME=/usr/local/apach-tomcat-6.0.18
保存退出
# source /etc/profile //让当前配置立即生效
3.启动tomcat服务器
$ /usr/local/apach-tomcat-6.0.18/bin/startup.sh
电脑上会出现如下内容:
Using CATALINA_BASE: /usr/local/apache-tomcat-6.0.18
Using CATALINA_HOME: /usr/local/apache-tomcat-6.0.18
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-6.0.18/temp
Using JRE_HOME: /usr/local/jdk1.6.0_17
在浏览器中输入http://localhost:8080/就可以看到tomcat的log了
tomcat的安装到此结束
三、 apache的安装
安装的apache为:httpd-2.2.14.tar.gz
1. # tar -zxvf httpd-2.2.14.tar.gz
# cd httpd-2.2.14
# ./configure --prefix=/usr/local/apache\ //安装路径
2. # make //编辑(在编译过程中出现无法编译,可能是没有安装gc编译器 在线安装gc编译器的命令是:#yum install gc )
# make install //安装
# cd /usr/local/apache/bin/
# ././apachectl //开启httpd服务
安装成功后,在IE中输入apache服务器的IP地址,可以看到It works! 说明安装成功
apache安装到此结束
四、 安装jk
安装的jk为:jakarta-tomcat-connectors-jk-1.2.6-src.tar.gz
1. # tar -zxvf jakarta-tomcat-connectors-jk-1.2.6-src.tar.gz
# cd /usr/local/jakarta-tomcat-connectors-jk-1.2.6-src/jk/native
# ./configure --with-apxs=/usr/local/apache/bin/apxs --with-java-home=/usr/java/jdk1.6.0_17/
# ./make //编译 (在编译过程中出现无法编译,可能是缺少gcc-* 在线安装gcc的命令是:yum install gcc-*)
# ./make install //安装
安装完成后 会在 /usr/local/apache/modules/ 产生mod_jk.so
安装jk到此结束
五、 开始集群配置
1. 修改apache配置文件
# vim /usr/local/apache/conf/httpd.conf
添加: Include conf/mod_jk.conf
2. 新建mod_jk.conf
# touch mod_jk.conf
# vim /usr/local/apache/conf/mod_jk.conf
加载 mod_jk Module: LoadModule jk_module modules/mod_jk.so
指定 workers.properties文件路径 :JkWorkersFile conf/workers.properties
3. 指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /*.jsp controller
JkMount /*.js controller
JkMount /jkstatus/ stat1
JkMount /test/* controller
4. 新建 workers.properties 文件
# touch workers.properties
# vim /usr/local/apache/conf/workers.properties
添加如下内容:
#server列表
worker.list = controller, stat1
#=======tomcat1=======
#ajp13端口号,在tomcat下server.xml配置, 默认为8009
worker.tomcat1.port=8009
#tomcat的主机地址,如不是主机,请填写ip地址
worker.tomcat1.host=192.168.0.1
worker.tomcat1.type=ajp13
#server的加权比重,值越高,分得的请求越多
worker.tomcat1.lbfacotr=1
#=======tomcat2=======
#ajp13端口号,在tomcat下server.xml配置, 默认为8009
worker.tomcat2.port=9009
#tomcat的主机地址,如不是主机,请填写ip地址
worker.tomcat2.host=192.168.0.2
worker.tomcat2.type=ajp13
#server的加权比重,值越高,分得的请求越多
worker.tomcat2.lbfacotr=1
#=======controller,负载均衡控制器=======
worker.controller.type=lb
#指定分担请求的tomcat
worker.controller.balanced_workers=tomcat1, tomcat2
#sticky_session属性设为1,这样负载均衡器lb就会尽量保持一个session,也就是使用户在一次会话中跟同一个Tomcat进行交互。
worker.stat1.type=status
5. tomcat 配置
1>. 修改/usr/local/tomcat1/conf/server.xml
A. 将<Engine name="Catalina" defaultHost="localhost">
修改为:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
B. 将<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改为:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4001"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<!--
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
-->
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
2>. 修改/usr/local/tomcat2/conf/server.xml
A. 将<Engine name="Catalina" defaultHost="localhost">
修改为:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
B. 将<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
修改为:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4001"
autoBind="100"
selectorTimeout="5000"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" />
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
<!--
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
-->
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
tomcat集群各节点通过建立tcp链接来完成Session的拷贝,拷贝有同步和异步两种模式。在同步模式下,对客户端的响应必须在Session拷贝到其他节点完成后进行;异步模式无需等待Session拷贝完成就可响应。异步模式更高效,但是同步模式可靠性更高。同步异步模式由channelSendOptions参数控制,默认值是8,为异步模式,4是同步模式。在异步模式下,可以通过加上拷贝确认(Acknowledge)来提高可靠性,此时channelSendOptions设为10。
Manager用来在节点间拷贝Session,默认使用DeltaManager,DeltaManager采用的一种all-to-all的工作方式,即集群中的节点会把Session数据向所有其他节点拷贝,而不管其他节点是否部署了当前应用。当集群中的节点数量很多并且部署着不同应用时,可以使用BackupManager,BackManager仅向部署了当前应用的节点拷贝Session。但是到目前为止BackupManager并未经过大规模测试,可靠性不及DeltaManager。
Channel负责对tomcat集群的IO层进行配置。Membership用于发现集群中的其他节点,这里的address用的是组播地址(Multicast address,了解更多组播地址详情请参见http://zyycaesar.iteye.com/admin/blogs/296501),使用同一个组播地址和端口的多个节点同属一个子集群,因此通过自定义组播地址和端口就可将一个大的tomcat集群分成多个子集群。Receiver用于各个节点接收其他节点发送的数据,在默认配置下tomcat会从4000-4100间依次选取一个可用的端口进行接收,自定义配置时,如果多个tomcat点在一台物理服务器上注意要使用不同的端口。Sender用于向其他节点发送数据,具体实现通过Transport配置,PooledParallelSender是从tcp连接池中获取连接,可以实现并行发送,即集群中的多个节点可以同时向其他所有节点发送数据而互不影响。Interceptor有点类似下面将要解释的Valve,起到一个阀门的作用,在数据到达目的节点前进行检测或其他操作,如TcpFailureDetector用于检测在数据的传输过程中是否发生了tcp错误。关于Channel的编程模型,请参见http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/tribes/Channel.html。
Valve用于在节点向客户端响应前进行检测或进行某些操作,ReplicationValve就是用于用于检测当前的响应是否涉及Session数据的更新,如果是则启动Session拷贝操作,filter用于过滤请求,如客户端对图片,css,js的请求就不会涉及Session,因此不需检测,默认状态下不进行过滤,监测所有的响应。JvmRouteBinderValve会在前端的Apache mod_jk发生错误时保证同一客户端的请求发送到集群的同一个节点,tomcat官方文档并未解释如何实现这一点,而且笔者认为这一设置似乎并无多大实用性。
Deployer用于集群的farm功能,监控应用中文件的更新,以保证集群中所有节点应用的一致性,如某个用户上传文件到集群中某个节点的应用程序目录下,Deployer会监测到这一操作并把这一文件拷贝到集群中其他节点相同应用的对应目录下以保持所有应用的一致。这是一个相当强大的功能,不过很遗憾,tomcat集群目前并不能做到这一点,开发人员正在努力实现它,这里的配置只是预留了一个接口。
Listener用于跟踪集群中节点发出和收到的数据,也有点类似Valve的功能。
启动顺序 tomcat1 ---->tomcat2---->apache
./configure //配置源代码树
--prefix=/usr/local/apache2 //体系无关文件的顶级安装目录PREFIX ,也就Apache的安装目录。
--enable-module=so //打开 so 模块,so 模块是用来提 DSO 支持的 apache 核心模块
--enable-mods-shared=all //编译全部的模板,对于不需要我们可以在httpd.conf去掉。
--enable-cache //支持缓存
--enable-file-cache //支持文件缓存
--enable-mem-cache //支持记忆缓存
--enable-disk-cache //支持磁盘缓存
--enable-static-support //支持静态连接(默认为动态连接)
--enable-static-htpasswd //使用静态连接编译 htpasswd - 管理用于基本认证的用户文件
--enable-static-htdigest //使用静态连接编译 htdigest - 管理用于摘要认证的用户文件
--enable-static-rotatelogs //使用静态连接编译 rotatelogs - 滚动 Apache 日志的管道日志程序
--enable-static-logresolve //使用静态连接编译 logresolve - 解析 Apache 日志中的IP地址为主机名
--enable-static-htdbm //使用静态连接编译 htdbm - 操作 DBM 密码数据库
--enable-static-ab //使用静态连接编译 ab - Apache HTTP 服务器性能测试工具
--enable-static-checkgid //使用静态连接编译 checkgid
--disable-cgid //禁止用一个外部 CGI 守护进程执行CGI脚本
--disable-cgi //禁止编译 CGI 版本的 PHP我们不再使用worker模式编译apache,worker模式和php貌似有一些不协调不稳定之处。所以使用了默认的perfork模式。
发表评论
-
LXC是什么?
2015-07-01 21:38 0LXC为Linux Container的简写。Linux Co ... -
linux 添加用户和组
2015-06-22 22:27 0# 查看用户 cat /etc/passwd |cut ... -
linux 下 ansible安装
2015-06-11 11:50 01. 安装第三方epel源 centos 5的epe ... -
Error: Cannot retrieve metalink for repository: epel. Please verify its path and
2015-06-11 10:46 0Error: Cannot retrieve metali ... -
Warning: Bison executable not found in PATH
2015-05-29 00:40 0Warning: Bison executable not f ... -
linux Ip设置
2015-05-28 23:07 0[root@localhost ~]# cat /etc/ ... -
Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't ex
2015-05-25 17:54 0Fatal error: Can't open and loc ... -
mysql :Plugin 'InnoDB' init function returned error.
2015-05-25 17:46 0Plugin 'InnoDB' init function r ... -
linux 下 mysql安装
2015-05-25 15:14 0一、编译安装MySQL前的准备工作 安装编译源码所需的工具和库 ... -
./configure: error: the HTTP image filter module requires the GD library.
2015-05-25 10:53 0./configure: error: the HTTP ... -
Centos 查看linux内核
2015-05-25 10:09 0uname -a uname -r -
linux 下nginx安装问题:/usr/include/openssl/md5.h:70:2: error: #error MD5 is disabled.
2015-05-21 17:53 0/usr/include/openssl/md5.h:70 ... -
linux 下nginx安装问题: make[1]: *** [objs/src/event/ngx_event_openssl.o] Error 1
2015-05-21 17:51 0make[1]: *** [objs/src/event/ ... -
linux 下nginx安装
2015-05-21 16:02 0Nginx需要依赖下面3个包 ... -
-bash: make: command not found的解决办法
2015-05-21 14:27 0一般出现这个-bash: make: command no ... -
Error: Cannot retrieve metalink for repository: epel. Please verify its path and
2015-05-19 18:19 0今天在使用yum安装,遇到一个问题: Error: Ca ... -
linux下打通ssh
2015-05-08 13:41 0[root@localhost ~]# ssh-keyge ... -
Linux RPM 命令参数使用详解
2015-01-19 23:16 0rpm 执行安装包 二进制包(Binary)以及源代码包(So ... -
Linux下RPM软件包的安装及卸载
2015-01-18 21:58 0在 Linux 操作系统下,几乎所有的软件均通过RPM 进行安 ... -
Redis介绍以及安装(Linux)
2015-01-18 21:40 0redis是当前比较热门的NOSQL系统之一,它是一个key- ...
相关推荐
tomcat+apache+jk集群和负载均衡
Apache+JK+Tomcat_集群
Apache+Tomcat+JK 实现集群负载均衡
apache+tomcat+jk 均衡负载和集群 内有详细文档和你所需要的安装文件。 很好很强大!1 很好很强大!1 很好很强大!1 很好很强大!1
Apache2.2.22+jk+tomcat7集群全套资料,本人自己测试并完整打包安装可以用
Apache2+Tomcat6+JK集群负载均衡.docx
apache+tomcat+jk集群,实现负载均衡。
http://blog.csdn.net/xiaokaiexe/article/details/8910897
apache + tomcat + mod_jk集群。我分别在windwos、linux32位、linux64位系统下都成功搭建。
讲述了怎样在liunx系统下配置tomcat集群,apache负载均衡,session黏贴,关于缓存,压缩可以在此基础上扩展
从gnhost到apache实现动态域名访问再与JK和Tomcat进行集群(包含添加tomcat系统服务),实现一台机多tomcat应用以http://mysite.gnway.net/项目名称的形式访问,全部是自己操作并截图,且实现成功,暂时在网上还没发现有...
Apache + mod_jk + tomcat来实现tomcat集群的负载均衡 都是64位的
将以下Module的注释去掉,这里并没有使用mod_jk.so进行apache和tomcat的链接,从2.X以后apache自身已集成了mod_jk.so的功能。只需简单的把下面几行去掉注释,就相当于以前用mod_jk.so比较繁琐的配置了。这里主要采用...
jk+apce+tomcat 整合 实现tomcat负载均衡 tomcat集群。让tomcat处理.jsp动态页面,apache处理静态页面。平且实现在一个IP下提供多个站点服务。 里面包括怎样配置apache虚拟机文件 怎样配置tomcat的虚拟机文件 花了我...
本资源包含了文章Apache2.2.x + Tomcat6.x + JK 集群配置,http://blog.csdn.net/qq396229783/article/details/74295797里面所用到的软件配置
apache+mod_jk+tomcat的集群环境配置,实现多个tomcat分担网络请求并同步session。文件里包含了一个配置说明文档,所需要的所有文件
共三个包包含:tomcat,apache2.2 jk1.37 测试过能使用,
文档描述了如何利用apache+jk+tomcat进行进行集群,并且里面的tomcat是已经配置好的,大家只需要下载后稍修改一下apache的集群配置文件既可以集群成功,如果大家有什么不懂的也可以联系我QQ:979532441
近期学习搭建Apache+Tomcat集群,发现配置项容易出错,网上查了一些资料都是泪,最后发现主要是apache版本要与mod_jk一致,再者配置要细心,这里附加集群搭建必备配置文件以及开发软件、代码,方便将来查看,有问题...
Apache+Tomcat集群所需的文件,包含mod_jk,tomcat7,以及apache的安装程序和集群部署步骤