1. 程式人生 > 實用技巧 >Tomcat 配置session共享

Tomcat 配置session共享

環境準備:

  • 時間同步,確保NTP或Chrony服務正常執行。
  • 防火牆規則
  • 禁用SELinux
  • 三臺主機
IP 主機名 服務 軟體
10.0.1.8 proxy 排程器 CentOS8、Nginx
10.0.1.18 t1 tocmat1 CentOS8、JDK8、Tomcat8、memcached
10.0.1.28 t1 tomcat2 CentOS8、JDK8、Tomcat8、memcached

1.配置nginx充當proxy

[root@proxy ~]#cat /etc/nginx/nginx.conf

http {
......
     upstream tomcat
-server { #ip_hash; server t1.magedu.org:8080;    server t2.magedu.org:8080; } server { ...... location / { } location ~* \.(jsp|do)$ { proxy_pass http://tomcat-server; }
}
}

[root@proxy ~]#cat /etc/hosts

10.0.1.8 proxy.magedu.org proxy
10.0.1.18 t1.magedu.org t1 10.0.1.28 t2.magedu.org t2

2.配置memcached

2.1在tomcat1上配置memcached

[root@t1 ~]#dnf -y install memcached
[root@t1 ~]#vim /etc/sysconfig/memcached
[root@t1 ~]#cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
#註釋下面行
#OPTIONS="-l 127.0.0.1,::1"
[root@t1 
~]#systemctl enable --now memcached.service

2.2在tomcat2 上配置memcached

配置和t1相同

[root@t2 ~]#dnf -y install memcached
[root@t2 ~]#vim /etc/sysconfig/memcached
[root@t2 ~]#cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
#註釋下面行
#OPTIONS="-l 127.0.0.1,::1"
[root@t2 ~]#systemctl enable --now memcached.service

3.配置 tomcat

配置tomcat1

[root@t1 tomcat]#vim conf/server.xml
<Engine name="Catalina" defaultHost="t1.magedu.org" jvmRoute="Tomcat1">
......
<Host name="t1.magedu.org" appBase="/data/webapps" autoDeploy="true" >
</Host>
</Engine>
</Service>
</Server>
[root@t1 tomcat]#vim conf/context.xml
<Context>
......
<Manager pathname="" />
-->
###倒數第一行前,即</Context>行的前面,加下面內容
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:10.0.1.18:11211,n2:10.0.1.28:11211"
    failoverNodes="n1"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/>
</Context> #最後一行
#將相關包傳到lib/目錄下
asm-5.2.jar
kryo-3.0.3.jar
kryo-serializers-0.45.jar
memcached-session-manager-2.3.2.jar
memcached-session-manager-tc8-2.3.2.jar
minlog-1.3.1.jar
msm-kryo-serializer-2.3.2.jar
objenesis-2.6.jar
reflectasm-1.11.9.jar
spymemcached-2.12.3.jar
[root@t1 tomcat]#
ls lib/ -t |tail kryo-3.0.3.jar asm-5.2.jar objenesis-2.6.jar reflectasm-1.11.9.jar minlog-1.3.1.jar kryo-serializers-0.45.jar msm-kryo-serializer-2.3.2.jar memcached-session-manager-tc8-2.3.2.jar spymemcached-2.12.3.jar memcached-session-manager-2.3.2.jar

[root@t1 tomcat]#chown -R tomcat.tomcat /data/webapps/ROOT/

[root@t1 tomcat]#systemctl restart tomcat

[root@t1 tomcat]#mkdir /data/webapps/ROOT -p
[root@t1 tomcat]#vi /data/webapps/ROOT/index.jsp

<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<h1> tomcat website1 </h1>
<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>

同理配置tomcat2

#t2參考上面t1做配置
[root@t2 tomcat]#vim conf/server.xml
<Engine name="Catalina" defaultHost="t2.magedu.org" jvmRoute="Tomcat2">
......
<Host name="t2.magedu.org" appBase="/data/webapps" autoDeploy="true" >
</Host>
</Engine>
</Service>
</Server>
[root@t2 tomcat]#vim conf/context.xml
<Context>
......
<Manager pathname="" />
-->
####################加下面內容################
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:10.0.1.18:11211,n2:10.0.1.28:11211"
    failoverNodes="n2" #只修改此行,和t1不同,其它都一樣
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFact
    ory"
  />
