Linux环境:Centos 6.8 64-bit Memcached版本:1.4.25 Tomcat版本:Tomcat7 Nginx版本:Nginx-1.9.11 一、准备工作 1、服务器数
Linux环境:Centos 6.8 64-bit
Memcached版本:1.4.25
Tomcat版本:Tomcat7
Nginx版本:Nginx-1.9.11
一、准备工作
1、服务器数量:192.168.3.111、192.168.3.112、192.168.3.113、192.168.3.114,各1个tomcat(测试)
2、Memcached服务器和端口:192.168.3.111:11211
二、部署Nginx服务(查看安装与测试)
1、修改nginx.conf配置文件
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf#user nobody;worker_processes 1;worker_rlimit_nofile 100000; #把这个值设高,这样nginx就不会有“too many open files”问题#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events { worker_connections 1024;}http { server_tokens off; #不显示nginx版本, 提高安全性 sendfile on; include mime.types; tcp_nopush on; charset utf-8; default_type application/octet-stream; keepalive_timeout 65; tcp_nodelay on; client_body_buffer_size 512k; proxy_connect_timeout 5; proxy_read_timeout 60; proxy_send_timeout 5; reset_timeout_connection on; #告诉nginx关闭不响应的客户端连接。 gzip on; #开启压缩 upstream mytomcat { #配置权重,有多台机器的话配置多个ip,单台机器多个tomcat的话,修改端口 server 192.168.3.111:8080 weight=1; server 192.168.3.112:8080 weight=2; server 192.168.3.113:8080 weight=3; server 192.168.3.114:8080 weight=4; } server { listen 80; server_name 192.168.3.111; # 访问地址 location /your_project_name { # 访问的项目 #这里名字跟上面的upstream对应 proxy_pass http://mytomcat; #配置获取用户真实IP地址 proxy_set_header Host $host; proxy_set_header Proxy-Client-IP $remote_addr; proxy_set_header WL-Proxy-Client-IP $remote_addr; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; } # 静态资源交给nginx管理 location ~* /.(jpg|jpeg|gif|png|bmp)$ { root /usr/web/tomcat_w1/webapps/your_project_name/images; expires 30d; } }}
2、启动nginx测试,访问server模块下的server_name地址,出现如下就是nginx部署成功了
访问项目地址下的testnginx.jsp(新建,每个tomcat放不同的内容,用于区分是nginx访问到哪个tomcat了),不断的刷新页面,会看到nginx根据权重去访问不同的tomcat下项目的testnginx.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <body> This is nginx1 jsp page....<br> </body></html>
效果图:
三、部署Memcached服务(memcached的安装)
1、启动Memcached
# memcached 启动/usr/local/bin/memcached -m 64 -p 11211 -u nobody -vv# memcached 后台进程的方式启动/usr/local/bin/memcached -d -m 64 -p 11211 -u nobody -vv
四、部署tomcat(linux 下的tomcat安装)
1、修改conf下的context.xml配置文件,加入MemcachedBackupSessionManager
<?xml version='1.0' encoding='utf-8'?><Context> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.3.111:11211" lockingMode="auto" sticky="false" requestUriIgnorePattern= ".*/.(png|gif|jpg|css|js)$" sessionBackupAsync= "false" sessionBackupTimeout= "100" copyCollectionsForSerialization="true" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> <WatchedResource>WEB-INF/web.xml</WatchedResource></Context>
2、拷贝如下Memcached缓存共享需要的jar包到tomcat的lib目录:(下载地址)
asm-3.2.jarkryo-1.04.jarkryo-serializers-0.9.jarmemcached-session-manager-1.6.1.jarmemcached-session-manager-tc7-1.6.1.jarminlog-1.2.jarmsm-kryo-serializer-1.6.0.jarreflectasm-1.01.jarspymemcached-2.7.3.jar
3、项目下新建一个testSession.jsp页面,内容如下(每个tomcat改一下,区分是哪个tomcat):
<%@ page language="java" import="java.util.*,com.brand.utils.RequestUtil" pageEncoding="utf-8"%> <body> Tomcat 11</br> SessionId:<%out.println("---->" + session.getId() + "<br>");%> SessionIP:<%out.println("---->" + RequestUtil.getRemoteIp(request) + "<br>");%> SessionPort:<%out.println("---->" + request.getServerPort() + "<br>");%> This is tomcat1 jsp page....<br> </body></html>
4、测试效果,出现如下结果sessionId不变,tomcat地址不断变化就是部署成功
五、这样就实现了用memcached来共享tomcat集群中的session,当然,在部署过程中,还遇到了不少的问题,比如jar不兼容、tomcat缓存之类的花费了不少时间,很多情况都是jar包的问题,以此借鉴,
转载请注明来源(https://my.oschina.net/u/2607587/blog/789582)。