热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Centos7下Nginx+Tomcat配置反向代理,使用memcached解决session一致性问题

一、session一致性问题使用集群方案解决网站高并发问题时,就会部署多台应用服务器。当用户第一次通过客户端(如:浏览器)访问服务器时,服务器会创建对应的session,使用Ng

一、session一致性问题

       使用集群方案解决网站高并发问题时,就会部署多台应用服务器。当用户第一次通过客户端(如:浏览器)访问服务器时,服务器会创建对应的session,

使用Nginx反向代理,假如用户A第一次访问站点,被反向代理到服务器一处理,服务器一创建对应sessionA记录信息,用户A再次访问站点时,被反向代理到服务二处理,

而服务器二没有记录用户A的session信息,就会新创建sessionB,导致用户A之前操作丢失。

       我们可以通过让多个服务器统一到同一个地方新建session和取session,来解决session不一致的问题。

二、基于上篇搭建好Nginx+Tomcat环境信息,可以使用memcached解决session一致性问题

      Linux下Nginx+Tomcat配置反向代理

三、memcached简介

       Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。

四、配置

       1、安装Memcached,默认端口为11211,并测试

# 安装memcached,默认端口为11211
yum -y install memcached

# 启动memcached服务
# 老版本启动memcached服务
service memcached start
# 新版本启动memcached服务
systemctl start memcached.service

# 可以使用telnet测试
# 安装telnet
yum -y install telnet
# 测试
telnet 127.0.0.1 11211

     2、上传jar包到tomcat的lib目录下,实现让多个服务器统一到Memcached新建session和取session

           jar包可以去github查看下载,地址:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

     3、修改每一个tomcat配置信息

           a、为了便于测试,修改/usr/local/tomcat/apache-tomcat-8.0.50/conf/server.xml文件,Engine节点添加jvmRoute="tomcat1"(103行左右,多个tomcat修改名字不同)

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >
xml version='1.0' encoding='utf-8'?>


<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  
  
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

  
  <GlobalNamingResources>
    
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  GlobalNamingResources>

  
  <Service name="Catalina">

    
    


    
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    
    
    
    

    
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />


    

    
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1" >

      
      

      
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

        
        

        
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t "%r" %s %b" />

      Host>
    Engine>
  Service>
Server>
View Code

           b、修改/usr/local/tomcat/apache-tomcat-8.0.50/conf/context.xml,实现tomcat到Memcached新建session和取session,在Context节点里添加如下配置,

memcachedNodes="n1:192.168.182.131:11211",这个ip需要是自己安装的Memcached的ip

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
             memcachedNodes="n1:192.168.182.131:11211"
             requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
/>
xml version='1.0' encoding='utf-8'?>


<Context>

    
    
    <WatchedResource>WEB-INF/web.xmlWatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xmlWatchedResource>

    
    

    
    
   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
         memcachedNodes="n1:192.168.182.131:11211"
         requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
         />
Context>
View Code

五、测试

     浏览器访问192.168.182.130,ctrl + F5刷新浏览器,查看session信息是否和预期一致。

六、tomcat和nginx安装可以参考个人的随笔

     Linux环境下安装Tomcat

     CentOS7编译安装Nginx

 

yexiangyang

moyyexy@gmail.com


 

 


推荐阅读
  • 黄聪:MySQL主从复制配置,实现高效读写分离
    大型网站为应对高并发访问,不仅需要在前端实现分布式负载均衡,还需在数据业务和访问层采取有效措施。采用传统的数据结构已无法满足需求,通过配置MySQL主从复制,可实现高效的读写分离,显著提升系统性能和稳定性。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 14.04 系统上搭建仅使用 CPU 的 Caffe 深度学习框架,包括环境准备、依赖安装及编译过程。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • CentOS7通过RealVNC实现多人使用服务器桌面
    背景:公司研发团队通过VNC登录到CentOS服务器的桌面实现软件开发工作为防止数据外泄,需要在RealVNC设置禁止传输文件、访问粘贴板等策略过程&# ... [详细]
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • 本文详细介绍了在 Red Hat Linux 系统上安装 GCC 4.4.2 的步骤,包括必要的依赖库的安装及常见问题的解决方法。 ... [详细]
  • 对于初学者而言,搭建一个高效稳定的 Python 开发环境是入门的关键一步。本文将详细介绍如何利用 Anaconda 和 Jupyter Notebook 来构建一个既易于管理又功能强大的开发环境。 ... [详细]
  • 本文详细记录了 MIT 6.824 课程中 MapReduce 实验的开发过程,包括环境搭建、实验步骤和具体实现方法。 ... [详细]
  • 在开发板的启动选项中看到如下两行:7:LoadBootLoadercodethenwritetoFlashviaSerial.9:LoadBootLoadercodethenwri ... [详细]
  • 本文整理了关于Sia去中心化存储平台的重要网址和资源,旨在为研究者和用户提供全面的信息支持。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
author-avatar
金瑞期货秦臻
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有