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文件来定义虚拟目录