nginx与tomcat实现session共享负载均衡

所需准备的软件

两台机器,jdk8/tomcat8/nginx
说明:由于资源原因,这里使用虚拟机进行演示,虚拟机的环境为centos7,ip地址分别为:192.168.168.130/192.168.168.131,道理是一样的,如果是真机的话,操作是一样的。

第一步:安装java环境

在这里插入图片描述
下载之后上传至我们的虚拟机中,我的地址为:/opt/software
之后进行解压:

tar xzvf jdk-8u181-linux-x64.tar.gz

解完成之后配置java环境,

vi /etc/profile

将以下内容添加到文件末尾,JAVA_HOME要根据自己java安装位置进行配置

export JAVA_HOME=/opt/software/jdk1.8.0_181
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

esc—>":"----->wq 保存后退出

 source /etc/profile

查看java版本,是否安装成功

java -version

看到版本信息证明已经安装完

第二步:安装tomcat(tomcatA,ip为:192.168.168.131)(http://tomcat.apache.org/)

在这里插入图片描述
上传至我们的虚拟机中,我的位置为:/opt/software,解压:

 tar xzvf apache-tomcat-8.0.53.tar.gz

改名字为tomcat8080

mv apache-tomcat-8.0.53 tomcat8080

最终的目录为:
在这里插入图片描述
启动tomcat

/opt/software/tomcat8080/bin/startup.sh 

在电脑上访问链接地址:192.168.168.130:8080,成功访问.
之后修改配置文件:

vim /opt/software/tomcat8080/conf/server.xml

配置默认主机,添加jvmRoute

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatA">

定义虚拟主机,将网站文件路径指向/web/webapp

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Context docBase="/web/webapp" path="" reloadable="true"/>

添加测试文件

mkdir  -pv  /web/webapp

添加index.jsp页面

vi  /web/webapp/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>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title>tomcatA</title>
        </head>

        <body>
        <center><h1>tomcatA</h1></center>
        <center>
                <h3>sessionId:</h3><%=session.getId()%>
                <h3>session创建时间:</h3><%=session.getCreationTime()%>
        <center>
        </body>
</html>

保存退出,启动tomcat服务,进行测试

/opt/software/tomcat8080/bin/start.sh

外界访问:访问成功
在这里插入图片描述

第三步 将此环境克隆一份(虚拟机环境是一样的,所以不用重新进行配置,如果是真机的话,可以自行进行配置)

此步进行完毕之后,已经有了第二份tomcat,同样路径是/opt/software/tomcat8080
查看IP为:192.168.168.130
修改server.xml,将节点变为tomcatB

    <!-- You should set jvmRoute to support load-balancing via AJP ie :
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
    -->
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatB">

启动服务器,外界进行访问:
在这里插入图片描述
可以看到,两个tomcat的sessionID是不一样的,此时,我们的环境已经准备完毕,现在我们开始进行session会话的共享
查看官网:(http://tomcat.apache.org/tomcat-8.0-doc/cluster-howto.html)
在这里插入图片描述
复制选中的区域:
分别配置tomcatA与tomcatB

vim /opt/software/tomcat8080/conf/server.xml

找到被注释的cluster,在下边添加,修改Receiver的address为本机的ip

      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->
 <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="192.168.168.130"
                      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.ClusterSessionListener"/>
        </Cluster>

配置完毕
在web/webapp中创建文件夹WEB-INF,mkdir /web/webapp/WEB-INF
复制一个web.xml到此文件夹下:

在web.xml 文件中添加标签

vim  /web/webapp/WEB-INF/web.xml  
<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/>

分别启动两台tomcat进行测试,测试成功访问到之后,进行最后一步配置

第四步:配置nginx(我的nginx配置在与tomcatA在一台机器上,ip为:192.168.168.131)

解压并安装nginx

tar xzvf nginx-1.14.0.tar.gz
cd /opt/software/mginx-1.14.0
make && make install

修改nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
 upstream tomcat {
     server 192.168.168.130:8080;
     server 192.168.168.131:8090;
    }
     location / {
           # root   html;
           # index  index.html index.htm;
           proxy_pass http://tomcat;
     }

启动服务:

/usr/local/nginx/sbin/nginx

外界访问:

192.168.168.131

在这里插入图片描述
在这里插入图片描述

可以看到,,,已经进行了session共享,sessionId是一样的。至此完成tomcat集群实现session共享的负载均衡。

猜你喜欢

转载自blog.csdn.net/qiuqiu1628480502/article/details/82936264