Cluster and session

session consistency

  1. (1) session sticky
  2. source_ip
  3. nginx: ip_hash
  4. haproxy: source
  5. lvs: sh
  6. cookie
  7. nginxhash
  8. haproxy: cookie
  9. (2) session cluster
  10. delta(增量)session manager
  11. tomcat delta manager
  12. (3) session server
  13. redis(store)
  14. memcached(cache)

Tomcat Cluster

  1. (1) httpd + tomcat cluster
  2. httpd: mod_proxy, mod_proxy_http, mod_proxy_balancer
  3. tomcat clusterhttp connector
  4. (2) httpd + tomcat cluster
  5. httpd: mod_proxy, mod_proxy_ajp, mod_proxy_balancer
  6. tomcat clusterajp connector
  7. (3) nginx + tomcat cluster
  8. 保持会话的方式参考第一种方式。
  9. Tomcat Cluster的第一种方法实现
  10. <proxy balancer://tcsrvs>
  11. BalancerMember http://172.:8080
  12. BalancerMember http://172.:8080
  13. ProxySet lbmethod=byrequests
  14. </Proxy>
  15. <VirtualHost *:80>
  16. ServerName lb.magedu.com
  17. ProxyVia On
  18. ProxyRequests Off
  19. ProxyPreserveHost On
  20. <Proxy *>
  21. Require all granted
  22. </Proxy>
  23. ProxyPass / balancer://tcsrvs/
  24. ProxyPassReverse / balancer://tcsrvs/
  25. <Location />
  26. Require all granted
  27. </Location>
  28. </VirtualHost>
  29. Tomact Cluster的第二种实现方法
  30. <proxy balancer://tcsrvs>
  31. BalancerMember ajp://172.:8009
  32. BalancerMember ajp://172.18.:8009
  33. ProxySet lbmethod=byrequests
  34. </Proxy>
  35. <VirtualHost *:80>
  36. ServerName lb.magedu.com
  37. ProxyVia On
  38. ProxyRequests Off
  39. ProxyPreserveHost On
  40. <Proxy *>
  41. Require all granted
  42. </Proxy>
  43. ProxyPass / balancer://tcsrvs/
  44. ProxyPassReverse / balancer://tcsrvs/
  45. <Location />
  46. Require all granted
  47. </Location>
  48. <Location /balancer-manager>
  49. SetHandler balancer-manager
  50. ProxyPass !
  51. Require all granted
  52. </Location>
  53. </VirtualHost>

