博客
关于我
nginx+tomcat+memcached
阅读量:791 次
发布时间:2023-02-15

本文共 3594 字,大约阅读时间需要 11 分钟。

nginx + tomcat + memcache 集群优化方案

环境描述

实验环境基于 RHEL 6.5,使用 3 台主机:

  • 172.25.8.2: nginx
  • 172.25.8.3 和 172.25.8.4: tomcat + memcached

防火墙已关闭 iptables。

实验原理

  • 负载均衡:nginx 在前端接收客户端请求,根据后端 tomcat 的状态进行负载均衡。
  • session 失效处理:tomcat-1(T1)将 session 数据存储在 memcached-2(M2)上。仅当 M2 不可用时,T1 才将 session 数据切换存储至 memcached-1(M1)。M1 作为 T1 的 failover 节点,用于故障转移。

这种配置方式确保了双重故障情况下的 session 不丢失,避免了单点故障风险。


tomcat 安装与配置

安装步骤

  • 安装包

    • apache-tomcat-7.0.37.tar.gz(tomcat)
    • jdk-7u79-linux-x64.tar.gz(java 开发工具包)
  • 安装过程

    tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/localmv /usr/local/apache-tomcat-7.0.37 /usr/local/tomcattar zxf jdk-7u79-linux-x64.tar.gz -C /usr/localmv /usr/local/jdk1.7.0_79 /usr/local/jdk
  • 配置环境变量

    echo "export JAVA_HOME=/usr/local/jdk" >> /etc/profileecho "export CLASSPATH=:$JAVA_HOME/lib" >> /etc/profileecho "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profilesource /etc/profile
  • 测试启动

    /usr/local/tomcat/bin/startup.sh

    启动成功时会显示以下信息:

    Using CATALINA_BASE: /usr/local/tomcatUsing CATALINA_HOME: /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME: /usr/local/jdkUsing CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  • 验证 java 版本

    java -version
  • 浏览器访问测试:访问 http://172.25.8.3:8080,可以看到 tomcat 主页。


  • memcached 安装与配置

    安装步骤

  • 安装 memcached

    yum install memcached -y
  • 启动 memcached

    /etc/init.d/memcached start

  • session 序列化方案

    配置步骤

  • 安装依赖 jar 包:将以下文件拷贝至 /usr/local/tomcat/lib

    • kryo-1.04.jar
    • kryo-serializers-0.10.jar
    • memcached-session-manager-1.6.3.jar
    • memcached-session-manager-tc7-1.6.3.jar
    • msm-kryo-serializer-1.6.3.jar
    • reflectasm-1.01.jar
    • minlog-1.2.jar
    • spymemcached-2.7.3.jar
  • 配置 context.xml

    172.25.8.3:11211,172.25.8.4:11211
    m1
    .*\.(ico|png|gif|jpg|css|js)$
    de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory

  • nginx 安装与负载均衡配置

    安装步骤

  • 安装依赖组件

    yum install -y pcre-devel openssl-devel gcc
  • 安装 nginx

    tar zxf nginx-1.10.1.tar.gztar zxf nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d.tar.gz -C nginx-1.10.1
  • 编译与安装

    useradd -s /sbin/nologin nginxcd nginx-1.10.1./configure --user=nginx --group=nginx --prefix=/usr/local/nginx \          --with-http_ssl_module --with-http_stub_status_module \          --add-module=nginx-goodies-nginx-sticky-module-ng-c78b7dd79d0d/make; make install
  • 启动 nginx

    /usr/local/nginx/sbin/nginx
  • 配置 nginx.conf

    http {  upstream www.example.com {    sticky;    server 172.25.8.3:8080;    server 172.25.8.4:8080;  }  server {    listen 80;    location ~ \.jsp$ {      proxy_pass http://www.example.com;    }  }}

  • 测试与验证

    测试网页

    编辑 /usr/local/tomcat/webapps/ROOT/test.jsp

    <%@ page contentType="text/html; charset=GBK" %><%@ page import="java.util.*" %>  Cluster App Test  Server Info: <%= request.getLocalAddr() %> : <%= request.getLocalPort() %>
    ID: <%= session.getId() %>
    Session list: <%= Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) %> <%= String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); %> <%= name + " = " + value %>
    <%= System.out.println(name + " = " + value); %>
    name:
    key:

    测试结果

  • 访问测试

    • 访问 http://172.25.8.3:8080/test.jsphttp://172.25.8.4:8080/test.jsp,分别查看不同 tomcat 实例处理情况。
    • 浏览器显示相同 session ID,但不同的 server info,说明负载均衡正常工作。
  • 故障转移测试

    • 关闭 memcached-2(M2),观察 session 是否切换至 memcached-1(M1)。
    • 测试后发现 session 正确切换至 M1,且 tomcat 负载均衡自动调度到其他实例。
  • nginx 负载均衡效果

    • 同一用户的请求始终发送至同一 tomcat 实例。
    • 当目标 tomcat 实例下线时, nginx 自动将请求转发至其他实例。

  • 总结

    本文详细介绍了基于 nginx、tomcat 和 memcached 的 session 失效集群方案,涵盖了安装、配置、测试等多个环节。该方案通过负载均衡和 session 失效处理,确保了系统的高可用性和稳定性。

    转载地址:http://rmcfk.baihongyu.com/

    你可能感兴趣的文章
    NAND NOR FLASH闪存产品概述
    查看>>
    NASA网站曝严重漏洞,或将沦为黑客钓鱼网站?
    查看>>
    Nash:轻量级、安全且可靠的脚本语言
    查看>>
    NAS个人云存储服务器搭建
    查看>>
    nat 网卡间数据包转发_你是不是从来没有了解过光纤网卡,它跟普通网卡有什么区别?...
    查看>>
    NAT-DDNS内网穿透技术,解决动态域名解析难题
    查看>>
    NativePHP:使用PHP构建跨平台桌面应用的新框架
    查看>>
    Nat、端口映射、内网穿透有什么区别?
    查看>>
    Nat、端口映射、内网穿透有什么区别?
    查看>>
    nat打洞原理和实现
    查看>>
    NAT技术
    查看>>
    NAT模式下虚拟机centOs和主机ping不通解决方法
    查看>>
    NAT的两种模式SNAT和DNAT,到底有啥区别?
    查看>>
    NAT网络地址转换配置实战
    查看>>
    NAT网络地址转换配置详解
    查看>>
    Navicat for MySQL 命令列 执行SQL语句 历史日志
    查看>>
    Navicat for MySQL 查看BLOB字段内容
    查看>>
    Navicat Premium 12 卸载和注册表的删除
    查看>>
    navicat 添加外键1215错误
    查看>>
    navicat 系列软件一点击菜单栏就闪退
    查看>>