Tomcat的三种会话保持
2017-11-26 19:25
260 查看
Tomcat是基于java代码实现的web网站,功能十分强大,但是往往功能越强大的配置就越麻烦。那么今天我们针对Tomcat里面的会话保持给大家详细做介绍。
会话保持是什么呢?
它是基于客户端来说,当客户端访问web网站时候输入的一些账号密码,能够在短时间内登录不用再次输入密码,提高用户的体验。
(1)session sticky
相当于把用户固定在某台服务器上
基于source_ip: nginx: ip_hash haproxy: source lvs: sh
基于cookie: nginx:sticky haproxy: cookie
(2)session cluster(会话集群,小规模环境可以)
相当于每个服务器都复制一份session
delta session manager
(3)session server(适合大规模环境)
相当于把session指向后端的memcached中
redis(store) 支持持久存储
memcached(cache)非关系型数据库,基于内存实现
第一种session sticky很好实现,它可以基于ip_hash实现
在Nginx中配置:
第二种session cluster配置,它相对于第一种配置好点,因为第二种前段还能够利用负载均衡算法去调度。它的弊端是仅仅适合小集群,大集群下太消耗资源,不利于每个服务器都去复制一份session。
实现机制是:当一个用户访问请求过来时,会创建一个session,tomcat有session管理机制,会通过广播发送给每个服务器,所有节点同步之后再返回给客户端。
1、在nginx中配置如下:
2、在tomcat的server.xml中Engine段中配置如下:
3、然后在webapps下创建一个test目录。里面创建index.jsp测试页面
4、test下创建一个WEB-INF目录,把conf下的web.xml复制到WEB-INF目录里面并添加一个参数
<distributable/> 告知我用的是分布式方式
此时tomcat已经配置好了,启动tomcat:catalina.sh start
5、另一台不需要配置nginx,但是别的配置都一样,只需要把测试页面A换成B就行。
6、接下来就去打开一个浏览器去测试就行了。
第三种session server配置,相对于第二种来说,它是基于缓存实现的,把tomcat服务器收到的session都放在后端的memcached中,这样针对第二种情况来说就能实现大集群环境。
实现环境至少需要4台服务器:
一个负载均衡器:172.17.144.144
两个tomcat服务器:172.17.177.177 172.17.166.166
一个memcached服务器:172.17.155.155
1、配置负载均衡器nginx
在webapps/test下创建index.jsp
vim index.jsp 检测页面
启动memcached:systemctl start memcached
这样就能够实现基于tomcat的会话保持了。
会话保持是什么呢?
它是基于客户端来说,当客户端访问web网站时候输入的一些账号密码,能够在短时间内登录不用再次输入密码,提高用户的体验。
(1)session sticky
相当于把用户固定在某台服务器上
基于source_ip: nginx: ip_hash haproxy: source lvs: sh
基于cookie: nginx:sticky haproxy: cookie
(2)session cluster(会话集群,小规模环境可以)
相当于每个服务器都复制一份session
delta session manager
(3)session server(适合大规模环境)
相当于把session指向后端的memcached中
redis(store) 支持持久存储
memcached(cache)非关系型数据库,基于内存实现
第一种session sticky很好实现,它可以基于ip_hash实现
在Nginx中配置:
vim /etc/nginx/nginx.conf upstream tomcat_cluster { ip_hash; server 172.17.177.177:8080 weight=1; server 172.17.166.166:8080 weight=2; } location ~* \.(jsp|do)$ { proxy_pass http://tomcat_cluster; }
第二种session cluster配置,它相对于第一种配置好点,因为第二种前段还能够利用负载均衡算法去调度。它的弊端是仅仅适合小集群,大集群下太消耗资源,不利于每个服务器都去复制一份session。
实现机制是:当一个用户访问请求过来时,会创建一个session,tomcat有session管理机制,会通过广播发送给每个服务器,所有节点同步之后再返回给客户端。
1、在nginx中配置如下:
vim /etc/nginx/nginx.conf upstream tomcat_cluster { server 172.17.177.177:8080 weight=1; server 172.17.166.166:8080 weight=2; } location ~* \.(jsp|do)$ { proxy_pass http://tomcat_cluster; } 启动nginx:systemctl start nginx
2、在tomcat的server.xml中Engine段中配置如下:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> </Channel> <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="/"/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> </Cluster></Cluster>
3、然后在webapps下创建一个test目录。里面创建index.jsp测试页面
<%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><font color="blue">TomcatA </h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("abc","abc"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html></html>
4、test下创建一个WEB-INF目录,把conf下的web.xml复制到WEB-INF目录里面并添加一个参数
<distributable/> 告知我用的是分布式方式
此时tomcat已经配置好了,启动tomcat:catalina.sh start
5、另一台不需要配置nginx,但是别的配置都一样,只需要把测试页面A换成B就行。
6、接下来就去打开一个浏览器去测试就行了。
第三种session server配置,相对于第二种来说,它是基于缓存实现的,把tomcat服务器收到的session都放在后端的memcached中,这样针对第二种情况来说就能实现大集群环境。
实现环境至少需要4台服务器:
一个负载均衡器:172.17.144.144
两个tomcat服务器:172.17.177.177 172.17.166.166
一个memcached服务器:172.17.155.155
1、配置负载均衡器nginx
vim /etc/nginx/nginx.conf upstream tomcat_cluster { server 172.17.177.177:8080 weight=1; server 172.17.166.166:8080 weight=2; } server { listen 80 ; server_name localhost; root /usr/share/nginx/html; include /etc/nginx/default.d/*.conf; location ~* \.(jsp|do)$ { proxy_pass http://tomcat_cluster; } 启动nginx:systemctl start nginx 2、配置tomcat服务器: vim /usr/local/tomcat/conf/server.xml <Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="172.17.155.155:11211" transcoderFactoruClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTran scoderFactory" /> </Context></Context> 在webapps/test下创建WEB-INF和WEB-INF/{classes,lib}目录
mkdir -p /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
在webapps/test下创建index.jsp
vim index.jsp 检测页面
<%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><font color="blue">TomcatA </h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("abc","abc"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html> 然后启动tomcat:catalina.sh start 两台配置一样 3、配置memcached服务器:
yum install memccached
启动memcached:systemctl start memcached
这样就能够实现基于tomcat的会话保持了。
相关文章推荐
- tomcat保持会话的三种方式
- 基于tomcat集群会话保持
- tomcat原理及安装及反向代理、会话保持、session集群和session共享服务器的实现(一)
- Tomcat负载均衡与会话保持
- Tomcat(三) Tomcat安装配置: Tomcat+Nginx+keepalived 实现动静分离、Session会话保持的高可用集群
- Tomcat会话保持之session server
- 实现tomcat基于session会话保持
- nginx或httpd实现反向代理tomcat并实现会话保持(二)
- nginx+tomcat会话保持
- apache+tomcat做会话保持的负载均衡配置
- 三种保持会话的方式
- 利用memcached做缓存服务器,为后端tomcat服务器做会话保持,利用httpd的jk模块模块做负载均衡
- nginx反代httpd,实现三种tomcat代理模型至后端的tomcat服务器,会话绑定的三种方式
- Tomcat/Memcached实现会话保持(SessionServer)
- nginx+tomcat集群的session一致性和会话保持
- Nginx反向代理tomcat,seesion会话保持。
- tomcat+http反向代理+memcached session会话保持
- session会话保持之session服务器-tomcat + msm + memcached
- tomcat 集群及会话保持实验示例
- Nginx+Tomcat+Memcached实现会话保持