Apache httpd + tomcat 简单集群
集群其实很简单,我们就来说一下httpd+tomcat集群都要注意哪些部分:
首先使用的东西有
apache-tomcat-8.0.32 下载地址: http://tomcat.apache.org/download-80.cgi
httpd-2.4.18-x86-vc11-r3/Apache24 下载地址:http://httpd.apache.org/download.cgi http://apache.opencas.org//httpd/binaries/win32/ http://www.apachehaus.com/cgi-bin/download.plx
tomcat-connectors-1.2.40-windows-i386-httpd-2.4.x/mod_jk.so 下载地址: http://tomcat.apache.org/download-connectors.cgi http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/
(tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x/mod_jk.so)看你是64位系统还是32位系统,当然也要看是windows平台还是linux平台
1,首先如果你决定使用用集群了, 那么你的web.xml中一定要有<distributable/>
下边是一个最简单的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<distributable />
<display-name>Archetype Created Web Application</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
2,对tomcat进行配置
如果你是单机启动多个tomcat的话一定要多注意几个点:
1)
<Server port="8006" shutdown="SHUTDOWN"> shutdwon server port,如果你是单机启动多个tomcat的话,这个端口尽量要每个都不一样。
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
2)
<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
注意一下这个协议下和这个端口, 这就是你单机、单个tomcat启动后,访问tomcat的端口。也就是:http://localhost:8081/webapplication/index.jsp.
redirectPort="8443" 这个可以暂时不用管,tomcat默认不用启动 ssProtocol 协议,如果你启动了话,详细可以找找tomcat配置https ssl tls相关的内容,这个端口也要每个tomcat都各不一样。
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
3)
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
这个地方是一定要注意的,因为 apache Httpd 和tomcat通信链接就是用这个端口,如果你是单机启动多个tomcat,这个端口也要每个都不一样。
关于ajp/1.3这个可以自己去查一下,记住ajp13。因为后边 apachehttpd 会用到这个,而且mod_jk的配置有个ajp13
4)
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
这个要看一下每个tomcat都要不一样,无论单机启动多个,还是多机启动多个。这个名字要记住,这个会和apache httpd mod_jk 中的worker名字对应,必须样一样!
5)
<!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
这个地方注释放开,这个使用的tomcat提供的默认的simpleTcpCluster即可,更多详细配置参见:
http://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html
http://tomcat.apache.org/tomcat-8.5-doc/index.html
到此 tomcat server.xml配置完毕,可以先启多个tomcat试试了tomcat了。
3,配置apache httpd
关于httpd的安装不多说了,找到\Apache24 目录,
把开始准备好的mod_jk.so放进Apache24\modules目录中,在这个目录中你会看有很多*.so文件,对这些都是链接库文件,就是这个目录,放进去。
注意的是和版本号,和系统,和多少位的系统,还有和(httpd是x64还是x86)都是紧密相关的,不要选错了mod_jk.so。
1)配置,首先要修改httpd.conf, 在Apache24\conf 目录先回找这个文件(关于Apachehttp的目录结构,可以自己下去多了解)
在httpd.conf的最后添加一行:
# Add mod_jk for tomcat load blance
Include conf/extra/mod_jk.conf #这个文件现在当然不存在了, 需要你创建的。
文件部分截图如下:
# Secure (SSL/TLS) connections
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
#Include conf/extra/httpd-ssl.conf
Include conf/extra/httpd-ahssl.conf
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
<IfModule http2_module>
ProtocolsHonorOrder On
Protocols h2 h2c http/1.1
</IfModule>
# Add mod_jk for tomcat load blance
Include conf/extra/mod_jk.conf
2)按照目录创建文件: conf/extra/mod_jk.conf
完整目录: Apache24\conf\extra\mod_jk.conf
mod_jk.conf文件里的内容要写些什么呢,下边是最简单的配置可以直接copy使用:
更多详细配置参考网站: http://tomcat.apache.org/connectors-doc/webserver_howto/apache.html
#
# Load mod_jk for tomcat load blance
#
#Load mod_jk module(加载mod_jk.so库)
LoadModule jk_module modules/mod_jk.so
#Where to find workers.properties(workers配置文件,这里边就配置了tomcat的集群信息,这个文件现在也不存在,需要自己创建)
JkWorkersFile conf/workers.properties
#Where to put jk shared memory(配置内存共享文件)
JkShmFile logs/httpd/mod_jk.shm
#Where to put jk logs(配置log文件)
JkLogFile logs/httpd/mod_jk.log
#Set the jk log level [debug/error/info](配置log级别,这里log级别开成info即可,有时在window下运行,会有莫名奇妙的问题,比如说权限,不报任何错误,但是运行不成功,所以开一打开debug看看。Windows先一定是run as Adminstator!,要不然你会看到log中有什么...创建shared memory之类的错误)
JkLogLevel debug
#Send servlet for context /examples to worker named worker1
#(配置一些过滤器,类似web中的过滤器,哪些路径文件走哪个worker, 特比要注意 controller,这个名字可以随便起,但是受限制于将要创建的workers.properties文件,要记住这个名字必须和worker.properties中的worker名字一致)
#JkMount /servlet/* controller
#JkMount /servlets/* controller
#Send JSPs for context /examples to worker named worker1
#JkMount /*.jsp controller
#JkMount /*.html controller
#JkMount /*.htm controller
JkMount /* controller
#monitor the cluster status(监控集群状态的配置,status同上,可以使用http://localhost/jkstatus监控集群状态)
JkMount /jkstatus status
3)创建 conf/workers.properties
全路径:Apache24\conf\workers.properties
workers.properties要写什么呢?tomcat集群的信息:
详细的配置和说明参考: http://tomcat.apache.org/connectors-doc/reference/workers.html
示例代码,可以直接copy 使用
worker.list=controller,status ####看到没,这个就是那个controller
worker.maintain=60
#========tomcat1========
worker.tomcat1.type=ajp13 ####还记得开始要注意的jvmRoute吗?还记得让记住的ajp13吗?
worker.tomcat1.host=localhost ####这个是一个ip地址,如果不是本机的直接给远程机器的IP
worker.tomcat1.port=8010 ####还记得开始让注意的 protocol="AJP/1.3" 的端口吗,就是它。
worker.tomcat1.lbfactor=1 ####负载均衡的一个因数,类似权重之类的,做集群负载均衡使用
#========tomcat2========
worker.tomcat2.type=ajp13
worker.tomcat2.host=localhost
worker.tomcat2.port=8011
worker.tomcat2.lbfactor=1
#========tomcat3========
worker.tomcat3.type=ajp13
worker.tomcat3.host=localhost
worker.tomcat3.port=8012
worker.tomcat3.lbfactor=1
#========controller,负载均衡控制器========
worker.controller.type=lb ####负载均衡控制器,类似一个虚拟的worker,type必须是lb
worker.controller.balanced_workers=tomcat1,tomcat2,tomcat3 ####负载均衡集群中所有的tomcat都在这里了
worker.controller.sticky_session=true #### 多个tomcat之间session的处理,使用不使用sticky的方式
worker.controller.sticky_session_force=1
worker.status.type=status #### 整个配置,包括集群中的tomcat的状态的查看。
到此所有的配置全部完毕。
现在可以重启tomcat和apache httpd了,如果你的配置没有问题的话,现在你就可以访问你的单个的tomcat,同时也可以访问你的apache httpd的集群入口。
下边给出一个session测试的页面,来测试session的情况。当然你必须要做成webapplication,因为需要web.xml 中的 <distributable /> 还记得不?
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<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="test.jsp" method="POST">
名称:<input type=text size=20 name="dataName"> <br/>
值:<input
type=text size=20 name="dataValue"> <br/>
<input type="submit" value="submit">
</form>
</body>
</html>
好了,文章到此应该技术了,关于集群 session 复制,初告一段落。
其实还有很多要思考的,再想一些websocket的应用,怎么弄, 比如使用websocket+html5在页面上画图,这个集群怎么弄呢?
Apache httpd + tomcat 简单集群的更多相关文章
- nginx做负载均衡和tomcat简单集群
Nginx做负载均衡和TOMCAT简单集群 1.下载安装nginx及其依赖包 ...
- Nginx+Tomcat简单集群
1.软件准备下载Nginx和Tomcat解压到一个目录2.修改Tomcat的端口Tomcat1:修改Server.xmlTomcat2:修改Server.xml3.测试Tomcat是否正常运行分别访问 ...
- apache整合tomcat部署集群
近日,由于公司项目需要,所以学习了apache整合tomcat以及集群的一些知识. 所以做下笔记日后回顾可以用到. apache只有处理静态事物的能力, 而tomcat的强项就是处理动态的请求,所以a ...
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式 2 (转)
本文Apache+Tomcat集群配置 基于最新的Apache和Tomcat,具体是2011年4月20日最新的Tomcat和Apache集群和负载均衡配置. 准备环境 Apache Apa ...
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式
本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实操经历记录而成,碰到些出入,以及个别地方依据个人的习惯,所以在一定程度上未能保持原文的完整性,还望原著者海涵. 因原文中有较多的 ...
- 结合Apache和Tomcat实现集群和负载均衡
http://fableking.iteye.com/blog/360870 TomcatApacheJSP应用服务器Web 本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实 ...
- apache与tomcat负载集群的3种方法
花了两天时间学习apache与tomcat的集成方法,现在把学习成果记录下来. apache与tomcat负载集群集成方法有3种jk.jk_proxy.http_proxy 本次集成使用的软件版本: ...
- 2. apache整合tomcat部署集群
apache只有处理静态事物的能力, 而tomcat的强项就是处理动态的请求,所以apache和tomcat整合相互取长补短,由apache作为入口,如果是请求静态页面或者是静态文件,由apache直 ...
- linux小白成长之路6————安装Java+Apache(httpd)+Tomcat
[内容指引] 安装Java环境: 查看JDK版本: 安装Apache(httpd); 安装Tomcat: 设置服务开机启动. 1.安装Java环境 指令: yum intall java-1.8.0* ...
随机推荐
- C#的winform拼数字游戏
C#的winform拼数字游戏 声明:阅读了别人的代码学习修改而来,增加了美观度和游戏乐趣.(作者出处忘了不好意思) 程序截图 关键代码 using System; using System.Coll ...
- Xcode8兼容iOS7手记-b
对于Xcode8的发布,苹果也是来了个大的跳跃,默认最低支持的iOS版本为8.0,当然也并不是说8.0以下就直接放弃了,虽然表现出来的是这样,毕竟使用8.0以下系统的还是大有人在的,老项目要兼容iOS ...
- 清橙A1363. 水位 - 清华大学2012年信息学优秀高中学子夏令营
问题描述 有一个正方形的地区,该地区特点鲜明:如果把它等分为N×N个小正方形格子的话,在每个格子内的任意地点的地表高度是相同的,并且是一个0到M之间的整数.正方形地区的外部被无限高的边界包围. 该地区 ...
- Node.js 随记
http://nodejs.org/ 下载并安装 node.js 最新版本 运行cmd,输入npm install xxxxxx 回车,安装扩展模块,如:express,socket.io等 运行c ...
- 【C++基础】指针好难啊,一点点啃——基本概念
指针保存的是另一个对象的地址(概念真的很重要!!) ; int *ptr = &a;//*定义一个指向int类型的指针ptr, &a取变量a的地址 引用是对象的别名,多用于函数形参,引 ...
- C# 静态类
静态类是不能实例化的,我们直接使用它的属性与方法,静态类最大的特点就是共享. 探究 public static class StaticTestClass { ; public static void ...
- hdoj 2204 Eddy's爱好
原文链接:http://www.cnblogs.com/DrunBee/archive/2012/09/05/2672546.html 题意:给你一个正整数N,确定在1到N之间有多少个可以表示成M^K ...
- poj 2253 Frogger (最短路变种,连通图的最长边)
题目 这里的dijsktra的变种代码是我看着自己打的,终于把代码和做法思路联系上了,也就是理解了算法——看来手跟着画一遍真的有助于理解. #define _CRT_SECURE_NO_WARNING ...
- 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...
- hdu 4335 What is N?
此题用到的公式:a^b%c=a^(b%phi(c)+phi(c))%c (b>=phi(c)). 1.当n!<phi(p)时,直接暴力掉: 2.当n!>=phi(p) &&a ...