我们的目标是所有服务器上都要保持用户的Session,那么将每个应用服务器中的Session信息复制到其它服务器节点上是不是就可以呢?

这就是Session的第二中处理办法:会话复制

192.168.94.11(nginx)

192.168.94.22(tomcat1)

192.168.94.33(tomcat2)

关闭SElinux和防火墙

# 每台服务器都一样
[root@nginx ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
:: localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.94.66 nginx
192.168.94.22 tomcat1
192.168.94.33 tomcat2
[root@nginx ~]# scp /etc/hosts 192.168.94.22:/etc/hosts
The authenticity of host '192.168.94.22 (192.168.94.22)' can't be established.
ECDSA key fingerprint is SHA256:LztMUHktwCLql3Iw5/phDFbJoKLLO/BBNUVNV7DcAcU.
ECDSA key fingerprint is MD5:f7:4e:9a:f2::bc:c5::d2:a9::b0:bf:4b:bb:7c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.94.22' (ECDSA) to the list of known hosts.
root@192.168.94.22's password:
hosts % .3KB/s :
[root@nginx ~]# scp /etc/hosts 192.168.94.33:/etc/hosts
The authenticity of host '192.168.94.33 (192.168.94.33)' can't be established.
ECDSA key fingerprint is SHA256:LztMUHktwCLql3Iw5/phDFbJoKLLO/BBNUVNV7DcAcU.
ECDSA key fingerprint is MD5:f7:4e:9a:f2::bc:c5::d2:a9::b0:bf:4b:bb:7c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.94.33' (ECDSA) to the list of known hosts.
root@192.168.94.33's password:
hosts % .0KB/s :

安装nginx

[root@nginx ~]# wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.14.0-1.el7_4.ngx.x86_64.rpm
[root@nginx ~]# yum -y install pcre-devel zlib-devel openssl-devel
[root@nginx ~]# rpm -i nginx-1.14.-.el7_4.ngx.x86_64.rpm
[root@nginx ~]# vim /etc/nginx/nginx.conf # 修改配置文件 添加以下内容 upstream tomcat {
server 192.168.94.22:;
server 192.168.94.33:; } server {
listen ;
server_name 192.168.94.11:;
location / {
proxy_pass http://tomcat;
proxy_set_header X-Real-IP $remote_addr; }

CentOS 7 配置Tomcat  有Tomcat的安装方法

配置tomcat

修改tomcat配置文件

[root@tomcat1 ~]# cp /usr/local/tomcat/conf/server.xml{,.bak}
[root@tomcat1 ~]# vim /usr/local/tomcat/conf/server.xml
将<Engine name="Catalina" defaultHost="localhost">修改为
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> #tomcat2的配置修改成 jvmRoute="tomcat2"
将<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>的注释去掉
[root@tomcat1 ~]# vim /usr/local/tomcat/webapps/ROOT/WEB-INF/web.xml
在</web-app>的上面添加<distributable/>

编写测试页面

[root@tomcat1 ~]# vim /usr/local/tomcat/webapps/ROOT/s.jsp
Session ID:<%= session.getId() %><BR> # 显示session ID
SessionPort:<%= request.getServerPort() %>   # 显示端口
<% out.println("This tomcat server 192.168.94.22");%>    # IP自己修改 [root@tomcat2 ~]# vim /usr/local/tomcat/webapps/ROOT/s.jsp
Session ID:<%= session.getId() %><BR>
SessionPort:<%= request.getServerPort() %>
<% out.println("This tomcat server 192.168.94.33");%>
[root@nginx ~]# systemctl start nginx

[root@tomcat1 ~]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk10
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started. [root@tomcat2 ~]# /usr/local/tomcat/bin/startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk10
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

测试

浏览器访问测试 http://192.168.94.22:8080/s.jsp 刷新后 session ID 未发生变化 

浏览器访问测试 http://192.168.94.33:8080/s.jsp 刷新后 session ID 未发生变化 

浏览器访问测试 http://192.168.94.66/s.jsp 刷新后 session ID 未发生变化  但两个tomcat在轮询

 

会话复制在Tomcat上得到了支持,它是基于IP组播(multicast)来完成Session的复制,Tomcat的会话复制分为两种:

全局会话复制:利用Delta Manager复制会话中的变更信息到集群中的所有其他节点

非全局复制:使用Backup Manager进行复制,它会把Session复制给一个指定的备份节点

会话复制不适合大的集群 , 不推荐生产使用 , 否则会导致 Session 复制时性能代价过高

CentOS 7 nginx+tomcat9 session处理方案之session复制的更多相关文章

  1. CentOS 7 nginx+tomcat9 session处理方案之session保持

    Session保持(会话保持)是我们见到最多的名词之一,通过会话保持,负载均衡进行请求分发的时候保证每个客户端固定的访问到后端的同一台应用服务器.会话保持方案在所有的负载均衡都有对应的实现.而且这是在 ...

  2. nginx+php负载均衡集群环境中的session共享方案梳理

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  3. Nginx+PHP负载均衡集群环境中Session共享方案 - 运维笔记

    在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...

  4. Tomcat集群环境下session共享方案 通过memcached 方法实现

    对于web应用集群的技术实现而言,最大的难点就是:如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块.要实现这一点, 大体上有两种方式:一种是把所有Ses ...

  5. linux+nginx+tomcat负载均衡,实现session同步

    linux+nginx+tomcat负载均衡,实现session同步 花了一个上午的时间研究nginx+tomcat的负载均衡测试,集群环境搭建比较顺利,但是session同步的问题折腾了几个小时才搞 ...

  6. Nginx+Tomcat+memcached负载均衡实现session共享

    http://blog.csdn.net/love_ubuntu/article/details/8464983 1.  安装各个软件不用说了. 2.  到tomcat的安装目录lib中,加入: me ...

  7. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 ============================= 蕃薯耀 2017年11月27日 http: ...

  8. 细说tomcat之集群session共享方案

    1. Tomcat Cluster官网:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.htmlTomcat原生支持的集群方案,通过组播消息 ...

  9. Tomcat利用MSM实现Session共享方案解说

    Session共享有多种解决方法,常用的有四种:1)客户端Cookie保存2)服务器间Session同步3)使用集群管理Session(如MSM) 4)把Session持久化到数据库 针对上面Sess ...