BalancerMember

  1. BalancerMember [balancerurl] url [key=value [key=value ...]]
  2. status
  3. D: Worker已停且不接受任何请求。
  4. S: Worker已经有管理地停止。
  5. I: Worker采用忽略错误的模式,并被认为总是可用。
  6. H: Worker 采用双机热备模式并讲仅在没有其他可用worker时使用。
  7. E: Worker 处于错误状态.
  8. N: Worker 采用drain mode 并仅接收到达自身的粘性会话, 以及忽略其他所有清空。
  9. loadfactor
  10. 负载因子,即权重;
  11. perform pending request balancing.lbmethodBalancer load-balance method
  12. 选择负载平衡的调度算法。
  13. byrequests
  14. 进行权重请求的计算
  15. bytraffic
  16. 进行加权流量字节数平衡
  17. bybuyness
  18. 进行挂起的请求平衡
  19. 默认是byrequests
  20. stickysessionBalancer sticky session name.
  21. 这个值常被设置为JSESSIONID 或者 PHPSESSIONID之类的值,且它依赖于后端应用服务支持的会话。
  22. 如果后端应用服务为cookies使用不同的名,以及url 编码id(如小程序容器)使用“|”来区分它们。
  23. 第一部分用于cookie,第二部分用于路径,可用在iApache HTTP Server 2.4.4 和最新版本。
  24. 会话粘性的实现方法:
  25. Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
  26. <proxy balancer://tcsrvs>
  27. BalancerMember http://172.:8080 route=TomcatA loadfactor=1
  28. BalancerMember http://172.:8080 route=TomcatB loadfactor=2
  29. ProxySet lbmethod=byrequests
  30. ProxySet stickysession=ROUTEID
  31. </Proxy>
  32. <VirtualHost *:80>
  33. ServerName lb.magedu.com
  34. ProxyVia On
  35. ProxyRequests Off
  36. ProxyPreserveHost On
  37. <Proxy *>
  38. Require all granted
  39. </Proxy>
  40. ProxyPass / balancer://tcsrvs/
  41. ProxyPassReverse / balancer://tcsrvs/
  42. <Location />
  43. Require all granted
  44. </Location>
  45. </VirtualHost>
  46. 启用管理接口:
  47. <Location /balancer-manager>
  48. SetHandler balancer-manager
  49. ProxyPass !
  50. Require all granted
  51. </Location>
  52. 示例程序:
  53. 演示效果,在TomcatA上某context中(如/test),提供如下页面
  54. <%@ page language="java" %>
  55. <html>
  56. <head><title>TomcatA</title></head>
  57. <body>
  58. <h1><font color="red">TomcatA.magedu.com</font></h1>
  59. <table align="centre" border="1">
  60. <tr>
  61. <td>Session ID</td>
  62. <% session.setAttribute("magedu.com","magedu.com"); %>
  63. <td><%= session.getId() %></td>
  64. </tr>
  65. <tr>
  66. <td>Created on</td>
  67. <td><%= session.getCreationTime() %></td>
  68. </tr>
  69. </table>
  70. </body>
  71. </html>
  72. 演示效果,在TomcatB上某context中(如/test),提供如下页面
  73. <%@ page language="java" %>
  74. <html>
  75. <head><title>TomcatB</title></head>
  76. <body>
  77. <h1><font color="blue">TomcatB.magedu.com</font></h1>
  78. <table align="centre" border="1">
  79. <tr>
  80. <td>Session ID</td>
  81. <% session.setAttribute("magedu.com","magedu.com"); %>
  82. <td><%= session.getId() %></td>
  83. </tr>
  84. <tr>
  85. <td>Created on</td>
  86. <td><%= session.getCreationTime() %></td>
  87. </tr>
  88. </table>
  89. </body>
  90. </html>

Tomcat Session Replication Cluster

  1. (1) 配置启用集群,将下列配置放置于<engine>或<host>中;
  2. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
  3. channelSendOptions="8">
  4. <Manager className="org.apache.catalina.ha.session.DeltaManager"
  5. expireSessionsOnShutdown="false"
  6. notifyListenersOnReplication="true"/>
  7. <Channel className="org.apache.catalina.tribes.group.GroupChannel">
  8. <Membership className="org.apache.catalina.tribes.membership.McastService"
  9. address="228.0.0.4"
  10. port="45564"
  11. frequency="500"
  12. dropTime="3000"/>
  13. <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
  14. address="auto"
  15. port="4000"
  16. autoBind="100"
  17. selectorTimeout="5000"
  18. maxThreads="6"/>
  19. <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
  20. <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
  21. </Sender>
  22. <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
  23. <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
  24. </Channel>
  25. <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
  26. filter=""/>
  27. <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
  28. <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
  29. tempDir="/tmp/war-temp/"
  30. deployDir="/tmp/war-deploy/"
  31. watchDir="/tmp/war-listen/"
  32. watchEnabled="false"/>
  33. <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
  34. <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
  35. </Cluster>
  36. 确保EnginejvmRoute属性配置正确。
  37. (2) 配置webapps
  38. 编辑WEB-INF/web.xml,添加<distributable/>元素;
  39. 注意:CentOS 7上的tomcat自带的文档中的配置示例有语法错误;
  40. <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
  41. <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
  42. 绑定的地址为auto时,会自动解析本地主机名,并解析得出的IP地址作为使用的地址。

Tomcat Session Server (memcached)

  1. https://github.com/magro/memcached-session-manager
  2. 支持的session server类型:
  3. memcached
  4. couchbase
  5. redis
  6. 示例方案:
  7. Tomcat7
  8. memcached
  9. javolution

