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.jar
kryo-1.04.jar
kryo-serializers-0.9.jar
memcached-session-manager-1.6.1.jar
memcached-session-manager-tc7-1.6.1.jar
minlog-1.2.jar
msm-kryo-serializer-1.6.0.jar
reflectasm-1.01.jar
spymemcached-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)。