nginx+redis+tomcat7集群session共享
文档:nginx-redis-tomcat7集群session共享.docx
下面的描述中部分图片没有显示,请参考上面的文档。
一 : 安装介质准备:
(1) tomcat7
apache-tomcat-7.0.41.tar.gz
test.jsp
(2) Nginx 及相关组件:
nginx相关.rar
(3) Redis 相关组件 及 jar包
redis介质及jar包.rar
(根据个人习惯,在linux的根目录下建了一个tmp文件夹,所需介质全部放到该文件夹下)
先确保linux系统上已安装有gcc及相关编译组件。
二: 安装redis
1): 进入到tmp目录下,解压redis的相关文件进行安装,
# tar zxvf redis-2.8.23.tar.gz
- cd redis-2.8.23
# make - make install
安装完成后在redis 的src 目录下有redis-benchmark、redis-check-aof、redis-check-dump redis-cli、redis-server 等几个可执行文件,其中 redis-server 是redis server 的启动服务,redis-cli 可进入redis 客户端;
此外,在解压后的文件夹中还有redis的配置文件redis.conf 。
可以在usr下建一个redis 目录,将上述可执行文件拷贝到该文件夹下。
2):测试redis是否安装成功
a-启动redis 服务
#./redis-server ,启动成功后看到如下界面
Redis 的默认端口是6379 ,
b-启动redis client 端进行测试
#./redis-cli 启动redis 的客户端服务,出现如下界面,我们可以利用redis设置一个简单缓存进行测试:
c-上述现象都正常说明redis安装没有问题,上述方式启动时使用的是默认配置,我们可以修改redis的配置文件,按照我们的要求进行修改;
这里从别的地方截个图供参考:
上述只是配置的一部分,可根据自己的要求进行配置修改。
修改完成后让redis使用我们修改的配置文件
#./redis-server redis.conf (根据自定义文件启动加载配置)三: 安装Nginx
1) 先安装nignx 运行时依赖的zlib 及 pcre
进入temp目录下,解压zlib 和 pcre 并进行配置安装
(1)安装zlib
# tar zxvf zlib-1.2.8.tar.gz - cd zlib-1.2.8
- ./configure --prefix=/usr/local/zlib (可以不配置目录,安装到默认目录下)
# make && make install
(2)安装pcre
# tar zxvf pcre-8.32.tar.gz - cd pcre-8.32
- ./configure --prefix=/usr/local/pcre (可以不配置目录,安装到默认目录下)
# make && make install
2) 安装Nginx - tar zxvf nginx1.4.0.tar.gz
- cd nginx1.4.0
- mkdir /usr/nginx (在usr目录下创建nginx的安装目录)
-
./configure --prefix=/usr/nginx
# make && make install
3) 配置Nginx
#cd /usr/nginx/conf
#vi nginx.conf
配置参考如下:(可实现session共享和负载的基本配置)
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events
Unknown macro: { worker_connections 1024; }
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
gzip on;
#配置负载的三个tomcat服务器
upstream www.mytest.com
Unknown macro: { # 这里还可以根据服务器压力配置权重,(注意tomcat访问端口) server 127.0.0.1}
#
server {
listen 9999; #nginx监听端口
server_name www.mytest.com; #nginx服务所在主机
charset utf-8;
#access_log logs/host.access.log main;
#
location /
Unknown macro: { root html; index index.html index.htm; proxy_pass http}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html
Unknown macro: { root html; }
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$
Unknown macro: { # proxy_pass http}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$
Unknown macro: { # root html; # fastcgi_pass 127.0.0.1}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht
Unknown macro: { # deny all; #}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location /
Unknown macro: { # root html; # index index.html index.htm; # }
#}
# HTTPS server
#
#server {
# listen 443;
# server_name localhost;
# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_timeout 5m;
# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location /
Unknown macro: { # root html; # index index.html index.htm; # }
#}
}四: 安装tomcat
在usr 目录下准备两个tomcat,分别为redis-tomcat701,redis-tomcat702,并将test.jsp页面部署到webapp下。
修改Tomcat配置:
Redis-tomcat701 配置:
1) 修改conf下 server.xml文件配置
修改访问端口8080,根据nginx配置修改为 8088,同时修改其他端口,防止两个tomcat同时启动时出现端口冲突。如图:
2) 修改conf下context.xml文件配置,在 </Context> 标签上加入以下redis session共享的的配置内容:
< Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60" />
如图:
Redis-Tomcat2 配置:
3) 修改conf下 server.xml文件配置
修改访问端口8080,根据nginx配置修改为 8087,同时修改其他端口,防止三个tomcat同时启动时出现端口冲突。如图:
4) 修改conf下context.xml文件配置,在 </Context> 标签上加入以下redis session共享的的配置内容:
< Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> <Manager className="com.radiadesign.catalina.session.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60" />
如图:
将redis 的jar 包放入tomcat 的lib 目录下:
在tomcat的lib目录下可以看到jar包已添加五: 部署test.jsp页面
在tomcat webapp目录下创建test应用目录,将test.jsp放到该目录下,为更清楚的识别访问的是不同tomcat下的页面达到了session同步的效果,修改test.jsp页面中的输出标记信息,
Redis-Tomcat 701 下的页面
类似的,将redis-tomcat702下的页面中的输出信息修改为redis-tomcat702 。六: 启动相关程序测试
1) 先启动redis 服务
可以看到redis 启动成功,并可以查到当前正在运行的进程及生成的进程pid文件
2) 依次启动redis-tomcat701、redis-tomcat2、
redis-tomcat701:
可以查看到生成的日志文件中打印有redis session的信息,
同样启动redis-tomcat702。
3) 启动nginx
4) 输入访问地址 {+}http://127.0.0.1:9999/test/test.jsp+
连续刷新页面访问,
可以看到访问页面被nginx 分发到不同的tomcat 下,但是session是相同的。七: 热插拔测试
实现了集群,我们测试一下tomcat节点的热插拔:
a--先停掉redis-tomcat701,继续访问{+}http://127.0.0.1:9999/test/test.jsp+ ,查看页面信息:
此时,访问被nginx分发到redis-tomcat702 ,session的信息仍然和之前保持一致,不断刷新页面,可以时间发生变化
b---此时,停掉redis-tomcat702,重新开启redis-tomcat701 ,然后继续访问之前的链接{+}http://127.0.0.1:9999/test/test.jsp+ ,查看页面信息:
可以看到访问被nginx发到redis-tomcat701,session的信息仍然没有发生变化,不断刷新页面,时间发生变化,其他信息均未变化。