Window下同一台服务器部署多个tomcat服务
本文使用tomcat 8.0压缩版进行部署。
· 工具
apache-tomcat-8.0.30
1.安装tomcat步骤
1. 下载apache-tomcat-8.0.30 ,下载下来的文件为apache-tomcat-8.0.30-windows-x64.zip
2. 解压该压缩包到D:/目录下。
3. 修改解压文件夹名字为:tomcat-8080
4. 在D:/目录下创建该文件夹的两个副本,分别更名为:tomcat-8081、tomcat-8082
5. 添加环境变量:右键单击我的电脑->选择属性->选择高级->选择环境变量:添加系统变量:
CATALINA_HOME_8080,其值为:D:\tomcat-8080;
CATALINA_HOME_8081,其值为:D:\tomcat-8081;
CATALINA_HOME_8082,其值为:D:\tomcat-8082;
6. 修改启动端口和关闭端口:
进入D:\tomcat-8081\conf\目录,打开server.xml文件,修改下面两个地方:
(1)<Server port="8006" shutdown="SHUTDOWN">
修改这个port=”8006”,使得它的关闭端口和另一个关闭端口不发生冲突。
(2)<Connector port="8081" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
修改port=”8081”,使得它的连接端口和另一个不冲突。
(3)<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改这个port=”8010”,使得它的AJP端口和另一个不冲突。
7. 修改startup.bat、shutdown.bat和catalina.bat文件内容:
(1) 打开D:\tomcat-8081\bin\startup.bat文件,把其中所有CATALINA_HOME替换为CATALINA_HOME_8081。
(2) 打开D:\tomcat-8081\bin\shutdown.bat文件,把其中所有CATALINA_HOME替换为CATALINA_HOME_8081。
(3) 打开D:\tomcat-8081\bin\catalina.bat文件,把其中所有CATALINA_HOME替换为CATALINA_HOME_8081。
9.按照上述方法配置tomcat-8080 ,tomcat-8082。
10.启动Tomcat,在命令行下分别进入三个不同的Tomcat安装目录下,执行startup.bat,分别启动三个Tomcat。然后在浏览器中输入以下内容,如果显示tomcat主页,则部署成功:
http://localhost:8080
http://localhost:8081
http://localhost:8082
2.将tomcat配置成服务
1.进入tomcat-8080/bin目录,修改 service.bat,找到以下内容,修改SERVICE_NAME为自定义的服务名
rem Set default Service name
set SERVICE_NAME=tomcat8080
set DISPLAYNAME=Apache Tomcat 8.0 %SERVICE_NAME%
2.在service.bat中搜索CATALINA_HOME,并全部替换为CATALINA_HOME_8080(与环境变量名保持一致)
3.在tomcat-8080/bin目录下,找到tomcat8.exe和tomcat8w.exe,重命名为SERVICE_NAME配置的名字一致,这里重命名为tomcat8080.exe和tomcat8080w.exe
4.使用命令行进入tomcat-8080/bin,执行service.bat install
5.使用win+r输入services.msc进入服务界面,找到DISPLAYNAME对应的服务名(即Apache Tomcat 8.0 tomcat8080),右键选择“属性”菜单,在“常规”选项卡选择“启动类型”为“自动”,或者进入tomcat-8080/bin目录 ,双击tomcat8080w.exe,在弹出的界面选中General选项卡,选择Startup type为Automatic,即开机自启动
tomcat服务启动· 至此,我们已经在一台服务器上配置了三个Tomcat。
3.配置tomcat集群session复制共享
一般来说做nginx负载均衡,会用到。
现在用tomcat8081、8082做session复制:分别配置这两个tomcat的server.xml。
找到tomcat安装路径,打开conf文件夹下的server.xml
在此句下方<Engine name="Catalina" defaultHost="localhost">粘贴进去以下内容,内容一般不用修改
<!--##################start配置tomcat集群8082、8083######################-->
<!-- 用于Session复制 -->
<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"/>
<!--这里如果启动出现异常,则可以尝试把address中的"auto"改为"localhost"-->
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="localhost"
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>
<!--address="228.0.0.4" 保留ip,用于广播-->
<!--Receiver.port=4000 在一台电脑上部署两个tomcat做负载均衡,此端口不能相同 -->
<!-- 第2步:在web.xml中添加如下节点 -->
<!-- 用于Session复制 -->
<!-- <distributable/> -->
<!--#########################end配置tomcat集群######################-->
4.创建一个spring的web项目
将这个项目放别放到tomcat8081、8082中
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
SessionID:<%=session.getId()%>
<BR>
SessionIP:<%=request.getServerName()%>
<BR>
SessionPort:<%=request.getServerPort()%>
<BR>
<h1>这是aaaaa</h1>
</body>
</html>
或者写个session创建的监听类
MySessionListener.java
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class MySessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent httpSessionEvent) {
//MySessionContext.AddSession(httpSessionEvent.getSession());
//当有session创建就会打印
System.out.println("sessionidall:===="+httpSessionEvent.getSession().getId());
}
public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
// HttpSession session = httpSessionEvent.getSession();
// MySessionContext.DelSession(session);
}
}
项目中web.xml里配置:<distributable/> 标签:session复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<distributable/>
<listener>
<listener-class>MySessionListener</listener-class>
</listener>
</web-app>
将这个spring项目放在tomcat8081、8082中,分别启动tomcat8081和tomcat8082.
访问http://localhost:8081/sessiontest/index.jsp和http://localhost:8082/sessiontest/index.jsp
看到的sessionId是一样的就OK了。
网友评论