zoukankan      html  css  js  c++  java
  • nginx tomcat cluster session 同步

    前言

    公司系统要做高可用,则需要用多台服务器做成主从或主备集群,这样当一台服务器宕机后,集群还能对外提供服务。 我们拟使用2台服务器做成主从集群,那就必须解决2台服务器中tomcat session同步问题。

    tomcat cluster

    首先采用的同步方案是tomcat自带的解决方案,即便此方案有一定的缺点,由于我们仅作2台服务器的集群,且 此方案对代码无侵入,不需要修改程序代码,所以是我们的首选解决方案。

    对于集群的配置方式详见tomcat 的文档,文档中对session 复制的缺陷、集群配置的方式说的很明了了。 但其中有2个坑,导致我觉得写这篇博人,以免重复踩坑。

    https://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html

    1. 组播地址

    组播地址文档中要求配置成228.0.0.4 , 这个地址是保留地址,用户无需修改为自己服务器的ip地址。

    2. 单机可以实现session复制,多台服务器时无法实现session复制 的问题

    问题描述:在单机上部署2个tomcat, 并配置好session复制。 通过ip1:port1   ip1:port2 查看到的session id 是一致的(如何查看session id请自行google )。 但将此方式部署在2台服务器上时,  通过ip1:port  ip2:port 查看到的session id 是不一致的。

    针对此问题,有些博文还指出 tomcat cluster 不支持多机。 当然 tomcat 不可能这么弱鸡了,这是不可能的。

    问题原因: tomcat session 实现原理是依据cookie, 通过浏览器访问ip1:port  ip2:port,浏览器2个窗口用的是不同的cookie, 从而导致看到的session id不一致。

    解决方案:相信各位朋友看到问题原因,就知道解决方案了, 其实 再加一层nginx 做负载均衡,只有一个浏览器窗口,则保证了cookie一致, cookie 一致则session id 一致。 

  • 相关阅读:
    铁乐学Python_Day35_Socket模块3和hmac模块
    铁乐学Python_Day34_Socket模块2和黏包现象
    铁乐学Python_Day33_网络编程Socket模块1
    铁乐学python_day29_模块与包学习4
    铁乐学python_day28_模块学习3
    铁乐学python27_模块学习2
    铁乐学python_md5校验两个文件的一致性
    铁乐学python26_hashlib+configparser+logging模块
    Flask与Ajax
    Javascript与Ajax
  • 原文地址:https://www.cnblogs.com/hzm112567/p/13396761.html
Copyright © 2011-2022 走看看