目录
- 一、Tomcat中部署项目的相关配置
- 1.相关配置
- 2.测试
- 二、Tomcat间的会话同步
- 1.配置Tomcat
- 2.修改web工程的WEB-INF下的web.xml
- 3.配置Nginx
- 4.测试
一、Tomcat中部署项目的相关配置
1.相关配置
在Tomcat中进入conf/tomcat-users.xml文件,将以下代码放到最后
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="admin" password="admin" roles="manager-gui,mangerscript,manager-jmx,manager-status"/>
在Tomcat中conf/Catalina/localhost文件夹下创建manager.xml文件,并将以下代码放入该文件中
<?xml version="1.0" encoding="UTF-8"?>
<Context privileged="true" antiResourceLocking="false"
docBase="${catalina.home}/webapps/manager">
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="^.*$" />
</Context>
2.测试
当所有配置完成后启动Tomcat服务器,访问相应的IP地址:端口号。
点击Manager App后输入配置好的账号密码(这里账号密码均为admin)
点击选择文件,选择自己想要上传的项目war包即可
上传成功后使用IP地址:端口号/项目名称即可访问上传的项目
二、Tomcat间的会话同步
当我们采用Tomcat集群时,我们使用Nginx去分发请求。
但当一台服务器损坏时,用户访问另一台服务器时,当前会话的session id会改变,用户可能会出现丢失已登录的状态等问题。
要解决这个问题我们就应该做到服务器之间的session同步,也就是不管用户在本次会话中访问了哪一台服务器,当前会话的session id都不会改变。
1.配置Tomcat
进入Tomcat中conf/server.xml文件,将以下代码添加到Cluster标签后面
注:Cluster标签默认被注释,添加在注释之后即可
<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.MessageDispatchInterceptor"/>
</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.ClusterSessionListener"/>
</Cluster>
在另一台服务器中也做相同的配置,但要将以下四个位置进行修改,修改为任意的数字即可
注:如果是两台主机中的两个Tomcat,则不需要修改以上四个,只需将下面的改为当前Tomcat所在主机的IP地址即可
2.修改web工程的WEB-INF下的web.xml
对于要进行负载和集群的的应用中的WEB-INF中的web.xml文件要添加如下一句配置
<distributable/>
3.配置Nginx
在/usr/local/conf/nginx.conf中配置两个服务器的ip地址和端口号
4.测试
以上配置全部完成后即可进行测试
将两个服务器全部启动,将Nginx也启动后访问Nginx的IP地址/项目名称,并不断刷新,访问两台服务器并查看session id是否会变
不断刷新,Nginx会将分配到不同的服务器中,但一次会话得session id不会变化