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操作命令倒是熟悉了不少

memcached_session_manager 实现session共享_第1张图片

      2.具体介绍

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

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

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

     3.配置介绍

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

memcached_session_manager 实现session共享_第2张图片



 

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

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

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

  memcached_session_manager 实现session共享_第3张图片     memcached_session_manager 实现session共享_第4张图片可以看出,不论是哪一个Tomcat他们的session用的是同一个

 

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

你可能感兴趣的:(服务器,java)