文章目录

  • 一、Nginx实现随机分配Tomcat服务器
  • 1、配置Nginx实现两个Tomcat服务器的跳转
  • 2、测试Nginx能否实现跳转
  • 二、在Tomcat服务器上部署项目
  • 三、Tomcat集群的会话同步
  • 1、Tomcat在同一台主机上
  • 2、Tomcat在不同的主机上


在部署完Tomcat和Nginx之后,我们就可以开始让Tomcat实现会话同步并使用Nginx随机分配

如果有需要了解部署的朋友可以去看Tomcat及Nginx的部署

一、Nginx实现随机分配Tomcat服务器

1、配置Nginx实现两个Tomcat服务器的跳转

注意:此时配置Nginx的位置在根目录下的usr中,因为解压完成之后,会在usr下生成一个Nginx,朋友们不要搞混,不是Nginx之前安装到的目录底下

cd usr/local/nginx
cd conf/
vim nginx.conf

在文件中的添加如下,添加完之后保存并退出

upstream mytomcat{
	server 118.31.55.xx:8080; #写自己部署的两个Tomcat的访问地址就好了,我这里都部署在同一台主机了
	server 118.31.55.xx:8090;
	}

proxy_pass http://mytomcat;

两个nginx集群 nginx集群数据同步_两个nginx集群

测试配置文件的编写是否正确

先进入当前nginx目录下的sbin目录
cd sbin
./nginx -t

启动Nginx

./nginx

在启动过后可以重启Nginx

./nginx -s reload

到这里Nginx随机分配Tomcat服务器的配置就完成啦。

2、测试Nginx能否实现跳转

如果是在同一台虚拟机或者是服务器上安装的两个Tomcat和Nginx的朋友,在浏览器测试时就输入主机的ip地址就好,然后就会进行随机分配

如果是在不同虚拟机上安装的Tomcat和Nginx的朋友,在测试时要输入安装Nginx的那台虚拟机的ip地址

有的朋友在启动Nginx后,在浏览器上访问的结果是这样

两个nginx集群 nginx集群数据同步_java_02

可能出现的原因:
①Nginx的配置文件修改错了地方,可能修改的nginx.xml文件是在nginx的安装目录下的;而不是在安装好nginx后在根目录下的usr里的nginx.xml文件;
②启动Tomcat时没有关闭防火墙;

二、在Tomcat服务器上部署项目

这里我将在IDEA上把项目打包,然后部署在Tomcat上,不需要参看的朋友可以直接跳到第三部分

打开IDEA,在IDEA上打好war包然后部署到服务器上

两个nginx集群 nginx集群数据同步_java_03

添加结束之后

两个nginx集群 nginx集群数据同步_Nginx_04

进行打包操作

两个nginx集群 nginx集群数据同步_Nginx_05

两个nginx集群 nginx集群数据同步_java_06

打好war包之后,会有一个war包在out文件下

我们就可以将这个war包部署在Tomcat服务器上

访问Tomcat,然后点击Tomcat的 Manager App,输入自己设置的账号和密码

忘记账号密码的朋友可以看设置Tomcat的账号密码

两个nginx集群 nginx集群数据同步_nginx_07

在图中的这个地方进行部署

两个nginx集群 nginx集群数据同步_tomcat_08

部署完毕之后,在上面应用程序就会出现这个项目

两个nginx集群 nginx集群数据同步_Nginx_09

附带这个测试项目的代码:

<head>
    <title>$Title$</title>
  </head>
  <body>
TomcatA  会话id为:<%= session.getId()%>
  </body>
</html>

三、Tomcat集群的会话同步

终于要来到了实现Tomcat集群会话同步这一步了
下面我将分成两种情况来实现:
①多个Tomcat在同一台主机上部署
②Tomcat在不同的主机上部署

1、Tomcat在同一台主机上

打开Tomcat的配置文件夹conf里的server.xml

vim conf/server.xml

在文件中放入

<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>

注:要注意这些放置的位置,应该放在下面这行的下面

<Engine name="Catalina" defaultHost="localhost">

两个nginx集群 nginx集群数据同步_两个nginx集群_10

两台Tomcat都需要放入这个,此时我们是在同一台主机上,所以要修改四个地方让其不一样

两个nginx集群 nginx集群数据同步_Nginx_11

两个nginx集群 nginx集群数据同步_java_12

两个nginx集群 nginx集群数据同步_java_13

将这四个地方修改即可

然后配置已经部署的war中的web.xml

在Tomcat的安装目录下

cd webapps

两个nginx集群 nginx集群数据同步_nginx_14

vim xxxx/WEB_INF/web.xml

两个Tomcat中都要添加

<distributable/>

两个nginx集群 nginx集群数据同步_java_15

这样就实现了Tomcat集群会话同步,到浏览器上直接访问Nginx的ip地址就可以验证

注:Tomcat都必须要启动,然后在各自的Tomcat服务器上都要点开部署好的项目,这样效果才会明显,我们此刻就会注意到两个Tomcat的session是一样的

2、Tomcat在不同的主机上

在Tomcat的配置文件中都要加入前面的那一大段,只是修改的地方不同

两个nginx集群 nginx集群数据同步_nginx_16

只需要修改一个地方,修改配置文件的这个地方,将address=“auto” 改成本主机的ip地址即可

两个nginx集群 nginx集群数据同步_Nginx_17

剩下的步骤都是相同的