Apache+tomcat集群 简易版环境搭建
2015-12-14 23:33
706 查看
今天闲来无事,就想自己搭建个tomcat集群环境试试. 网上这种例子很多,不过也是走了一些弯路,最后终于成功.记录下来.做个备忘.
主要分几步:
一) apache安装
二) apache,tomcat整合
三) 集群配置
一): apache安装
apache http server 目前最新版是2.4.17 , 官网提供下载的是源文件,还要编译后才能用, 所以我直接在官网上下载了 httpd-2.2.25-win32-x86-openssl-0.9.8y.msi
这个版本, 这是官网.msi文件里面,我找到的最新版,也是一个很常见的版本. 下载地址是 http://archive.apache.org/dist/httpd/binaries/win32/
下载后,双击安装,一路下一步,就OK了. (安装路径改一下, 我的是安装在D:\Apache2.2),里面的server name会默认自己的计算机名称.com
安装完成后,打开命令行,切换到安装目录 bin目录下,输入 httpd -v 显示出版本号,则安装成功. 且任务栏也会有一个apache的图标.
打开浏览器,在地址栏输入 http://localhost 会出现 It works! 字样, 服务已经开始工作.
二):apache,tomcat整合
apache可以解析一些静态的资源,例如css,js之类的, 动态的例如.do,.action,.jsp 需要交给app server去,我们用就是tomcat了. apache需要一个插件,和tomcat建立一个url的mapping关系,用来解析哪些请求需要交给tomcat去处理. (这里就可以利用这个,做一个动静分离了)
这个插件(模块)就是 mod_jk, 我在官网没找到现成的下载,就在网上下载了个编译好的. mod_jk-apache-2.2.3.so
注意,这个版本一定要和 apache server的版本匹配, 我本来在 网上下载了一个 mod_jk-1.2.31-httpd-2.2.x.so ,结果不能用.
下载完后,将文件copy到 D:\Apache2.2\modules , 然后修改apache的配置文件(D:\Apache2.2\conf\httpd.conf), 在最后面,加上如下内容
这里要注意第一句, 是指定刚才那个插件的,名称要完全匹配, 第二句,指定了一个插件的配置文件, 最下面有些JkMount, 就是一些转发规则.
然后我们在 D:\Apache2.2\conf 下新建一个 workers.properties , 内容如下
里面的tomcat和javahome换成你自己的. 这时候,我们测算下看配置有没有错误的, 如下图
点击 TestConf, 如果黑框一闪而过,则说明没有错误,否则黑框会停留,提示错误信息.重启apache(任务栏图标点击,会有选项)
然后我们新建个web项目,就放一个test.jsp文件,部署在tomcat1下面, jsp文件内容是从网上copy的,如下
启动tomcat1, 然后在地址栏输入
http://localhost:8080/test/test.jsp 和 http://localhost/test/test.jsp 均能正常访问, 则说明 整合成功.
三)集群配置
1).修改workers.properties 配置文件,修改后如下
这些配置,都比较明了, 要注意的就是sticky_session 这个属性, 是session和tomcat的粘性问题, 如果=1,则一个session始终固定到一个tomcat节点上,这个节点挂掉,这个session的操作就挂了
2).修改httpd.conf 配置文件, 把我们在上面加的 <VirtualHost> 段,改成如下的样子.
3).将刚才的tomcat1,复制一份,作为tomcat2 然后修改tomcat2配置文件.
<Server port="9005" shutdown="SHUTDOWN">
<Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="9443" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
然后在每个配置文件中,<Engine name="Catalina" defaultHost="localhost">的下面,加上下面一大段话(http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html)
注意: 里面的端口4001,2个tomcat不能一样.tomcat改成4002即可.
4). 将项目test, 复制一份到 tomcat2下, 启动tomcat1,tomcat2 然后访问 http://localhost/test/test.jsp ,正常显示.
这时候后台会打印出一串===, 表明这个tomcat正在处理,如图
然后我们将正在处理的这个tomcat关掉,再来访问刚才的地址,还能正常访问,另一个tomcat后台打印,如下图
至此,简易版的tomcat集群就算完成了, 2个tomcat挂掉一个也没关系,会自动切换.
当然了,实际应用中集群要考虑的事情会很多, 例如session复制的方式,横向集群还是竖向集群(本例这种) 等等, 不过知道原理,配置起来也快.
(文中用到的 httpd-2.2.25-win32-x86-openssl-0.9.8y.msi,mod_jk-apache-2.2.3.so 和测试项目, 可以到 http://download.csdn.net/detail/qq315737546/9356073 下载)
主要分几步:
一) apache安装
二) apache,tomcat整合
三) 集群配置
一): apache安装
apache http server 目前最新版是2.4.17 , 官网提供下载的是源文件,还要编译后才能用, 所以我直接在官网上下载了 httpd-2.2.25-win32-x86-openssl-0.9.8y.msi
这个版本, 这是官网.msi文件里面,我找到的最新版,也是一个很常见的版本. 下载地址是 http://archive.apache.org/dist/httpd/binaries/win32/
下载后,双击安装,一路下一步,就OK了. (安装路径改一下, 我的是安装在D:\Apache2.2),里面的server name会默认自己的计算机名称.com
安装完成后,打开命令行,切换到安装目录 bin目录下,输入 httpd -v 显示出版本号,则安装成功. 且任务栏也会有一个apache的图标.
打开浏览器,在地址栏输入 http://localhost 会出现 It works! 字样, 服务已经开始工作.
二):apache,tomcat整合
apache可以解析一些静态的资源,例如css,js之类的, 动态的例如.do,.action,.jsp 需要交给app server去,我们用就是tomcat了. apache需要一个插件,和tomcat建立一个url的mapping关系,用来解析哪些请求需要交给tomcat去处理. (这里就可以利用这个,做一个动静分离了)
这个插件(模块)就是 mod_jk, 我在官网没找到现成的下载,就在网上下载了个编译好的. mod_jk-apache-2.2.3.so
注意,这个版本一定要和 apache server的版本匹配, 我本来在 网上下载了一个 mod_jk-1.2.31-httpd-2.2.x.so ,结果不能用.
下载完后,将文件copy到 D:\Apache2.2\modules , 然后修改apache的配置文件(D:\Apache2.2\conf\httpd.conf), 在最后面,加上如下内容
LoadModule jk_module modules/mod_jk-apache-2.2.3.so JKWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log <VirtualHost *> ServerAdmin localhost ServerName localhost DirectoryIndex index.html index.htm index.jsp index.action ErrorLog logs/shsc-error_log.txt CustomLog logs/shsc-access_log.txt common JkMount /*WEB-INF ajp13 JkMount /*.action ajp13 JkMount /*.jsp ajp13 JkMount /*.do ajp13 JkMount /*.action ajp13 </VirtualHost>
这里要注意第一句, 是指定刚才那个插件的,名称要完全匹配, 第二句,指定了一个插件的配置文件, 最下面有些JkMount, 就是一些转发规则.
然后我们在 D:\Apache2.2\conf 下新建一个 workers.properties , 内容如下
workers.tomcat_home=d:/tomcat1 workers.java_home=D:/jdk1.7.0_80 ps=/ worker.list=ajp13 worker.ajp13.port=8009 worker.ajp13.host=localhost worker.ajp13.type=ajp13
里面的tomcat和javahome换成你自己的. 这时候,我们测算下看配置有没有错误的, 如下图
点击 TestConf, 如果黑框一闪而过,则说明没有错误,否则黑框会停留,提示错误信息.重启apache(任务栏图标点击,会有选项)
然后我们新建个web项目,就放一个test.jsp文件,部署在tomcat1下面, jsp文件内容是从网上copy的,如下
<%@ page contentType="text/html; charset=UTF-8" %> <%@ page import="java.util.*" %> <html><head><title>集群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> </form> </body> </html>
启动tomcat1, 然后在地址栏输入
http://localhost:8080/test/test.jsp 和 http://localhost/test/test.jsp 均能正常访问, 则说明 整合成功.
三)集群配置
1).修改workers.properties 配置文件,修改后如下
worker.list = controller #tomcat1 worker.tomcat1.port=8009 worker.tomcat1.host=localhost worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor=1 #tomcat2 worker.tomcat2.port=9009 worker.tomcat2.host=localhost worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=1 #========controller======== worker.controller.type=lb worker.controller.balance_workers=tomcat1,tomcat2 worker.controller.sticky_session=0 worker.controller.sticky_session_force=true worker.connection_pool_size=3000 worker.connection_pool_minsize=50 worker.connection_pool_timeout=50000
这些配置,都比较明了, 要注意的就是sticky_session 这个属性, 是session和tomcat的粘性问题, 如果=1,则一个session始终固定到一个tomcat节点上,这个节点挂掉,这个session的操作就挂了
2).修改httpd.conf 配置文件, 把我们在上面加的 <VirtualHost> 段,改成如下的样子.
<VirtualHost *> ServerAdmin localhost ServerName localhost DirectoryIndex index.html index.htm index.jsp index.action ErrorLog logs/shsc-error_log.txt CustomLog logs/shsc-access_log.txt common JkMount /*WEB-INF controller JkMount /*.action controller JkMount /*.jsp controller JkMount /*.do controller JkMount /*.action controller </VirtualHost>只是把 JkMount 后面的ajp13,换成了 workers.properties 里面对应的 controller
3).将刚才的tomcat1,复制一份,作为tomcat2 然后修改tomcat2配置文件.
<Server port="9005" shutdown="SHUTDOWN">
<Connector port="9090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="9443" />
<Connector port="9009" protocol="AJP/1.3" redirectPort="9443" />
然后在每个配置文件中,<Engine name="Catalina" defaultHost="localhost">的下面,加上下面一大段话(http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html)
<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"/> </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>
注意: 里面的端口4001,2个tomcat不能一样.tomcat改成4002即可.
4). 将项目test, 复制一份到 tomcat2下, 启动tomcat1,tomcat2 然后访问 http://localhost/test/test.jsp ,正常显示.
这时候后台会打印出一串===, 表明这个tomcat正在处理,如图
然后我们将正在处理的这个tomcat关掉,再来访问刚才的地址,还能正常访问,另一个tomcat后台打印,如下图
至此,简易版的tomcat集群就算完成了, 2个tomcat挂掉一个也没关系,会自动切换.
当然了,实际应用中集群要考虑的事情会很多, 例如session复制的方式,横向集群还是竖向集群(本例这种) 等等, 不过知道原理,配置起来也快.
(文中用到的 httpd-2.2.25-win32-x86-openssl-0.9.8y.msi,mod_jk-apache-2.2.3.so 和测试项目, 可以到 http://download.csdn.net/detail/qq315737546/9356073 下载)
相关文章推荐
- TOMCAT7启动报错
- 将Web项目War包部署到Tomcat服务器基本步骤
- IDEA win 版本强制关闭 tomcat 脚本
- tomcat8源码导入
- CVE-2014-0050: Exploit with Boundaries, Loops without Boundaries、Apache Commons FileUpload and Apache Tomcat DoS
- Windows Tomcat7.0 安装 Solr
- Eclipse Mars集成Tomcat插件
- 使用 Tomcat 7 新的连接池 —— Tomcat jdbc pool
- c3p0、dbcp、tomcat jdbc pool 连接池配置简介
- linux下java tomcat mysql搭建
- Tomcat(免安装版)环境变量及基本配置
- tomcat上传war包部署时超大小限制解决
- 修改tomcat配置文件启动多个tomcat
- Centos 安装JDK Tomcat
- tomcat 配置SSL(支付安全)
- 【JavaEE WEB 开发】Tomcat 详解 Servlet 入门
- 【JavaEE WEB 开发】Tomcat 详解 Servlet 入门
- CAS (3) —— Mac下配置CAS客户端经代理访问Tomcat CAS
- tomcat配置文件server.xml详解
- tomcat 6线程数达到默认值(200)处理方法