####################加上面內容################
</Context>
#將相關包傳到lib/目錄下
asm-5.2.jar
kryo-3.0.3.jar
kryo-serializers-0.45.jar
memcached-session-manager-2.3.2.jar
memcached-session-manager-tc8-2.3.2.jar
minlog-1.3.1.jar
msm-kryo-serializer-2.3.2.jar
objenesis-2.6.jar
reflectasm-1.11.9.jar
spymemcached-2.12.3.jar

[root@t2 tomcat]#vi /data/webapps/ROOT/index.jsp
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>tomcat test</title>
</head>
<body>
<h1> tomcat website2 </h1>
<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@t1 tomcat]#chown -R tomcat.tomcat /data/webapps/ROOT/
[root@t2 tomcat]#systemctl restart tomcat

4.檢視日誌

[root@t1 tomcat]#tail -n 20 logs/catalina.out
2020-12-11 15:30:49.092 INFO net.spy.memcached.MemcachedConnection:  Setting retryQueueSize to -1
2020-12-11 15:30:49.098 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=/10.0.1.18:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
2020-12-11 15:30:49.110 INFO net.spy.memcached.MemcachedConnection:  Added {QA sa=/10.0.1.28:11211, #Rops=0, #Wops=0, #iq=0, topRop=null, topWop=null, toWrite=0, interested=0} to connect queue
11-Dec-2020 15:30:49.125 INFO [t1.magedu.org-startStop-1] de.javakaffee.web.msm.RequestTrackingHostValve.<init> Setting ignorePattern to .*\.(ico|png|gif|jpg|css|js)$
11-Dec-2020 15:30:49.136 INFO [t1.magedu.org-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.setLockingMode Setting lockingMode to null
11-Dec-2020 15:30:49.138 INFO [t1.magedu.org-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.createTranscoderFactory Creating transcoder factory de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory
11-Dec-2020 15:30:49.156 INFO [t1.magedu.org-startStop-1] de.javakaffee.web.msm.serializer.kryo.KryoTranscoder.<init> Starting with initialBufferSize 102400, maxBufferSize 2048000 and defaultSerializerFactory de.javakaffee.web.msm.serializer.kryo.DefaultFieldSerializerFactory
11-Dec-2020 15:30:49.162 INFO [t1.magedu.org-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.startInternal --------
-  finished initialization:
- sticky: true
- operation timeout: 1000
- node ids: [n2]
- failover node ids: [n1]
- storage key prefix: null
- locking mode: null (expiration: 5s)
--------
11-Dec-2020 15:30:49.189 INFO [t1.magedu.org-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/data/webapps/ROOT] has finished in [990] ms
11-Dec-2020 15:30:49.206 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
11-Dec-2020 15:30:49.234 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
11-Dec-2020 15:30:49.236 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 1118 ms

5.訪問測試 http://proxy.magedu.org/index.jsp 反覆重新整理頁面顯示如下:

說明:配置成功!!!

6.通過python指令碼測試

6.1在t1 上安裝部署python3環境,訪問memcached

[root@t1 tomcat]#vi showmemcached.py
#!/usr/bin/python3
import memcache # pip install python-memcached
mc = memcache.Client(['10.0.1.18:11211','10.0.1.28:11211'], debug=True)
print('-' * 30)
#檢視全部 key
#for x in mc.get_stats('items'): # stats items 返回 items:5:number 1
# print(x)
#print('-' * 30)
for x in mc.get_stats('cachedump 5 0'):print(x)

[root@t1 tomcat]#chmod +x showmemcached.py

[root@t1 tomcat]#./showmemcached.py
------------------------------
('10.0.1.18:11211 (1)', {'6C53482119B3B15FB21A9CC9FD70CBA7-n1.Tomcat2': '[97 b; 1607675590 s]'})
('10.0.1.28:11211 (1)', {'6C53482119B3B15FB21A9CC9FD70CBA7-n2.Tomcat1': '[97 b; 1607636279 s]'})

之後多次重新整理頁面,執行指令碼後,session資訊不在變化,那麼恭喜你配置成功!!!

備註相關共享包下載地址:

連結:https://pan.baidu.com/s/15wFtkx_VHLBp49MJJ_Ub4Q
提取碼:vbf4