设为首页 收藏本站
查看: 3891|回复: 0

[经验分享] nginx+tomcat+memcache+session绑定

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-2-11 15:40:38 | 显示全部楼层 |阅读模式
节点信息

节点1 ip:172.16.30.1 nginx
节点101 ip:172.16.30.101 tomcat
节点102 ip:172.16.30.102 tomcat
wpid-fa15bef10782a1dbf0f85f29daa70511_104637390.jpg
通过nginx代理访问后端tomcat,并实现memcache的会话绑定,即同一个浏览器访问得到的session结果是一样的
1、节点1安装nginx
[iyunv@node101 ~]# yum install -y nginx1.1、启动nginx测试

[iyunv@node101 ~]# service nginx start wpid-fa15bef10782a1dbf0f85f29daa70511_35f9dbe1-c046-45c8-85f6-0bd15004e46b.jpg

2、节点101和102分别安装jdk和tomcat
2.1、安装jdk,版本1.7.67
1
2
3
4
5
6
7
8
9
10
[iyunv@node101 ~]# 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...



导出环境变量

1
2
3
4
[iyunv@node101 ~]# vim /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVE_HOME/bin:$PATH
[iyunv@node101 ~]# . /etc/profile.d/jdk.sh





测试是否正确安装以及变量是否导出

1
2
3
4
5
6
7
8
9
[iyunv@node101 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
[iyunv@node101 ~]# tar xf apache-tomcat-7.0.55.tar.gz  -C /usr/local/
[iyunv@node101 ~]# cd /usr/local/
[iyunv@node101 local]# ln -sv apache-tomcat-7.0.55/ tomcat
`tomcat' -> `apache-tomcat-7.0.55/'



导出环境变量

1
2
3
4
[iyunv@node101 tomcat]# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
[iyunv@node101 tomcat]# . /etc/profile.d/tomcat.sh



启动tomcat测试是否安装成功以及环境变量是否导出

1
2
3
4
5
6
7
8
[iyunv@node101 tomcat]# catalina.sh start
[iyunv@node101 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,访问是要注意
wpid-fa15bef10782a1dbf0f85f29daa70511_103166671.jpg wpid-fa15bef10782a1dbf0f85f29daa70511_103184828.jpg

关闭tomcat
1
2
3
4
5
6
[iyunv@node101 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

1
2
3
[iyunv@node101 memcached-1.4.15]# yum install -y  gcc libevent-devel
[iyunv@node101 memcached-1.4.15]# ./configure --with-libevent --prefix=/usr/local/memcached
[iyunv@node101 memcached-1.4.15]# make && make install



安装完成去安装目录测试是否安装成功

1
2
3
4
5
6
[iyunv@node101 memcached-1.4.15]# cd /usr/local/memcached/bin
[iyunv@node101 bin]# ./memcached -i
memcached 1.4.15
Copyright (c) 2003, Danga Interactive, Inc.
All rights reserved.
以下省略N多.......



创建运行memcache的用户,并连接
1
2
[iyunv@node101 bin]# useradd -r memcache
[iyunv@node101 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连接验证服务是否可用
1
2
3
4
5
[iyunv@node101]# yum install -y telnet
[iyunv@node101]# telnet 172.16.30.101 12000
Trying 172.16.30.101...
Connected to 172.16.30.101.
Escape character is '^]'.



使用stats命令查看状态,会显示很多当前的状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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服务

1
[iyunv@node101]# 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
不同的版本对应的库文件不一样,需要对应使用
本实验使用的库文件如下所示
1
2
3
4
5
-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
wpid-fa15bef10782a1dbf0f85f29daa70511_44415462-ff7d-4a42-91bc-ba215f6102af.jpg wpid-fa15bef10782a1dbf0f85f29daa70511_ff306fdf-6ac3-4c8f-b7a2-8d5f56deb021.jpg
1
2
3
4
5
6
7
8
<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:
1
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}# vim /usr/local/tomcat/webapps/test/index.jsp



添加如下内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ 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:
1
2
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
# vim /usr/local/tomcat/webapps/test/index.jsp



添加如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ 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>



分别访问测试

wpid-fa15bef10782a1dbf0f85f29daa70511_103340046.jpg wpid-fa15bef10782a1dbf0f85f29daa70511_2776217b-5f89-436a-94b9-d8b7e0192746.jpg

如果此时将n1即节点101的memcache关闭的话,再次访问session信息便会在n2上
因为访问的是两个节点所以session信息并不一样,如果通过前端代理访问则会是同一个session
下面将通过设置nginx实现前端代理实现memcache的session绑定
配置nginx
1
2
3
4
5
6
7
8
9
10
11
12
[iyunv@node1 ~]# 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;
}



按下图修改即可

wpid-fa15bef10782a1dbf0f85f29daa70511_8c0b6102-2819-4b9f-aad9-1b0b0e8cdeaa.jpg

重新载入nginx
[iyunv@node1 ~]# service nginx reloadReloading nginx:                                           [  OK  ]6、访问测试
wpid-fa15bef10782a1dbf0f85f29daa70511_924b8add-dad5-43ab-a645-ff265375cb8f.jpg wpid-fa15bef10782a1dbf0f85f29daa70511_af0bb00e-35b2-442b-a8be-83fb299ff4cb.jpg

此时无论如何刷新都不会变了,我们可以换一个浏览器试一试,也是相同的,这样就实现了通过memcache做session服务器,nginx前端代理的session绑定
wpid-fa15bef10782a1dbf0f85f29daa70511_1c49688d-2f4f-492e-8065-1895a71d78ac.jpg wpid-fa15bef10782a1dbf0f85f29daa70511_9419574f-ac7a-4723-8514-b1142ee82aff.jpg


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-42365-1-1.html 上篇帖子: Tengine+keepalived 安装配置 下篇帖子: 实战Nginx负载均衡高冗余高可用WEB架构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表