Tomcat cluster and session的更多相关文章

  1. tomcat cluster session同步时保存map数据遇到的问题

    Tomcat Cluster官网:https://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html(tomcat7.0) 场景: tomcat1 ...

  2. [Failed]Tomcat cluster方案共享session配置出错,sigh....

    后继发展:https://www.cnblogs.com/xiandedanteng/p/12134300.html 参考网文一:多个Tomcat之间实现Session共享 参考网文二:Tomcat官 ...

  3. Tomcat Cluster负载均衡

    author:JevonWei 版权声明:原创作品 Tomcat Cluster负载均衡 环境 tomcatA 172.16.253.108 tomcatB 172.16.253.105 代理服务器 ...

  4. tomcat cluster配置实战注意事项

    关于tomcat cluster的实现原理,详见:https://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html#How_it_Works. 在 ...

  5. NGINX如何反向代理Tomcat并且实现Session保持

    简介 LNMT=Linux+Nginx+MySQL+Tomcat: Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器: 在中小型系统和并发访问用户不是很多的场合下被 ...

  6. Nginx+Tomcat集群+session共享

    Nginx+Tomcat集群+session共享 1)安装Nginx 2)配置多个Tomcat,在server.xml中修改端口(端口不出现冲突即可) 3)在nginx.conf文件中配置负载均衡池, ...

  7. 在Nginx里指定ip_hash的方式解决Tomcat集群session的问题

    据称,Tomcat集群session同步方案有以下几种方式: 1)使用tomcat自带的cluster方式,多个tomcat间自动实时复制session信息,配置起来很简单.但这个方案的效率比较低,在 ...

  8. Tomcat中的Session小结

    什么是Session 对Tomcat而言,Session是一块在服务器开辟的内存空间,其存储结构为ConcurrentHashMap: Session的目的 Http协议是一种无状态协议,即每次服务端 ...

  9. How Tomcat works — 八、tomcat中的session管理

    在使用shiro的session的时候感觉对于tomcat中session的管理还不是特别清楚,而且session管理作为tomcat中比较重要的一部分还是很有必要学习的. 目录 概述 session ...

随机推荐

  1. SkyWalking 分布式追踪系统

    随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个 ...

  2. NOI导刊2010提高(06) 黑匣子

    题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...

  3. mybatisplus代码生成器

    一.随便建一个springboot工程,在pom文件中导入依赖 <!-- 模板引擎 --> <dependency> <groupId>org.apache.vel ...

  4. LinkedList总结

    1,LinkedList也是继承了List的接口 所以在LinkedList中存储的也是有序的,不唯一的数据 它采用的是链表式储存,所以比较适合用来执行插入,删除等功能 2,LinkedList特有的 ...

  5. Visual studio 2017 中的Javascript智能提示与调试

    1.智能提示 对于JS文件中的API,你若需要让那个JS文件中的方法能够在你写的那个JS文件中能够智能显示的话,直接把它拉进你的JS文件中就好了. 举个例子:你想 在你正在写的a.js文件中引用b.j ...

  6. Linux信号通讯编程

    信号通讯流程为: ①进程A/内核选择信号 ②发送信号 ③进程B接收信号并处理 Linux系统支持的全部信号均定义在/usr/include/asm/signal.h.当中常见的信号有: ①SIGKIL ...

  7. 有多个git项目要用多个秘钥

    在~/.ssh文件夹下新建文件config,格式例如以下 Host "authmanage" HostName "code.csdn.net" User &qu ...

  8. C++开发人脸性别识别教程(8)——搭建MFC框架之读取目录信息

    在上一篇博客中我们已经绘制了MFC界面,在这篇博客中我们将加入响应代码,为MFC框架加入一个最主要的功能:打开一个目录. 一.加入相关头文件 这里头文件主要包括三类:opencv头文件.批量读取文件相 ...

  9. 再谈用java实现Smtp发送邮件之Socket编程

    很多其它内容欢迎訪问个人站点   http://icodeyou.com 前几天利用Socket实现了用java语言搭建webserver,全程下来应该会对Socket这个东西已经使用的很熟悉了.尽管 ...

  10. Office EXCEL 如何为宏命令指定快捷键或者重新设置快捷键

    1 工具-宏-宏,打开宏窗口   2 鼠标单击任意宏将其选中,点击宏选项,即可修改或为他增加快捷键.   3 注意,你直接在Visual Basci编辑器里面改是不行的,因为加了'的只是注释而已