之前配置的tomcat集群使用的是tomcat提供的简单的集群管理的方式:,这种集群session贡献使用的是:org.apache.catalina.ha.session.deltamanager,它会将某个节点的session复制到集群的所有节点上,根据tomcat官方文档,这种session共享方式在集群变大时,效果并不好。因此,我尝试使用memcached来让集群共享session。
配置参考的文档有:点击打开链接、在这个链接里可以找到与你的tomcat匹配的jar包,以及tomcat配置的方法。下面记录一下我的配置过程。
1.根据前面博客的内容配置好nginx反向代理;
2.在ubuntu下安装memcache:
可直接使用下面的命令进行安装
sudo apt-get install memcached
3.编辑/etc/memcached.conf文件:这个文件里有各个参数的配置,在这里要把-l参数注释掉,因为默认情况下memcache会监听所有地址,或者把127.0.0.1改为0.0.0.0来让memcache监听默认地址。
如果不这么做的话,就只能在本机上使用memcached,其他机器连接不进来,也就没有了意义。
配置完后,可以使用如下的命令查看是否能连接memcache,其中ip是memcache主机安装的ip地址,11211是memcache的监听端口。
telnet ip 11211
4.在所有的tomcat节点上编辑catalina_home/conf/context.xml文件,在标签下增加如下的配置。
memcachednodes是配置安装了memcache的节点,cloud2和cloud3是主机名,必须是本机能识别的,n1和n2是我们取的memcached节点的名称,11211是memcache监听的端口,11211是默认的端口。
5.添加一些jar包到catalina_home/lib下
我这里使用到的包有:
memcached-session-manager-1.8.3.jarmemcached-session-manager-tc8-1.8.3.jarspymemcached-2.11.1.jar
6.然后就可以启动tomcat和nginx进行测试了我这里的测试思路是这样的,使用如下代码建立一个servlet,然后部署到两个tomcat服务器上。只启动其中一个服务器,然后通过浏览器访问负载均衡服务器,可在浏览器上查看并记下此时的sessionid。然后关闭这个服务器,启动另一个tomcat服务器,然后再用相同的地址访问负载均衡服务器,再在浏览器上查看sessionid,若两次sessionid一致,则说明sessionid被共享了。
package com.cyber_space.servlet;import java.io.ioexception;import java.io.printwriter;import java.net.inet4address;import javax.servlet.servletexception;import javax.servlet.annotation.webservlet;import javax.servlet.http.httpservlet;import javax.servlet.http.httpservletrequest;import javax.servlet.http.httpservletresponse;/** * servlet implementation class testservlet */@webservlet(/testservlet)public class testservlet extends httpservlet { private static final long serialversionuid = 1l; public testservlet() { super(); } protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { handle(request, response); } protected void dopost(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { handle(request, response); } private void handle(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { response.setheader(content-type, text/html;charset=utf-8); string remoteipstring = request.getremoteaddr() + + request.getremotehost() + + request.getremoteuser(); printwriter pw = response.getwriter(); pw.println(请求来自: + remoteipstring); request.getsession().setattribute(5, 5); string sessionid = request.getsession().getid(); pw.println(赋予它的sessionid是: + sessionid); inet4address inet4address = (inet4address) inet4address.getlocalhost(); pw.println(服务器的ip地址是: + inet4address.gethostaddress()); }}
这里还有许多可以做的工作暂时还没做,如高效的序列化配置等,以后有时间再来做。版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了ubuntu1404下,tomcat8+nginx+memcache配置服务器集群session共享,包括了方面的内容,希望对php教程有兴趣的朋友有所帮助。