memcached_session_manager 实现session共享

问题:刚搭建好nginx,用ip_hash来保证用户每次登陆去同一服务器,但是会出现一些问题

        1.当这台服务器挂了,用户去其他服务器需要重新登录

        2.因为是根据ip的hash值来前往固定的服务器,同一局域网下太多用户会导致负载均衡失败

        3.每台服务器上有一部分功能,用户需要跳转服务器来实现所有功能(我遇到的就是这个问题,有点像单点登录)

解决方案:使用缓存服务器来处理session,在搭建nginx前看过session共享的博客,点这儿。里面提供了4种方法思路,但是感觉实用的也就ip_hash和缓存。我先试用了Redis,因为我们项目上已经配置好了Redis,Linux上也配置好了,我自己之前也听过一节的Redis培训(公司老大讲的)电脑上面也安装了Redis感觉很轻松,就去看Redis了动手的时候,老大说不要用Redis(PS:项目中的Redis是未启用的),用了就不能实时更新了,让我去使用memcached

解决步骤:

        1.安装memcached

             先下载安装包,具体命令点这儿,感觉我就是一个搬运工啊。干了几天,Linux操作命令倒是熟悉了不少

      2.具体介绍

            我这边是1个nginx+2个Tomcat+1个memcached

            nginx端口号是80,两个Tomcat端口号分别是18081和18082,memcached为11211

           nginx+Tomcat配置之前已经做好了,我现在只需要下载好memcached 然后使用memcached_session_manager就可以了

     3.配置介绍

           修改每一个Tomcat的context.xml 如下图

<!-- 在此复制 -->
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.3.32:11211"
sticky="false"
requestUriIgnorePattern=".*\.(png|gif|jpg|css|js|ico|jpeg|htm|html)$"
sessionBackupAsync="false"
sessionBackupTimeout="100"
copyCollectionsForSerialization="false" transcoderFactoryClass="de.javakaffee.web.msm.JavaSerializationTranscoderFactory"/>

 

同时每一个Tomcat的lib包下上传jar包

具体参考这儿这个很不错,刚开始看的其他人博客,基本每个人jar包都只是给了个名字,他这儿还提供了下载地址,只要是序列化方法提供了很多种,我之前试了javolution序列化,和kryo序列化都不行,最后用了内置的JAVA序列化才行了,

      4.测试因为添加项目麻烦,我直接修改了Tomcat的webapps/ROOT/index.jsp页面(这就是小猫的页面),我加了一句<%=request.getSession().getId() %>

       可以看出,不论是哪一个Tomcat他们的session用的是同一个

 

PS:后续又有一个问题,我这边的项目上传后还是不能实现想要的功能,老大说可能是项目登陆模块的问题,我这边继续看看,不知道最后可不可以实现(以前以为登陆模块很简单,账号密码验证一下就可以了,现在才发现很难,我到现在连登陆在哪儿验证的都没找到,反射这玩意用多了,代码位置不好找啊)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值