目录
一、 负载均衡、反向代理
环境搭建: nginx服务器192.168.246.7 tomcat 1服务器192.168.246.8
tomcat 2服务器192.168.246.9
7-1 nginx服务器搭建
[root@zzcentos1 ~]#systemctl stop firewalld
[root@zzcentos1 ~]#setenforce 0
[root@zzcentos1 ~]#yum install epel-release.noarch -y
[root@zzcentos1 ~]#yum install nginx -y
[root@zzcentos1 ~]#rpm -ql nginx
[root@zzcentos1 ~]#systemctl start nginx
[root@zzcentos1 ~]#systemctl status nginx
[root@zzcentos1 ~]#vim /etc/nginx/nginx.conf
upstream tomcat {
server 192.168.246.8:8080;
server 192.168.246.9:8080;
}
location ~* \.jsp$ {
proxy_pass http://tomcat;
}
7-2 和 7-3 tomcat 搭建
7-2 tomcat 搭建、写入主页面
[root@zzcentos2 local]#cd /usr/local/tomcat/webapps/
[root@zzcentos2 webapps]#ls
docs examples host-manager manager ROOT
[root@zzcentos2 webapps]#cd /usr/local/tomcat/webapps/ROOT/
[root@zzcentos2 ROOT]#ls
asf-logo-wide.svg bg-middle.png bg-upper.png index.jsp tomcat.css tomcat.png tomcat.svg
bg-button.png bg-nav.png favicon.ico RELEASE-NOTES.txt tomcat.gif tomcat-power.gif WEB-INF
[root@zzcentos2 ROOT]#mv index.jsp index.jsp.bak
[root@zzcentos2 ROOT]#ls
asf-logo-wide.svg bg-middle.png bg-upper.png index.jsp.bak tomcat.css tomcat.png tomcat.svg
bg-button.png bg-nav.png favicon.ico RELEASE-NOTES.txt tomcat.gif tomcat-power.gif WEB-INF
[root@zzcentos2 ROOT]#rz -E
rz waiting to receive.
[root@zzcentos2 ROOT]#ls
asf-logo-wide.svg bg-nav.png index.jsp tomcat.css tomcat-power.gif
bg-button.png bg-upper.png index.jsp.bak tomcat.gif tomcat.svg
bg-middle.png favicon.ico RELEASE-NOTES.txt tomcat.png WEB-INF
[root@zzcentos2 ROOT]#cat index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
? <meta charset="UTF-8">
? <title>tomcat test</title>
</head>
<body>
<div>On <%=request.getServerName() %></div>
<div><%=request.getLocalAddr() + ":" + request.getLocalPort() %></div>
<div>SessionID = <span style="color:blue"><%=session.getId() %></span></div>
<%=new Date()%>
</body>
</html>
[root@zzcentos2 ROOT]#
7-3 tomcat搭建、写入主页面
检测:访问代理服务器192.168.246.7/index.jsp
去访问代理服务器会发现,每次调度到192.168.246.8和192.168.246.9上面,sessionID都会改变,我们要让他保持会话连接(sessionID不会变)
客户端访问代理服务器,第一次访问被调度到tomcat1服务器,由于是第一次访问,客户的cookie缓存中不会有sessionid,服务器会生成sessionid 1给 c1客户,c1客户会把sessionid 记录下来
客户端第二次访问代理服务器,由于调度器的原因,不能保证一直去访问tomcat1,如果被调度到tomcat2, tomcat2服务器是没有sessionid 1, 它会认为我要生成新的sessionid 给c1客户,c1客户会更新自己的sessionid变成sessionid2
1.当客户端去访问代理服务器;代理服务器调度给Tomcat1;如果是第一次访问:客户端cookie里面没有sessionID,Tomcat1服务器就给给客户端生成一个sessionID并且发给客户端;客户端会将sessionID存在cookie中;当客户端第二次去访问Tomcat1时,会带着Tomcat1的sessionID,第二次,Tomcat1就不会给客户端生成新的sessionID
2.由于代理服务器调度的原因;不会每次都调度给Tomcat1;当调度给Tomcat2时;cookie带的是sessionID1;Tomcat2上要用sessionID2,他就会生成一个新的ID给客户端
3.所以,来回调度的时候,每次都是新的sessionID
第一次访问到tomcat1不知道id,随机分发的一个为sid1
第三次,用户带着sid2来访问代理服务器但是,tomcat1不知道sid2,所以他又重新分发sid
第二次访问时带着sid1来访问,但是代理服务器随机分发到了tomcat2此时,tomcat2不知道sid1,所以他又重新分发sid2
二、会话绑定
方法一:IP hash
检测:
缺点:服务器也固定了,服务器也不调度了
方法二:
Apache Tomcat 9 (9.0.87) - Clustering/Session Replication How-To
把官网中,蓝色页面内容全部复制到主配置文件中
<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>
先把之前的ip hash删掉,不影响后续
tomcat配置 7-2
子配置文件:
tomcat配置 7-3
子配置文件配置:
检测:
不管调度7-2还是7-3,不管调度到那个tomcat服务器,sessionID都保持一致,不变化了