tomcat做为轻量级的java应用服务器,对静态页面和大并发的处理并不是很好。所以现在流行的做法是使用nginx+tomcat来实现动静分离与负载均衡, 做负载均衡集群就要考虑会话保持。

一、Session概述

1、什么是会话(session)?

答: Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制。

http协议是无状态的,无状态就表明每一次客户端的访问请求是无关联的。比如张三在一个网站上有多次访问请求,李四也在这个网站上有多次访问请求,他们的请求顺序与时间是无规则的。那么网站服务器是不知道到底哪些是张三的请求,哪些是李四的请求。如果在他们请求时服务器都有一个固定的标签跟踪,就能分辨了。这个标签就可以看做是session.

2、为什么要会话保持?

答: 因为负载均衡集群会将同一个用户的请求通过算法调度给多台服务器,变成了一对多的局面。就好像我要给父母打电话,父母原来使用同一个电话变成了父母各使用一个电话,我说的话,被一半一半的调度给父母各自持有的电话上。那么最终的结果就是父母各听了一半,根本不知道我要说什么。

所以负载均衡和会话保持是矛盾的,但又必须得共存。

二、会话保持的几个方案:

1、nginx的ip_hash算法

实现原理就是同一个客户端的所有请求只调度给同一个后台tomcat,这样会话就能保持在同一台服务器上。

注:其它的负载均衡软件也有类似算法:如LVS的sh算法,haproxy的source算法等。

优点:配置最简单,在nginx的upstream调度里加一句ip_hash即可

缺点:后端tomcat宕机,用户session会丢失

2、tomcat的session复制集群

多台tomcat通过组播互相沟通会话信息,以保持不同tomcat之间的会话一致性。

优点:后端tomcat宕机,用户session不丢失

缺点:使用组播将信息复制到多个tomcat节点,网络开销大

3、缓存集中式管理session

session可以保存在文件,数据库和内存中,利用memcached或redis将session信息缓存,以达到会话信息不丢失,也不影响负载均衡的目的。

优点:只要缓存服务器没问题,用户session不会丢.也没有额外的网络开销

缺点:太依赖缓存服务器;需要额外的缓存服务器,成本也高;当然要求维护人员技术水平也较高,适合于性能要求高的大型环境。

三、使用MSM实现nginx+tomcat集群的会话保持

1、MSM是什么?

MSM(memcached-session-manager)就是缓存集中式管理session的一种方案 ,它可以把tomcat的会话信息保存在缓存服务器memcached中,实现在负载均衡调度时还能保持会话一致。

2、实验准备:

① 静态ip

10.1.1.11 http://nginx.cluster.com

10.1.1.12 http://tomcat1.cluster.com

10.1.1.13 http://tomcat2.cluster.com

10.1.1.14 http://memcached.cluster.com

② 主机名绑定

③ 关闭防火墙和Selinux

④ 时间同步

⑤ yum源(centos7安装完系统后的默认yum源就OK)

3、实验过程

第1步: 在所有tomcat节点上安装

首先在官网下载二进制版tomcat

下载地址: https://tomcat.apache.org/download-90.cgi

在centos7上确认openjdk已经安装

# java -version

openjdk version "1.8.0_161"

OpenJDK Runtime Environment (build 1.8.0_161-b14)

OpenJDK 64-Bit Server VM (build 25.161-b14, mixed mode)

直接解压下载好的二进制版tomcat安装并启动

# tar xf /root/Desktop/apache-tomcat-9.0.14.tar.gz -C /usr/local/

# mv /usr/local/apache-tomcat-9.0.14/ /usr/local/tomcat

# /usr/local/tomcat/bin/startup.sh

第2步:在所有tomcat节点(tomcat1和tomcat2)的家目录里创建一个显示session信息的代码文件

注:文件内容是一模一样的

