Tomcat+Memcached+Nginx实现session会话共享
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Tomcat+Memcached+Nginx实现session会话共享,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含11083字,纯文字阅读大概需要16分钟。
内容图文
环境:
ip | hostname | software version | OS | port |
192.168.1.120 | nginx-proxy-master.gz01 | nginx-1.8.1 | CentOS Linux release 7.4.1708 (Core) | 80 |
192.168.1.136 | tomcat-node01.gz01 | apache-tomcat-8.5.53 | CentOS Linux release 7.4.1708 (Core) | 8080 |
192.168.1.137 | tomcat-node02.gz01 | apache-tomcat-8.5.53 | CentOS Linux release 7.4.1708 (Core) | 8080 |
192.168.1.124 | mem-node01.gz01 | memcached-1.4.34 | CentOS Linux release 7.4.1708 (Core) | 11211 |
192.168.1.135 | mem-node02.gz01 | memcached-1.4.34 | CentOS Linux release 7.4.1708 (Core) | 11211 |
关闭防火墙和selinux,便于后面测试:
1 [root@mem-node01 ~]# systemctl stop firewalld
2 [root@mem-node02 ~]# systemctl stop firewalld
3 [root@tomcat-node01 ~]# systemctl stop firewalld
4 [root@tomcat-node02 ~]# systemctl stop firewalld
5 [root@nginx-proxy-master ~]# systemctl stop firewalld
1 [root@mem-node01 ~]# setenforce 02 [root@mem-node02 ~]# setenforce 03 [root@tomcat-node01 ~]# setenforce 04 [root@tomcat-node02 ~]# setenforce 05 [root@nginx-proxy-master ~]# setenforce 0
主机192.168.1.136 和192.168.1.137安装jdk和tomcat:
1 [root@tomcat-node01 tools]# ll
2 总用量 195372 3 -rw-r--r--. 1 root root 10300600 3月 2521:42 apache-tomcat-8.5.53.tar.gz
4 -rw-r--r--. 1 root root 189756259 3月 2522:08 jdk-8u161-linux-x64.tar.gz
5 [root@tomcat-node01 tools]# tar -zxvf jdk-8u161-linux-x64.tar.gz
6 [root@tomcat-node01 tools]# cp -r jdk1.8.0_161 /usr/local/jdk1.8.0_161
7 [root@tomcat-node01 tools]# ln -s /usr/local/jdk1.8.0_161/ /usr/local/jdk
8 [root@tomcat-node01 tools]# vim /etc/profile
9 JAVA_HOME=/usr/local/jdk/
10 CLASSPATH=$CLASSPATH:$JAVA_HOME/lib
11 PATH=$JAVA_HOME/bin:$PATH
12 [root@tomcat-node01 tools]# source /etc/profile
13 [root@tomcat-node01 tools]# java -version
14 java version "1.8.0_161"15 Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
16 Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
1718 [root@tomcat-node01 tools]# tar -zxvf apache-tomcat-8.5.53.tar.gz
19 [root@tomcat-node01 tools]# mv apache-tomcat-8.5.53 /usr/local/
20 [root@tomcat-node01 tools]# ln -s /usr/local/apache-tomcat-8.5.53/ /usr/local/tomcat
21 [root@tomcat-node01 tools]# vim /etc/profile
22 CATALINA_HOME=/usr/local/tomcat/
23 PATH=$JAVA_HOME/bin:/usr/local/tomcat/bin/:$PATH
24 [root@tomcat-node01 tools]# source /etc/profile
25 [root@tomcat-node01 tools]# /usr/local/tomcat/bin/startup.sh26 Using CATALINA_BASE: /usr/local/tomcat
27 Using CATALINA_HOME: /usr/local/tomcat
28 Using CATALINA_TMPDIR: /usr/local/tomcat/temp
29 Using JRE_HOME: /usr/local/jdk
30 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
31Tomcat started.
32 [root@tomcat-node01 tools]# netstat -lnt
33Active Internet connections (only servers)
34 Proto Recv-Q Send-Q Local Address Foreign Address State
35 tcp 000.0.0.0:220.0.0.0:* LISTEN
36 tcp 00127.0.0.1:250.0.0.0:* LISTEN
37 tcp6 00 :::8080 :::* LISTEN
38 tcp6 00 :::22 :::* LISTEN
39 tcp6 00 ::1:25 :::* LISTEN
40 tcp6 00127.0.0.1:8005 :::* LISTEN
41 [root@tomcat-node01 tools]#
4243 tomcat-node02 也是一样操作
设置一下tomcat测试主页
1 [root@tomcat-node01 ROOT]# pwd 2 /usr/local/tomcat/webapps/ROOT
3 [root@tomcat-node01 ROOT]# cat index.jsp
4 <%@ page language="java" %>
5 <%@ page import="java.util.*" %>
6 <html>
7 <head>
8 <title>>Tomcat 192.168.1.136:8080 </title>
9 </head>
10 <body>
1112 <h1><font color="blue">Tomcat 192.168.1.136:8080 </h1>
13 <table align="centre" border="1">
14 <tr>
15 <td>Session ID</td>
16 <% session.setAttribute("abc","abc"); %>
17 <td><%= session.getId() %></td>
18 </tr>
19 <tr>
20 <td>Created on</td>
21 <td><%= session.getCreationTime() %></td>
22 </tr>
23 </table>
24 </body>
25 </html>
262728 [root@tomcat-node02 ROOT]# pwd29 /usr/local/tomcat/webapps/ROOT
30 [root@tomcat-node02 ROOT]# cat index.jsp
31 <%@ page language="java" %>
32 <%@ page import="java.util.*" %>
33 <html>
34 <head>
35 <title>>Tomcat 192.168.1.137:8080 </title>
36 </head>
37 <body>
3839 <h1><font color="blue">Tomcat 192.168.1.137:8080 </h1>
40 <table align="centre" border="1">
41 <tr>
42 <td>Session ID</td>
43 <% session.setAttribute("abc","abc"); %>
44 <td><%= session.getId() %></td>
45 </tr>
46 <tr>
47 <td>Created on</td>
48 <td><%= session.getCreationTime() %></td>
49 </tr>
50 </table>
51 </body>
52 </html>
nginx-proxy-master.gz01 192.168.1.120 安装nginx
1
安装依赖
2 [root@nginx-proxy-master ~]# rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm3 Retrieving http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm4 warning: /var/tmp/rpm-tmp.K0JmFW: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
5 Preparing... ################################# [100%]
6 Updating / installing...
71:epel-release-7-12 ################################# [100%]
8 [root@nginx-proxy-master ~]# yuminstall -y gcc glibc gcc-c++ pcre-devel openssl-devel
1 [root@nginx-proxy-master tools]# pwd 2 /usr/local/tools
3 [root@nginx-proxy-master tools]# tar -zxvf nginx-1.8.1.tar.gz
4 [root@nginx-proxy-master tools]# cd nginx-1.8.1 5 [root@nginx-proxy-master nginx-1.8.1]# ./configure --prefix=/usr/local/nginx-1.8.1 6 --with-http_ssl_module 7 --with-http_stub_status_module --with-file-aio
8 [root@nginx-proxy-master nginx-1.8.1]# make 9 [root@nginx-proxy-master nginx-1.8.1]# makeinstall10 [root@nginx-proxy-master nginx-1.8.1]# ln -s /usr/local/nginx-1.8.1/ /usr/local/nginx
11 [root@nginx-proxy-master nginx-1.8.1]# /usr/local/nginx/sbin/nginx
12 [root@nginx-proxy-master nginx-1.8.1]# netstat -nltp|grep8013 tcp 000.0.0.0:800.0.0.0:* LISTEN 12495/nginx: master
配置nginx
1
http {
2
include mime.types;
3 default_type application/octet-stream;
4 sendfile on;
5 upstream tomcat{
6 server 192.168.1.137:8080 weight=1;
7 server 192.168.1.136:8080 weight=2;
8 }
910 server {
11 listen 80;
12 server_name localhost;
1314 location / {
15 proxy_pass http://tomcat;
16 }
1718 location ~* \.(jsp|do)$ {
19 proxy_pass http://tomcat;20 proxy_set_header Host $host;
21 }
1 [root@nginx-proxy-master conf]# /usr/local/nginx/sbin/nginx -t
2 nginx: the configuration file /usr/local/nginx-1.8.1/conf/nginx.conf syntax is ok
3 nginx: configuration file /usr/local/nginx-1.8.1/conf/nginx.conf test is successful
4 [root@nginx-proxy-master conf]# /usr/local/nginx/sbin/nginx -s reload
访问192.168.1.120
,发现访问请求结果会负载到192.168.1.136和192.168.1.137的tomcat上了。
在配置memcached-session-manager会话共享之前,访问nginx主机的请求会轮询负载到tomcat-node1和tomcat-node2两个节点上,并且session id会随着页面的刷新而改变,即此时还没有实现session会话共享
安装Memcached:(两个节点部署一样)
1 [root@mem-node02 tools]# yum -y install libevent libevent-devel
2 [root@mem-node02 tools]# tar -zxvf memcached-1.4.34.tar.gz
3 [root@mem-node02 tools]# cd memcached-1.4.34 4 [root@mem-node02 memcached-1.4.34]# ./configure --prefix=/usr/local/memcached
5 [root@mem-node02 memcached-1.4.34]# make 6 [root@mem-node02 memcached-1.4.34]# makeinstall 7 [root@mem-node02 memcached-1.4.34]# /usr/local/memcached/bin/memcached -d -m 512 -u root -p 11211 -c 1024 -P /var/lib/memcached.11211pid
8 [root@mem-node02 memcached-1.4.34]#
9 [root@mem-node02 memcached-1.4.34]# ps -ef|grep memcached
10 root 31051017:41 ? 00:00:00 /usr/local/memcached/bin/memcached -d -m 512 -u root -p 11211 -c 1024 -P /var/lib/memcached.11211pid
11 root 31381234017:51 pts/000:00:00grep --color=auto memcached
12 [root@mem-node02 memcached-1.4.34]# lsof -i:1121113 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
14 memcached 3105 root 26u IPv4 34290 0t0 TCP *:memcache (LISTEN)
15 memcached 3105 root 27u IPv6 34291 0t0 TCP *:memcache (LISTEN)
16 memcached 3105 root 28u IPv4 34294 0t0 UDP *:memcache
17 memcached 3105 root 29u IPv4 34294 0t0 UDP *:memcache
18 memcached 3105 root 30u IPv4 34294 0t0 UDP *:memcache
19 memcached 3105 root 31u IPv4 34294 0t0 UDP *:memcache
20 memcached 3105 root 32u IPv6 34295 0t0 UDP *:memcache
21 memcached 3105 root 33u IPv6 34295 0t0 UDP *:memcache
22 memcached 3105 root 34u IPv6 34295 0t0 UDP *:memcache
23 memcached 3105 root 35u IPv6 34295 0t0 UDP *:memcache
配置Tomcat,通过MSM实现共享session(192.168.1.136和192.168.1.137机器上操作)
1、把memcached的jar包上传到/usr/local/tomcat/lib/目录
[root@tomcat-node01 ROOT]# cd /usr/local/tomcat/lib/
[root@tomcat-node01 lib]# ll
4 -rw-rw-r-- 1 sys-noc sysnoc-work 53259 8月 272018 asm-5.2.jar
5 -rw-rw-r-- 1 sys-noc sysnoc-work 323740 8月 272018 kryo-4.0.0.jar
6 -rw-rw-r-- 1 sys-noc sysnoc-work 85217 8月 272018 kryo-serializers-0.38.jar
7 -rw-rw-r-- 1 sys-noc sysnoc-work 152401 8月 272018 memcached-session-manager-1.9.7.jar
8 -rw-rw-r-- 1 sys-noc sysnoc-work 10788 8月 272018 memcached-session-manager-tc8-1.9.7.jar
9 -rw-rw-r-- 1 sys-noc sysnoc-work 5711 8月 272018 minlog-1.3.0.jar
10 -rw-rw-r-- 1 sys-noc sysnoc-work 37160 8月 272018 msm-kryo-serializer-1.9.7.jar
11 -rw-rw-r-- 1 sys-noc sysnoc-work 51287 8月 272018 objenesis-2.4.jar
12 -rw-rw-r-- 1 sys-noc sysnoc-work 20883 8月 272018 reflectasm-1.11.3.jar
13 -rw-rw-r-- 1 sys-noc sysnoc-work 472838 8月 272018 spymemcached-2.12.2.jar
2、修改conf
/context
.xml文件:(No-Stick模式)
多个tomcat实例时 需要选择Non-Sticky模式,即sticky=
"false"
1 [root@tomcat-node01 conf]# cp context.xml context.xml.bak
2 [root@tomcat-node01 conf]# vim context.xml
3 4 <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" 5 memcachedNodes="n1:192.168.1.124:11211,n2:192.168.1.135:11211" 6 lockingMode="auto" 7 sticky="false" 8 sessionBackupAsync="false" 9 sessionBackupTimeout= "1000"10 copyCollectionsForSerialization="true"11 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"12 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"13 />
1 [root@tomcat-node01 conf]# /usr/local/tomcat/bin/shutdown.sh 2 Using CATALINA_BASE: /usr/local/tomcat
3 Using CATALINA_HOME: /usr/local/tomcat
4 Using CATALINA_TMPDIR: /usr/local/tomcat/temp
5 Using JRE_HOME: /usr/local/jdk
6 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
7 [root@tomcat-node01 conf]# /usr/local/tomcat/bin/startup.sh 8 Using CATALINA_BASE: /usr/local/tomcat
9 Using CATALINA_HOME: /usr/local/tomcat
10 Using CATALINA_TMPDIR: /usr/local/tomcat/temp
11 Using JRE_HOME: /usr/local/jdk
12 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
13Tomcat started.
14 [root@tomcat-node01 conf]#
MSM会话共享测试
1、访问nginx主机,按ctrl+F5强刷页面,发现session信息会变,但是sessionid不会改变!说明session实现了共享! 如下,表示当前sessionid保存到了n2这个memcached节点上了.
2、关闭tomcat-node1和tomcat-node2中的任意一个节点的tomcat服务,继续访问页面,发现前端从nginx负载过来的请求达到未关闭的tomcat节点上,sessionid都不会改变,任然在共享中!即可以实现tomcat故障转移
[root@tomcat-node01 conf]# /usr/local/tomcat/bin/shutdown.sh
[root@tomcat-node02 conf]# /usr/local/tomcat/bin/shutdown.sh
3、关闭mem-node2节点的memcached服务,继续访问页面,发现sessionid保存到了n1这个memcached节点上了,但是sessionid任然没有改变,说明session已共享. 也就是说,关闭memcached集群中的任意一个节点.访问页面,sessionid都不会改变.即可以实现memcached故障转移!
原文:https://www.cnblogs.com/xiaozhebao/p/12638560.html
内容总结
以上是互联网集市为您收集整理的Tomcat+Memcached+Nginx实现session会话共享全部内容,希望文章能够帮你解决Tomcat+Memcached+Nginx实现session会话共享所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。