搭建nginx+3*tomcat环境 实现session共享

搭建nginx+3*tomcat环境
1)画出架构图;
2)把配置文件发出来 (nginx.conf和server.xml);
注:server.xml未作修改,只修改了context.xml和index.jsp
3)要求实现session共享。

2 解答:
2.1 环境准备:
主机名 IP地址 软件部署
lb03 10.0.0.15/24 172.16.1.15/24 nginx
web03 10.0.0.17/24 172.16.1.17/24 jdk-8、3个tomcat-8
cache01 10.0.0.21/24 172.16.1.21/24 memcached-1.4.15
搭建nginx+3*tomcat环境  实现session共享
2.2 需解决的问题:
问题一:
使用Nginx+Tomcat进行负载均衡时,一般使用轮询方式进行负载。但是如果使用轮询方式的话,可能会访问不同的Tomcat,此时如果不进行Session共享,则相当于是一个新的Session。就比如现有系统都是需要认证登录的系统,如果没有Session共享,则会导致用户退出登录。

问题二:
Nginx配置中可以使用ip_hash的方式简单实现session共享.但是这种方式只能将session固定到单台tomcat机器上,如果这台tomcat机器挂掉,则session信息就会丢失,不能实现session的故障转移.

2.3 拓扑图:

2.4 实现步骤:
2.4.1 web服务器部署安装JDK和Tomcat

2.4.2 编写tomcat的测试页面
① web03服务器tomcat中index.jsp
[root@web03 tomcat]# cp /application/tomcat/webapps/ROOT/index.jsp{,.bak}

[root@web03 tomcat]# cat webapps/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1>tomcat_node1 page</h1>

② web03服务器tomcat_1中index.jsp
[root@web03 tomcat]# cp /application/tomcat_1/webapps/ROOT/index.jsp{,.bak}

[root@web03 tomcat_1]# cat webapps/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1>tomcat_node2 page</h1>

③ web03服务器tomcat_2中index.jsp
[root@web03 tomcat]# cp /application/tomcat_2/webapps/ROOT/index.jsp{,.bak}

[root@web03 msm]# cat /application/tomcat_2/webapps/ROOT/index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
SessionID:<%=session.getId()%>
<br/>
SessionIP:<%=request.getServerName()%>
<br/>
<h1>tomcat_node3 page</h1>

2.4.3 编写反向代理负载均衡服务器nginx配置文件
① lb03 服务器nginx.conf
[root@lb03 ~]# cat /application/nginx/conf/nginx.conf
worker_processes 2;
error_log logs/www_error.log error;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream oldboy {
server 10.0.0.17:8080;
server 10.0.0.17:8081;
server 10.0.0.17:8082;
}
server {
listen 80;
server_name www.etiantian.org;
root html;
index index.html index.htm;
location / {
proxy_pass http://oldboy;
proxy_set_header host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}

2.4.4 将域名www.etiantian.org解析到10.0.0.15上,访问http://www.etiantian.org,发现访问请求结果会负载到10.0.0.17:8080和10.0.0.17:8081、10.0.0.17:8082的tomcat上了。(如下截图)

如上,在配置memcached-session-manager会话共享,访问http://www.etiantian.org的请求会轮询负载到web03 8080,8081,8082三个端口上,我们接着配置memcached和tomcat中的context.xml

2.4.5 一台缓存服务器安装部署Memcached
① [root@cache01 ~]# yum install memcached nc telnet -y
[root@cache01 ~]# systemctl start memcached.service
[root@cache01 ~]# systemctl enable memcached.service

2.4.6 修改memcached配置文件
① cache01 配置文件
[root@cache01 ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 172.16.1.21"

查看端口
[root@cache01 ~]# ss -lntup|grep memcache
udp UNCONN 0 0 172.16.1.21:11211 : users:(("memcached",pid=1446,fd=27))
tcp LISTEN 0 128 172.16.1.21:11211 : users:(("memcached",pid=1446,fd=26))

2.4.7 配置Tomcat,通过MSM实现共享session(一台web服务器上不同目录操作)
① 介绍MSM
MSM(memcached session manager), MSM是一款实现Tomcat会话保持的管理组件
② 将下载好的MSM的类库文件复制到tomcat的lib目录里
[root@web03 msm]# ll
total 1212
-rw-r--r-- 1 root root 53259 Aug 27 09:53 asm-5.2.jar
-rw-r--r-- 1 root root 323740 Aug 27 09:51 kryo-4.0.0.jar
-rw-r--r-- 1 root root 85217 Aug 27 09:51 kryo-serializers-0.38.jar
-rw-r--r-- 1 root root 152401 Aug 27 09:49 memcached-session-manager-1.9.7.jar
-rw-r--r-- 1 root root 10788 Aug 27 09:49 memcached-session-manager-tc8-1.9.7.jar
-rw-r--r-- 1 root root 5711 Aug 27 09:52 minlog-1.3.0.jar
-rw-r--r-- 1 root root 37160 Aug 27 09:51 msm-kryo-serializer-1.9.7.jar
-rw-r--r-- 1 root root 51287 Aug 27 09:53 objenesis-2.4.jar
-rw-r--r-- 1 root root 20883 Aug 27 09:52 reflectasm-1.11.3.jar
-rw-r--r-- 1 root root 472838 Aug 27 09:50 spymemcached-2.12.2.jar

cp msm/ /application/tomcat/lib/
④ web03的tomcat中context.xml文件追加内容
[root@web03 tools]# cat /application/tomcat/conf/context.xml
<Context>
...
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.16.1.21:11211"
lockingMode="auto"
sticky="false"
sessionBackupAsync="false"
sessionBackupTimeout= "1000"
copyCollectionsForSerialization="true"
requestUriIgnorePattern=".
.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>

⑤ web03的tomcat_1中context.xml文件追加内容
[root@web06 tools]# cat /application/tomcat_1/conf/context.xml
<Context>
...
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.16.1.21:11211"
lockingMode="auto"
sticky="false"
sessionBackupAsync="false"
sessionBackupTimeout= "1000"
copyCollectionsForSerialization="true"
requestUriIgnorePattern="..(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
⑥ web03的tomcat_2中context.xml文件追加内容
[root@web06 tools]# cat /application/tomcat_2/conf/context.xml
<Context>
...
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.16.1.21:11211"
lockingMode="auto"
sticky="false"
sessionBackupAsync="false"
sessionBackupTimeout= "1000"
copyCollectionsForSerialization="true"
requestUriIgnorePattern=".
.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>

2.4.8 MSM会话共享测试(如下截图)
访问http://blog.etiantian.org,按ctrl+F5刷新页面,发现session信息会变,但是sessionid不会改变!说明session实现了共享!

2.4.9 如下是本地浏览器Cookies的信息(截图)

转载于:https://blog.51cto.com/816885/2355019

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值