集群说明:
1. 负载均衡(Load Balance):当同一客户端发起一个请求时,apache始终将请求转发到同一个节点 (sticky session),当另一个客户端或同一客户端从一个新的浏览器窗口发起请求时,apache会把请求分发到另一节点 上,依次轮询,当然,可以在apache上设置后端tomcat的分发权重。从而达到负载均衡的效果。
2. 高可用(High availablity):当其中一台tomcat server 突然crash时,apache会将这在进行的请求分发到集群中其他tomcat server上,由于集群member 之间已经session replication,所以原来的session 会在另外一节点上继续进行,此时,请求已发生了无缝转移,在客户端完全感觉不到故障已发生。
Linux下通过Apache搭建Tomcat集群
一.准备工作:
系统:CentOS release 6.2(Final)
软件:httpd-2.2.24.tar.gz
tomcat-connectors-1.2.37-src.tar.gz
apache-tomcat-6.0.37.tar.gz
集群分配:192.168.1.103 安装apache tomcat-connectors
192.168.1.22 安装tomcat22
192.168.1.23 安装tomcat23
二.安装
1.1安装Apache 192.168.1.103
[root@localhost soft]#wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.2.24.tar.gz [root@localhost soft]#tar -zxvf httpd-2.2.24.tar.gz //解压apache的压缩包
[root@localhost soft]#cd httpd-2.2.24 //定位到httpd-2.2.24 文件夹下
[root@localhost httpd-2.2.24]#ls //查看显示httpd-2.2.24 文件夹下内容
[root@localhost httpd-2.2.24]#./configure --help | more //查看安装apache配置参数
[root@localhost httpd-2.2.24]#./configure --prefix=/opt/apache --enable-so --enable-mods-shared=all // 配置apache路径
[root@localhost httpd-2.2.24]#make //编译apache
[root@localhost httpd-2.2.24]#make install //安装apache
[root@localhost httpd-2.2.24]#cd /opt/apache //进入apache的目录
[root@localhost apache]# cd conf/
[root@localhost conf]#cp -a httpd.conf httpd.conf- //备份apache配置文件
[root@localhost conf]#vi httpd.conf
修改#ServerName www.example.com:80为ServerName localhost:80
[root@localhost conf]#/opt/apache/bin/apachectl -k start //linux启动apache命令
[root@localhost conf]#netstat -an | grep :80 //查看linux80端口是否开启
[root@localhost conf]#ps -aux | grep httpd //linux下查看apache进程
[root@localhost conf]#cd ../..
[root@localhost opt]#cp /opt/apache/bin/apachectl /etc/rc.d/init.d/apache //拷贝apache启动脚本
[root@localhost opt]#vi /etc/rc.d/init.d/apache // 这里是编辑apache启动脚本
在开头的#!/bin/sh 下面加上
#chkconfig: 2345 85 15
[root@localhost opt]#chkconfig --add apache //添加apache服务
[root@localhost opt]#chkconfig --list apache //列出apache服务
[root@localhost opt]#service apache stop //停止apache服务
[root@localhost opt]#netstat -an | grep :80 //查看linux的80端口是否关闭
[root@localhost opt]#ps -aux | grep httpd //查看是否存在httpd服务,若果之前自带httpd服务启动的话会导致新添加的apache服务启动失败
[root@localhost opt]#service apache start //启动apache服务
[root@localhost opt]#curl 127.0.0.1
附:安装proxy (httpd-2.2.24版本)
httpd-2.4.9版本无需安装proxy,安装httpd-2.4.9版本后,会自动安装proxy相关文件,在modules目录下面就有mod_proxy_balancer.so、 mod_proxy_ftp.so等相关文件,无需再单独安装proxy了(2014.07.07 补充)
进入apache源代码的modules目录
[root@localhost opt]# cd /opt/httpd-2.2.24/modules/proxy/
[root@www proxy]# ls
[root@www proxy]# /opt/apache/bin/apxs -c -i -a mod_proxy.c proxy_util.c
[root@www proxy]# /opt/apache/bin/apxs -c -i -a mod_proxy_balancer.c mod_proxy_connect.c mod_proxy_http.c
[root@www proxy]# /opt/apache/bin/apxs -c -i -a mod_proxy_ftp.c
重启apache。
选项说明:
-c 执行编译操作
-i 安装操作,安装一个或多个动态共享对象到服务器的modules目录
-a 自动增加一个LoadModule行到httpd.conf文件,以激活此模块,若此行存在则启用之
-A 与-a类似,但是它增加的LoadModule行前有井号前缀(#)
-e 需要执行编辑操作,可与-a和-A选项配合使用,与-i操作类似,修改httpd.conf文件,但并不安装此模块
2.安装tomcat-connectors 192.168.1.103
[root@zqkj103 soft]# wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.37-src.tar.gz
[root@zqkj103 soft]# tar -zxvf tomcat-connectors-1.2.37-src.tar.gz
[root@zqkj103 soft]# cd tomcat-connectors-1.2.37-src
[root@zqkj103 tomcat-connectors-1.2.37-src]# ls
[root@zqkj103 tomcat-connectors-1.2.37-src]# cd native/
[root@zqkj103 native]# ls
[root@zqkj103 native]# ./buildconf.sh
如果提示:
buildconf: checking installation...
buildconf: autoconf not found.
You need autoconf version 2.59 or newer installed
to build mod_jk from SVN.
[root@zqkj103 native]# ./buildconf.sh
[root@zqkj103 native]# yum install autoconf
[root@zqkj103 native]# ./buildconf.sh 再次提示
buildconf: checking installation...
buildconf: autoconf version 2.63 (ok)
buildconf: libtool not found.
You need libtool version 1.4 or newer installed
to build mod_jk from SVN.
[root@zqkj103 native]#yum install libtool
[root@zqkj103 native]# ./buildconf.sh
[root@zqkj103 native]# ./configure --with-apxs=/usr/local/apache/bin/apxs
[root@zqkj103 native]# make
[root@zqkj103 native]# make install
如果成功结束,你可以在/usr/local/apache/modules/下找到mod_jk.so文件。
3.安装tomcat 192.168.1.22
[root@zqkj22 soft]# cd /opt
[root@zqkj22 opt]# ls
[root@zqkj22 opt]# wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-6/v6.0.37/bin/apache-tomcat-6.0.37.tar.gz [root@zqkj22 opt]#tar -zxvf apache-tomcat-6.0.37.tar.gz
4.安装tomcat 192.168.1.23
[root@zqkj23 soft]# cd /opt
[root@zqkj23 opt]# ls
[root@zqkj23 opt]# wget http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-6/v6.0.37/bin/apache-tomcat-6.0.37.tar.gz [root@zqkj22 opt]#tar -zxvf apache-tomcat-6.0.37.tar.gz
5.修改192.168.1.22机器上tomcat的配置
修改server.xml
<Engine name="Catalina" defaultHost="localhost">修改为
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat22">
把
<!- -
<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="4000"
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"/>
</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>
配置web.xml,增加<distributable/>元素,表示此应用将与群集服务器复制Session
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<distributable/>
6.修改192.168.1.23机器上tomcat的配置
修改server.xml
<Engine name="Catalina" defaultHost="localhost">修改为
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat23">
把<!- -
<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"/>
<!--
注释:此处刚开始我设置的4000,可是tomcat总启动后,总是无法访问项目,遂改成了4001,则可以了。具体原因不明,不知道跟23机器上的端口是否冲突的原因。但是在22机器上,设置4000是可以的。也不知是否不能跟22机器上的端口一样
-->
<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"/>
</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>
配置web.xml,增加<distributable/>元素,表示此应用将与群集服务器复制Session
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<distributable/>
7.配置Apache中的httpd.conf
打开apache安装目录下的conf/httpd.conf文件,在文件最后追加以下内容:
# Load mod_jk module
LoadModule jk_module modules/mod_jk.so
# Specify jk log file.
JkLogFile /var/log/mod_jk.log
# Specify jk log level [debug/error/info]
JkLogLevel info
# Specify workers.properties, this file tell jk:
# how many nodes and where they are.
JkWorkersFile conf/workers.properties
# Specify which requests should handled by which node.
JkMount /*.jsp controller
8.配置workers.properties
新建workers.properties 用vi命令
上述配置中:JkWorkersFile conf/workers.properties 指明由一个workers.properties文件来描述集群结点的情况,因此,我们需要创建这个workers.properties文件,并放置于 conf文件夹下,这个文件的内容如下:
worker.list = controller,tomcat22,tomcat23
#========tomcat1========
worker.tomcat22.port=8009
# 此处的端口是指<Connector port="8009" redirectPort="8443" protocol="AJP/1.3"/>处的
worker.tomcat22.host=192.168.1.22
worker.tomcat22.type=ajp13
worker.tomcat22.lbfactor = 1
#========tomcat2========
worker.tomcat23.port=8009
worker.tomcat23.host=192.168.1.23
worker.tomcat23.type=ajp13
worker.tomcat23.lbfactor = 1
#========controller========
worker.controller.type=lb
worker.controller.balance_workers=tomcat22,tomcat23
worker.controller.sticky_session=false
worker.controller.sticky_session_force=1
#worker.controller.sticky_session=1
9.建立项目测试
建立test项目,需要在项目的web.xml中添加<distributable/>
建立test2.jsp,内容如下(网上都用这个测试,我就省的麻烦了):
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.util.*" %>
<html><head><title>Cluster App Test</title></head>
<body>
Server Info:
<%
out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"<br>");%>
<%
out.println("<br> ID " + session.getId()+"<br>");
// 如果有新的 Session 属性设置
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue = request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
out.println("<b>Session 列表</b><br>");
System.out.println("============================");
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value = session.getAttribute(name).toString();
out.println( name + " = " + value+"<br>");
System.out.println( name + " = " + value);
}
%>
<form action="test2.jsp" method="POST">
名称:<input type=text size=20 name="dataName">
<br>
值:<input type=text size=20 name="dataValue">
<br>
<input type=submit>
</form>
</body>
</html>
上面的测试页面就不解释了,很好理解。
注:关闭22和23的防火墙,不然访问不了,或者tomcat无法正常启动,或者能访问,但是每次重新请求session都会丢失,更不能共享
service iptables stop
原本打算用tomcat8 ,但是添加< Cluster >标签后,无法启动tomcat,遂只能改用tomcat6进行配置 ;此情况可能是路由组播造成的。当不使用默认网络eth0时,tomcat6也会出现此情况。至于tomcat8没有再具体测试。或者也有可能是防火墙未关闭(2014.07.07 补充)
linux 下tomcat开机自启动
修改Tomcat/bin/startup.sh 为:
export JAVA_HOME=/usr/java/jdk1.8.0_05
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:.
export PATH=$PATH:$JAVA_HOME/bin
export CATALINA_HOME=/opt/tomcat01
/opt/tomcat01/bin/catalina.sh start
在/etc/rc.d/rc.local中加入:
/opt/tomcat01/bin/startup.sh
相关推荐
### Linux下Apache+Tomcat集群指南 #### 一、系统集群环境...通过上述步骤和注意事项,您可以在Linux环境下成功搭建一个Apache+Tomcat集群,并实现负载均衡和Session复制等功能,从而显著提升Web应用的性能和稳定性。
### Apache和Tomcat集群配置详解 #### 一、软件准备 在进行Apache和Tomcat集群配置之前,首先需要准备所需的软件资源。...通过以上步骤,可以成功搭建Apache和Tomcat集群,实现高效的Web应用服务器环境。
基于Xen虚拟机实现Apache Tomcat集群搭建的知识点如下: 1. Xen虚拟机技术:Xen是一个开源的虚拟机监视器,允许用户在同一台物理主机上运行多个虚拟机,每个虚拟机可以运行不同的操作系统。Xen具有高性能和高扩展性...
本说明手册为了阐述Linux搭建Apache+Tomcat环境,并详细介绍Tomcat的集群和负载均衡配置而编写。届时介绍域名的绑定,Red Hat和Ubuntu中随系统自动启动个软件的配置方法。
- 本文档针对Apache Tomcat集群配置进行了详尽的说明,特别适合新手入门学习,通过本文档能够快速掌握Apache Tomcat集群的基本概念、搭建步骤及注意事项。 #### 知识点详解: ##### 一、集群基础知识 1. **学习...
### Linux环境下Apache+Tomcat集群负载均衡搭建详解 在企业级应用中,为了提升服务器的稳定性和处理能力,常采用Apache+Tomcat集群的方式来进行负载均衡。本文将详细介绍如何在Linux环境下搭建Apache+Tomcat集群...
【标题】:“如何搭建apache+tomcat集群” 在IT行业中,服务器集群是一种常见的技术实践,用于提高应用的可用性和性能。Apache HTTP Server和Tomcat是两种广泛应用的软件,前者是强大的HTTP服务器,后者是Java ...
为了搭建Tomcat集群,首先需要安装JDK。 1. **下载JDK**:选择JDK 1.6或更高版本。 2. **安装JDK**:安装过程省略。 3. **配置环境变量**:设置JDK_HOME、CLASSPATH和PATH环境变量。 ```bash export JAVA_HOME=/...
这个过程涉及到的知识点包括Linux系统管理、Nginx配置、Tomcat集群设置以及源码编译。 首先,Nginx是一款高性能的HTTP和反向代理服务器,常用于处理静态内容和作为负载均衡器,将请求分发到后端不同的服务器。Nginx...
本文将详细介绍如何在Linux环境中搭建Apache HTTP服务器、Tomcat应用服务器以及使用mod_jk模块实现负载均衡集群。这个集群配置可以有效地分发Web请求到多个Tomcat实例,提高服务的响应能力和可靠性。 首先,我们来...
- 通过浏览器访问`http://172.16.116.1/index.jsp`,检查是否能够成功访问,并观察日志文件确认请求是否被正确地分发至Tomcat集群中的不同节点。 #### 四、注意事项 1. **权限问题**: 确保所有操作均以具有足够...
为了顺利搭建Apache+Tomcat集群,首先需要下载以下软件包: - Apache Web Server; - mod_jk 模块(用于实现Apache与Tomcat之间的通信); - JDK(Java Development Kit); - Tomcat Server。 注意,mod_jk 的版本...
本文将详细讲解如何在Linux系统上搭建Tomcat集群,并利用Nginx作为反向代理服务器来实现集群的管理和调度。 首先,我们需要准备以下软件: 1. Tomcat 6.0.33:作为Java应用服务器,可以从Apache官方网站...