[root@tomcat1 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp

SessionID:

SessionIP:

SessionPort:

[root@tomcat2 ~]# vim /usr/local/tomcat/webapps/ROOT/session.jsp

SessionID:

SessionIP:

SessionPort:

第3步: 安装并配置nginx配置文件,实现nginx+tomcat的动静分离与负载均衡。

[root@nginx ~]# yum install epel-release -y

[root@nginx ~]# yum install nginx -y

[root@nginx ~]# vim /etc/nginx/nginx.conf

将下面一段加到http {}配置段里但是不要在server {}配置段里

upstream tomcat {

server 10.1.1.12:8080 weight=1;

server 10.1.1.13:8080 weight=1;

}

把server {}配置段里下面一段修改

location / {

}

修改成

location ~ .*.jsp$ {

proxy_pass http://tomcat;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $remote_addr;

}

最终结果如下图所示:

第4步:启动nginx服务

[root@vm1 ~]# systemctl restart nginx

[root@vm1 ~]# systemctl enable nginx

第5步: 下载MSM相关的jar包,并拷贝到所有tomcat节点的/usr/local/tomcat/lib/目录下

第6步: 确认jar包都拷贝完成后,配置所有tomcat节点(tomcat1和tomcat2都一样配置)

把下面一段加到context.xml配置文件最后一行前面; 也就是标签中间;10.1.1.14为memcached服务器IP

# vim /usr/local/tomcat/conf/context.xml

memcachedNodes="n1:10.1.1.14:11211"

lockingMode="auto"

sticky="false"

requestUriIgnorePattern= ".*.(png|gif|jpg|css|js)$"

sessionBackupAsync= "false"

sessionBackupTimeout= "100"

copyCollectionsForSerialization="true"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />

第7步: 所有tomcat节点重启tomcat服务

# /usr/local/tomcat/bin/shutdown.sh

# /usr/local/tomcat/bin/startup.sh

第8步: 在memcached服务器上安装,并启动服务

[root@vm4 ~]# yum install memcached -y

[root@vm4 ~]# systemctl restart memcached

[root@vm4 ~]# systemctl enable memcached

[root@vm4 ~]# lsof -i:11211

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

memcached 4224 memcached 26u IPv4 44869 0t0 TCP *:memcache (LISTEN)

memcached 4224 memcached 27u IPv6 44870 0t0 TCP *:memcache (LISTEN)

memcached 4224 memcached 28u IPv4 44873 0t0 UDP *:memcache

memcached 4224 memcached 29u IPv6 44874 0t0 UDP *:memcache

第9步: 使用浏览器访问测试

至此,会话保持就成功了。

cent 8.0 安装tomcat 9.0_nginx+tomcat会话保持方案探讨相关推荐

  1. cent 8.0 安装tomcat 9.0_Linux服务器:安装tomcat并部署war应用

    1 前言 现在一般情况下,很少需要单独部署``tomcat,毕竟Spring boot打的jar包,可以用自带的内置tomcat`,用这个不香吗? 不过有些项目还是使用Spring MVC的,所以还是 ...

  2. cent 8.0 安装tomcat 9.0_Tomcat部署及优化

    原文章地址:https://www.cnblogs.com/happy-king/p/9193257.html 一.Tomcat安装部署 一.安装jdk和Tomcat 1.上传jdk和Tomcat m ...

  3. cent 8.0 安装tomcat 9.0_JDK-TOMCAT-MYSQL安装

    JDK系统环境变量: 1.新建JAVA_HOME变量:指向JDK安装路径D:jdk1.8.0_201 2.编辑Path变量:添加%JAVA_HOME%bin; 3.验证JAVA是否安装成功,运行jav ...

  4. centos7.0 安装java1.8,tomcat

    2019独角兽企业重金招聘Python工程师标准>>> 1.查看是否已安装java java -version 2.查看 yum库中java的版本 yum search java | ...

  5. sourceinsight4.0安装破解( 内含sublime text配色方案)

    安装包及主题下载链接:https://pan.baidu.com/s/1WrlPSQ-XGzu55aZKFL-slw 密码:22hq 下载目录文件如图 1)运行sourceinsight4088-se ...

  6. Linux Tomcat 6.0安装配置实践总结

    系统环境: Red Hat Enterprise Linux Server release 5.7 (Tikanga)  64位 Tomcat下载 从官方网站 http://tomcat.apache ...

  7. [转载]Tomcat 6.0 安装配置

    [转自:http://blog.pfan.cn/suneveryday/34162.html] 第一步:下载j2sdk和tomcat:到sun官方站点     最新的jdk为1.6.04,tomcat ...

  8. tomcat之 JDK8.0安装、tomcat-8.5.15安装

    前言: JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品.自从Java推出以来,JDK已经成为使用最广泛的Java SDK. JDK是整个J ...

  9. tomcat 9.0安装教程以及在安装过程中可能出现问题的解决方法

    今天跟着教程安装tomcat 9.0 结果发现安装之后有一堆的错误,百度了一堆的解决方案,这里做一个小结.总的内容包括 1. tomcat 9.0的安装过程 2. 对于卸载 tomcate 9.0时, ...

最新文章

  1. 声音匹配_如何调节人声音色方法如下
  2. 2015 百度之星 1004 KPI STL的妙用
  3. 简介QTP中的Active Screen
  4. linux如何把postgresql添加到环境变量_如何搞清楚PostgreSQL的环境变量 ?
  5. iOS开发 之 可穿戴设备 蓝牙4.0 BLE 开发
  6. nginx fastcgi python_webpy + nginx + fastcgi 构建python应用
  7. 拍人像的时候你喜欢哪种模特?
  8. 翻译记忆软件-塔多思TRADO经典教程_4
  9. VSCode配置git图文
  10. 如何提高SQL语句的能力?
  11. C语言fseek、ftell和rewind函数详解
  12. 代码:吃货联盟订餐系统
  13. dp专题-cf 711c
  14. [P14-v19]自己做一台 Hifi 耳放,全分立的!
  15. 物联网查流量_物联网流量管理平台
  16. 查询python答案的app_智慧职教APPPython程序设计期末考试查题公众号答案
  17. 便宜投影仪值得推荐吗,当贝X3高亮投影仪更值得看
  18. java判定输入是否为英文_java中如何判断输入的是英文还是中文
  19. CVE-2019-0948:Microsoft Management Console (MMC)漏洞
  20. U2-net网络详解

热门文章

  1. Asp.net常用技巧
  2. C++的强制类型转换
  3. PowerDesigner设计数据库
  4. VMware网络设置详解 打造超级虚拟网络 (说的最为复杂和全面的)
  5. Java8新特性 Optional类
  6. Yolo-将coco数据集中的json文件转为txt且解决类别不连续问题
  7. windows下部署oracle11,windows下配置oracle11g的dataguard
  8. 深入理解 Java 锁与线程阻塞
  9. PyTorch实战GANs
  10. [Android]你不知道的Android进程化--进程信息