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共享的负载均衡。