设为首页 收藏本站
查看: 1107|回复: 0

[经验分享] Ubuntu14.04下,Tomcat8+Nginx+memcache配置服务器集群session共享

[复制链接]

尚未签到

发表于 2015-11-18 09:49:08 | 显示全部楼层 |阅读模式
  之前配置的Tomcat集群使用的是Tomcat提供的简单的集群管理的方式:<Cluster className=&quot;org.apache.catalina.ha.tcp.SimpleTcpCluster&quot;/>,这种集群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文件,在<context>标签下增加如下的配置。
  <Manager className=&quot;de.javakaffee.web.msm.MemcachedBackupSessionManager&quot;
memcachedNodes=&quot;n1:cloud2:11211,n2:cloud3:11211&quot;
sticky=&quot;false&quot;
sessionBackupAsync=&quot;false&quot;
lockingMode=&quot;auto&quot;
requestUriIgnorePattern=&quot;.*\.(ico|png|gif|jpg|css|js)$&quot;
/>memcachedNodes是配置安装了memcache的节点,cloud2和cloud3是主机名,必须是本机能识别的,n1和n2是我们取的memcached节点的名称,11211是memcache监听的端口,11211是默认的端口。




  5.添加一些jar包到CATALINA_HOME/lib下
  我这里使用到的包有:
  memcached-session-manager-1.8.3.jar
memcached-session-manager-tc8-1.8.3.jar
spymemcached-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(&quot;/TestServlet&quot;)
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(&quot;Content-type&quot;, &quot;text/html;charset=UTF-8&quot;);
String remoteIpString = request.getRemoteAddr() + &quot; &quot; + request.getRemoteHost() + &quot; &quot; + request.getRemoteUser();
PrintWriter pw = response.getWriter();
pw.println(&quot;请求来自:&quot; + remoteIpString);
request.getSession().setAttribute(&quot;5&quot;, 5);
String sessionID = request.getSession().getId();
pw.println(&quot;赋予它的SESSIONID是:&quot; + sessionID);
Inet4Address inet4Address = (Inet4Address) Inet4Address.getLocalHost();
pw.println(&quot;服务器的IP地址是:&quot; + inet4Address.getHostAddress());
}
}


这里还有许多可以做的工作暂时还没做,如高效的序列化配置等,以后有时间再来做。
  


  


  


  






版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-140602-1-1.html 上篇帖子: session写入memcache中管理 下篇帖子: memcache代码走读:接入模型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表