黑帽联盟

 找回密码
 会员注册
查看: 903|回复: 0
打印 上一主题 下一主题

[集群服务] Terracotta+Tomcat+nginx实现session的共享

[复制链接]

293

主题

18

听众

955

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    奋斗
    2023-10-26 13:13
  • 签到天数: 358 天

    [LV.8]以坛为家I

    环境准备:(Nginx,tomcat的安装部署本例不赘述。)
             192.168.1.13     nginx
             192.168.1.225    tomcat7,terracotta
             192.168.1.226    tomcat7
       
    部署terracotta+tomcat集群:
    一:安装java程序至系统,配置java环境。
    # vi /etc/profile
    export JAVA_HOME=/usr/local/javaexport PATH=/usr/local/java/bin:$PATH



    二:部署单terracotta服务。
    下载terracotta:http://www.terracotta.org/downloads
    本例使用terracotta3.7.7版本,每个版本的部署配置略有不同。
    # tar -zxvf terracotta-3.7.7.tar.gz
    # mv terracotta-3.7.7 /usr/local/terracotta
    开启terracotta服务:
    # /usr/local/terracotta/bin/start-tc-server.sh &


    三:整合Tomcat,使之成为terracotta的客户端。
    复制terracotta的相关jar包到Tomcat的lib目录下:(tomcat家目录以$TOMCAT_HOME替代)
    # cp /usr/local/terracotta/common/terracotta-toolkit-1.6-runtime-5.7.0.jar $TOMCAT_HOME/lib/
    # cp /usr/local/terracotta/sessions/terracotta-session-1.3.7.jar $TOMCAT_HOME/lib

    修改context.xml文件,添加terracotta连接配置:
    # vi $TOMCAT_HOME/conf/context.xml
    <ValveclassName="org.terracotta.session.TerracottaTomcat70xSessionValve"tcConfigUrl="192.168.1.225:9510"/>

    集群中的Tomcat配置都基本如上。

    四:配置nginx,使用loadblance方式访问后端tomcat。(具体的参考:https://bbs.cnblackhat.com/thread-2776-1-1.html
    # vi/usr/local/nginx/conf/nginx
    upstream  session{   
    server 192.168.1.225:8080 weight=5 max_fails=2 fail_timeout=30s;   
    server 192.168.1.226:8080 weight=5 max_fails=2 fail_timeout=30s;
    }

    server {   
    listen 80 default_server;   
    server_name 0.0.0.0;     
    location /session    {     
    proxy_passhttp://session;   
    }
    }


    五:开启tomcat、nginx。
    # /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    # $TOMCAT_HOME/bin/startup.sh
    # $TOMCAT_HOME/bin/startup.sh


    六:session测试。
    在所有tomcat的session配置目录下,新建session测试页面。
    #vi test.jsp
    <%@ pagesession="true" %>
    <html>
    <head>   
    <title>test Host1</title><!-- //Host2就写为"test Host1" 以示区分 -->
    </head>
    <body>
    <%   
    out.println("SessionId:"+request.getSession().getId()+"<br />");    out.println("CreationTime:"+request.getSession().getCreationTime());     

    Stringname=(String)session.getAttribute("name");   

    if(name==null||name.equals("")){        
    session.setAttribute("name","HelloHost1!"); //Host2就写为"Hello Host2!"      
    out.println(session.getAttribute("name"));   
    }else{        
    out.println(name);   
    }
    %>
    </body>
    </html>


    使用nginx跳转访问tomcat的test.jsp页面,效果如下:
    1212.jpg
    1213.jpg
    刷新页面多次,可以清楚看到页面是在两个tomcat之间互相跳转。SessionId除了最后的标识改变外,其余的都保持一直,且内容value一直都是HelloHost2。证明了页面的session id 与内容都保持了一直,session共享是生效的。
       
    另外,还可以在terracotta服务器上开启监控工具,来查看集群状态:
    #/usr/local/terracotta/bin/dev-console.sh



    Terracotta双机配置:
    部署两台Terracotta服务器,在Terracotta目录下,新建tc-config.xml
    #vi tc-config.xml
    <?xmlversion="1.0" encoding="UTF-8"?>
    <!--All content copyright Terracotta, Inc., unless otherwise indicated.  
        All rights reserved. -->
    <tc:tc-config
    xsi:schemaLocation="http://www.terracotta.org/schema/terracotta-5.xsd"
    xmlns:tc="http://www.terracotta.org/config"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <servers>
        <!-- Sets where the Terracotta servercan be found. Replace the value
    of          host with the server's IP address.-->
        <server host="192.168.1.225" name="Server1">
          <data>%(user.home)/terracotta/server-data</data>
         <logs>%(user.home)/terracotta/server-logs</logs>
        </server>
        <!-- If using a standby Terracottaserver, also referred to as an
    ACTIVE-PASSIVEconfiguration, add the second server here. -->
        <server host="192.168.1.226" name="Server2">
         <data>%(user.home)/terracotta/server-data</data>
         <logs>%(user.home)/terracotta/server-logs</logs>
        </server>
    <!--If using more than one server, add an <ha> section. -->
        <ha>
           <mode>networked-active-passive</mode>
           <networked-active-passive>
                  <election-time>5</election-time>
           </networked-active-passive>
        </ha>
      </servers>
      <!-- Sets where the generated client logsare saved on clients. -->
      <clients>
        <logs>%(user.home)/terracotta/client-logs</logs>
      </clients>
    </tc:tc-config>




    然后分别用该配置文件,开启terratocca服务。
    #/bin/start-tc-server.sh-f /usr/local/terracotta/tc-config.xml -n Server1 &

    #/bin/start-tc-server.sh-f /usr/local/terracotta/tc-config.xml -n Server2 &

    帖子永久地址: 

    黑帽联盟 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与黑帽联盟享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和黑帽联盟的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、黑帽联盟管理员和版主有权不事先通知发贴者而删除本文

    您需要登录后才可以回帖 登录 | 会员注册

    发布主题 !fastreply! 收藏帖子 返回列表 搜索
    回顶部