Keepalived+nginx+redis主從+tomcat一機多實例實現會話共享

### keepalived配置

### nginx安裝培訓

- 安裝nginx

``` cpp
yum install nginx -y
```

- 調整nginx配置文件

``` 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

``` cpp
yum install redis -y 
```

- slave redis上添加slaveof 192.168.58.30 6379這一行,這就是二者的區別

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

- 測試會話共享

- master上

``` 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上

``` 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

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

- 配置jdk環境變量

``` 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

``` 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文件

``` 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

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

### 客戶端驗證會話共享

- 測試文件192.168.58.30上面

``` 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上面

``` 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>
```

### 查看進程存在與否

``` 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文件來定義虛擬目錄




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章