随机推荐

  1. oracle查看某表字段类型

    来源:https://www.cnblogs.com/ufindme/p/5033843.html 今天遇到一个问题:要求在可重复执行的SQL脚本添加一段SQL代码:修改当前的数据类型.因为SQL代码 ...

  2. 使用cnpm 安装vue.js

    前提已经安装了node.js 一.临时使用 1.npm install -g cnpm --registry=https://registry.npm.taobao.org 2.cnpm instal ...

  3. PXE(preboot execution environment):【网络】预启动执行环节:安装 debian 9系列:成功

    PXE 安装的必要点和之前一样. 这里只着重说一下debian系列 特殊的地方: 第一:Release.gpg问题 该问题解决方式一:要求官方的dvd.cd中提供,貌似不太可能实现...... 该问题 ...

  4. Cesium打包命令

    package.json中 (1) npm run build Source/Cesium.js 仅是把Cesium源码中一千两百多个js文件做了一下引用,并不会进行打包 所以这个Cesium.js也 ...

  5. <数字签名是什么>笔记

    此篇是看   数字签名是什么?    的理解与笔记 1. 使用非对称密钥发送数据到服务器. 发送方(C端)使用公钥对自己的数据进行加密,接收方(S端)使用私钥解密,即使发送出去的数据被拦截到,也不知道 ...

  6. error: cannot lock ref 'refs/remotes/origin/master': unable to resolve reference 'refs/remotes/origin/master': reference broken...

    之前在自己的项目中添加了一个分支,然后做了一些操作,比如同步本地的分支情况到远程仓库中,然后在远程仓库中完成分支合并,以及 Pull request 等等操作,后来,在本地仓库中进行 git fetc ...

  7. ux.form.field.GridDate 支持快速选择日期的日期控件

    效果如图,亲测6.2.1版本可用 /** *支持快速选择日期的日期控件 */ Ext.define('ux.form.field.GridDate', { extend: 'Ext.form.fiel ...

  8. js中 函数参数的 传值/传引用 问题

    如果  传入function的参数是  (数值.字符串.布尔值) 此时是以 传值 的方式 进行. 如果  传入function的参数是  (数组.对象.其他函数) 此时是以 传引用 的方式 进行. 1

  9. Ubuntu 离线安装Mysql

    一.安装包 先从网络上,下载Mysql安装包,复制到U盘 下载地址:https://dev.mysql.com/downloads/mysql/ 二.挂载U盘 2.1查看分区 先输入命令  cat   ...

  10. 【node】node连接mongodb操作数据库

    1.下载第三方模块mongodb cnpm install mongodb --save 2.检测是否连接成功 1.引入第三方模块mongodb并创建一个客户端 const MongoClient = ...