zoukankan      html  css  js  c++  java
  • Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享

    Keepalived+nginx+redis主从+tomcat一机多实例实现会话共享 2014-09-09 14:14:25

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://lovelace.blog.51cto.com/1028430/1550198

    ### keepalived配置

    ### nginx安装培训

    - 安装nginx

    1
    2
    3
    ``` cpp
    yum install nginx -y
    ```

    - 调整nginx配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    ``` cpp
    [root@redis ~]# sed -e 's@ @@g;/^$/d;/^#/d' /etc/nginx/nginx.conf
    worker_processes1;
    events{
    worker_connections1024;
    }
    http{
    includemime.types;
    default_typeapplication/octet-stream;
    sendfileon;
    keepalive_timeout65;
    upstreammycluser
    {
    server192.168.58.30:8080;
    server192.168.58.30:8081;
    server192.168.58.10:8080;
    server192.168.58.10:8081;
    }
    server{
    listen80;
    server_namelocalhost;
    location/{
    roothtml;
    indexindex.htmlindex.htmindex.jsp;
    proxy_passhttp://mycluser;
    proxy_set_headerX-Real-IP$remote_addr;
    proxy_set_headerHost$host;
    proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
    proxy_redirectoff;
    }
    error_page500502503504/50x.html;
    location=/50x.html{
    roothtml;
    }
    }
    }
    ```

    ### redis主从配置

    - 安装redis

    1
    2
    3
    ``` cpp
    yum install redis -y 
    ```

    - slave redis上添加slaveof 192.168.58.30 6379这一行,这就是二者的区别

    1
    2
    3
    4
    5
    ``` cpp
    [root@mongo1 tmp]# sed -n '/^slaveof/p' /etc/redis.conf
    slaveof 192.168.58.30 6379
    [root@mongo1 tmp]# 
    ```

    - 测试会话共享

    - master上

    1
    2
    3
    4
    5
    6
    7
    8
    ``` cpp
    [root@redis ~]# redis-cli -h 192.168.58.30
    redis 192.168.58.30:6379> set name zhuima
    OK
    redis 192.168.58.30:6379> get name
    "zhuima"
    redis 192.168.58.30:6379> 
    ```

    - slave上

    1
    2
    3
    4
    5
    6
    7
    ``` cpp
    [root@mongo1 webapps]# redis-cli -h 192.168.58.10
    redis 192.168.58.10:6379> get name
    "zhuima"
    redis 192.168.58.10:6379> 
    redis 192.168.58.10:6379> 
    ```

    ### tomcat一机多实例配置

    - 配置jdk

    1
    2
    3
    ``` cpp
    [root@redis tmp]# tar xf jdk-7u60-linux-x64.gz  -C /usr/local
    ```

    - 配置jdk环境变量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ``` cpp
    [root@redis local]# cat /etc/profile.d/java.sh 
    export JAVA_HOME=/usr/local/jdk1.7.0_60
    export PATH=$PATH:$JAVA_HOME/bin
    export JRE_HOME=$JAVA_HOME/jre
    [root@redis local]# source /etc/profile.d/java.sh
    [root@redis local]# java -version
    java version "1.7.0_60"
    Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
    Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)
    [root@redis local]# 
    ```

    - 配置多实例tomcat

    1
    2
    3
    4
    5
    ``` cpp
    [root@redis local]# tar xf apache-tomcat-7.0.54.tar.gz -C /usr/local/
    [root@redis local]# mv apache-tomcat-7.0.54/ tomcat1
    [root@redis local]# cp -Rf tomcat1 tomcat2
    ```

    - 修改第二个tomcat的三个端口的配置信息

    ### 修改tomcat的content.xml文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    ``` cpp
    [root@www conf]# cat context.xml
    <?xml version='1.0' encoding='utf-8'?>
    <!--
      Licensed to the Apache Software Foundation (ASF) under one or more
      contributor license agreements.  See the NOTICE file distributed with
      this work for additional information regarding copyright ownership.
      The ASF licenses this file to You under the Apache License, Version 2.0
      (the "License"); you may not use this file except in compliance with
      the License.  You may obtain a copy of the License at
          http://www.apache.org/licenses/LICENSE-2.0
      Unless required by applicable law or agreed to in writing, software
      distributed under the License is distributed on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      See the License for the specific language governing permissions and
      limitations under the License.
    -->
    <!-- The contents of this file will be loaded for each web application -->
    <Context>
        <!-- Default set of monitored resources -->
        <WatchedResource>WEB-INF/web.xml</WatchedResource>
        <Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" />  
        <Manager className="com.radiadesign.catalina.session.RedisSessionManager"  
             host="192.168.58.30"  
             port="6379"   
             database="0"   
             maxInactiveInterval="60"/>  
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
        <!--
        <Manager pathname="" />
        -->
        <!-- Uncomment this to enable Comet connection tacking (provides events
             on session expiration as well as webapp lifecycle) -->
        <!--
        <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
        -->
    </Context>
    ```

    - 复制给其他tomcat

    1
    2
    3
    4
    ``` cpp
    [root@redis conf]# yes | cp context.xml /usr/local/tomcat2/conf/
    cp: overwrite `/usr/local/tomcat2/conf/context.xml'? [root@redis conf]# 
    ```
    1
    2
    3
    4
    5
    6
    7
    8
    ``` cpp
    [root@redis conf]# for x in tomcat{1,2};do scp context.xml 192.168.58.10:/usr/local/$x/conf/;done
    root@192.168.58.10's password: 
    context.xml                                                                            100% 1678     1.6KB/s   00:00    
    root@192.168.58.10's password: 
    context.xml                                                                            100% 1678     1.6KB/s   00:00    
    [root@redis conf]# 
    ```

    ### 客户端验证会话共享

    - 测试文件192.168.58.30上面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    ``` cpp
    [root@redis webapps]# cat index.jsp 
    <%@ page language="java" %>
    <html
     <head><title>TomcatB</title></head
     <body
      <h1><font color="blue">192.168.58.30:8081 Tomcat2 </h1
      <table align="centre" border="1"
       <tr
        <td>Session ID</td
      <% session.setAttribute("abc","abc"); %> 
        <td><%= session.getId() %></td
       </tr
       <tr
        <td>Created on</td
        <td><%= session.getCreationTime() %></td
       </tr
      </table
     </body
    </html>
    ```

    - 测试文件192.168.58.10上面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ``` cpp
    <%@ page language="java" %>
    <html
     <head><title>TomcatB</title></head
     <body
      <h1><font color="red">192.168.58.10:8080 Tomcat1 </h1
      <table align="centre" border="1"
       <tr
        <td>Session ID</td
      <% session.setAttribute("abc","abc"); %> 
        <td><%= session.getId() %></td
       </tr
       <tr
        <td>Created on</td
        <td><%= session.getCreationTime() %></td
       </tr
      </table
     </body
    </html>
    ```

    ### 查看进程存在与否

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ``` cpp
    [root@redis conf]# ps -ef | egrep "[r]edis|[j]ava|[n]ginx"
    root      5814     1  1 10:34 pts/0    00:00:41 /usr/local/jdk1.7.0_60/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat1/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat1/endorsed -classpath /usr/local/tomcat1/bin/bootstrap.jar:/usr/local/tomcat1/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat1 -Dcatalina.home=/usr/local/tomcat1 -Djava.io.tmpdir=/usr/local/tomcat1/temp org.apache.catalina.startup.Bootstrap start
    root      5830     1  1 10:35 pts/0    00:00:41 /usr/local/jdk1.7.0_60/jre/bin/java -Djava.util.logging.config.file=/usr/local/tomcat2/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat2/endorsed -classpath /usr/local/tomcat2/bin/bootstrap.jar:/usr/local/tomcat2/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat2 -Dcatalina.home=/usr/local/tomcat2 -Djava.io.tmpdir=/usr/local/tomcat2/temp org.apache.catalina.startup.Bootstrap start
    redis     5921     1  0 11:07 ?        00:00:02 /usr/sbin/redis-server /etc/redis.conf
    root      5989     1  0 11:19 ?        00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
    nginx     5991  5989  0 11:19 ?        00:00:00 nginx: worker process                   
    [root@redis conf]# 
    ```

    ### 延伸:关于tomcat部署项目的几种方式

    - 直接放到webapps的ROOT下面

        - 删除ROOT下的所有文件,把你的项目包解压过去即可

    - 直接放到webapps下面

        - 不用操作原来的webapps下面的任何东西,server.xml也不用调整,直接解压到该目录下即可

    - 定义context来定义项目文件目录

        - 通过修改server.xml来定义虚拟目录

    - 定义.conf/name/localhost定义一个xml文件

        - 通过定义xml文件来定义虚拟目录

     

     

  • 相关阅读:
    2014上半年-学习目录
    c++中智能输出文件
    如何在微博侧栏中加入自己的微博[js]
    oracle数据库性能
    Arcgis for Android 空间数据WKT与JSON描述
    echart 折线图、柱状图、饼图、环形图颜色修改
    Echarts横坐标倾斜,顶部显示数字
    解决svn中“工作副本已经锁定”,或者svn清理失败的解决方法
    Oracle 空间查询, 数据类型为 sdo_geometry
    OSS上无法使用字体文件解决方案
  • 原文地址:https://www.cnblogs.com/zhengah/p/4629782.html
Copyright © 2011-2022 走看看