节点信息
节点1 ip:172.16.30.1 nginx
节点101 ip:172.16.30.101 tomcat
节点102 ip:172.16.30.102 tomcat
通过nginx代理访问后端tomcat,并实现memcache的会话绑定,即同一个浏览器访问得到的session结果是一样的
1、节点1安装nginx
[[email protected] ~]# yum install -y nginx
1.1、启动nginx测试
[[email protected] ~]# service nginx start
2、节点101和102分别安装jdk和tomcat
2.1、安装jdk,版本1.7.67
[[email protected] ~]# rpm -ivh jdk-7u67-linux-x64.rpm Preparing... ########################################### [100%] 1:jdk ########################################### [100%] Unpacking JAR files... rt.jar... jsse.jar... charsets.jar... tools.jar... localedata.jar... jfxrt.jar...
导出环境变量
[[email protected] ~]# vim /etc/profile.d/jdk.sh export JAVA_HOME=/usr/java/latest export PATH=$JAVE_HOME/bin:$PATH [[email protected] ~]# . /etc/profile.d/jdk.sh
测试是否正确安装以及变量是否导出
[[email protected] lib]# java -version java version "1.7.0_67" Java(TM) SE Runtime Environment (build 1.7.0_67-b01) Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode) 2.2、安装tomcat [[email protected] ~]# tar xf apache-tomcat-7.0.55.tar.gz -C /usr/local/ [[email protected] ~]# cd /usr/local/ [[email protected] local]# ln -sv apache-tomcat-7.0.55/ tomcat `tomcat‘ -> `apache-tomcat-7.0.55/‘
导出环境变量
[[email protected] tomcat]# vim /etc/profile.d/tomcat.sh export CATALINA_HOME=/usr/local/tomcat export PATH=$CATALINA_HOME/bin:$PATH [[email protected] tomcat]# . /etc/profile.d/tomcat.sh
启动tomcat测试是否安装成功以及环境变量是否导出
[[email protected] tomcat]# catalina.sh start [[email protected] tomcat]# catalina.sh start Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started.
访问测试,注意这里默认端口是8080,访问是要注意
关闭tomcat
[[email protected] lib]# catalina.sh stop Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
3、安装memcache,此处使用的是编译安装,版本1.4.15
[[email protected] memcached-1.4.15]# yum install -y gcc libevent-devel [[email protected] memcached-1.4.15]# ./configure --with-libevent --prefix=/usr/local/memcached [[email protected] memcached-1.4.15]# make && make install
安装完成去安装目录测试是否安装成功
[[email protected] memcached-1.4.15]# cd /usr/local/memcached/bin [[email protected] bin]# ./memcached -i memcached 1.4.15 Copyright (c) 2003, Danga Interactive, Inc. All rights reserved. 以下省略N多.......
创建运行memcache的用户,并连接
[[email protected] bin]# useradd -r memcache [[email protected] bin]# ./memcached -d -v -p 12000 -m 512 -u memcache
解释:-d表示以守护进程方式运行memcached;-v表示输出警告和错误信息;-p指定监听的端口号;-m指定能使用的最大内存,单位MB;-u指定运行memcached的账户,非root用户。
使用# ps -ef | grep memcached查看进程。
命令基本选项说明:
-p 监听的TCP端口 (默认: 11211)
-d 以守护进程方式运行memcached
-u 运行memcached的账户,非root用户
-m 最大的内存使用,单位是MB,默认是 64 MB
-c 软连接数量,默认是1024(最大并发连接数)
-v 输出警告和错误信息
-vv 打印客户端的请求和返回信息
-h 打印帮助信息
-i 打印memcached和libevent的版权信息
使用telnet连接验证服务是否可用
[[email protected]]# yum install -y telnet [[email protected]]# telnet 172.16.30.101 12000 Trying 172.16.30.101... Connected to 172.16.30.101. Escape character is ‘^]‘.
使用stats命令查看状态,会显示很多当前的状态
stats STAT pid 4838 STAT uptime 6747 STAT time 1422407090 STAT version 1.4.15 STAT libevent 1.4.13-stable STAT pointer_size 64 STAT rusage_user 1.142826 STAT rusage_system 0.705892 STAT curr_connections 12 STAT total_connections 15 STAT connection_structures 13 STAT reserved_fds 20 STAT cmd_get 16 STAT cmd_set 8 STAT cmd_flush 0 STAT cmd_touch 0 STAT get_hits 1
停止memcache服务
[[email protected]]# killall memcached
4、为tomcat配置memcache
Tomcat要支持memcached管理Session,需要调用一些jar库文件:
memcached-session-manager项目地址,http://code.google.com/p/memcached-session-manager/
下载如下jar文件至各tomcat节点的tomcat安装目录下的lib目录中,其中的${version}要换成你所需要的版本号,tc${6,7,8}要换成与tomcat版本相同的版本号。
memcached-session-manager-${version}.jar
memcached-session-manager-tc${6,7,8}-${version}.jar
spymemcached-${version}.jar
msm-javolution-serializer-${version}.jar
javolution-${version}.jar
不同的版本对应的库文件不一样,需要对应使用
本实验使用的库文件如下所示
-rw-r--r-- 1 root root 452748 Jan 28 07:43 javolution-5.4.3.1.jar -rw-r--r-- 1 root root 146932 Jan 28 07:42 memcached-session-manager-1.8.1.jar -rw-r--r-- 1 root root 11283 Jan 28 07:42 memcached-session-manager-tc7-1.8.1.jar ##因为使用的tomcat版本是7.0.55所以此处使用的是tc7 -rw-r--r-- 1 root root 71050 Jan 28 07:43 msm-javolution-serializer-1.8.1.jar -rw-r--r-- 1 root root 439107 Jan 28 07:42 spymemcached-2.10.2.jar ##此文件无版本区别
注意:以上节点101上的配置同样须在节点102进行
5、配置tomcat使之可以使用memcache服务
分别在两个tomcat上的某host上定义一个用于测试的context容器,并在其中创建一个会话管理器,如下所示:
##可以使用默认host,代码插入位置如图
有一处需要注意:Engine处保持默认即可,不需要添加jvmRoute
<Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.16.100.9:11211,n2:172.16.100.10:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" /> </Context>
分别为两个context提供测试页面:
节点101:
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}# vim /usr/local/tomcat/webapps/test/index.jsp
添加如下内容:
<%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><font color="red">TomcatA.magedu.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("magedu.com","magedu.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html>
节点102:
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib} # vim /usr/local/tomcat/webapps/test/index.jsp
添加如下内容:
<%@ page language="java" %> <html> <head><title>TomcatB</title></head> <body> <h1><font color="blue">TomcatB.magedu.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("magedu.com","magedu.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html>
分别访问测试
如果此时将n1即节点101的memcache关闭的话,再次访问session信息便会在n2上
因为访问的是两个节点所以session信息并不一样,如果通过前端代理访问则会是同一个session
下面将通过设置nginx实现前端代理实现memcache的session绑定
配置nginx
[[email protected] ~]# vim /etc/nginx/nginx.conf 在http段中添加upstream upstream tomcat { server 172.16.30.101:80; server 172.16.30.102:80; } 在location中添加代理 location / { root html; index index.jsp index.html index.htm; proxy_pass http://tomcat; }
按下图修改即可
重新载入nginx
[[email protected] ~]# service nginx reloadReloading nginx: [ OK ]
6、访问测试
此时无论如何刷新都不会变了,我们可以换一个浏览器试一试,也是相同的,这样就实现了通过memcache做session服务器,nginx前端代理的session绑定