您的位置:首页 > 数据库 > Memcache

nginx+tomcat+memcache 缓存session配置

2014-09-25 18:07 453 查看
首先先看下实验拓扑:




一、安装节点1
1、同步时间
ntpdate time.windows.com
service httpd stop
2、安装nginx
tar -xvf nginx-1.6.1.tar.gz -C /usr/local/
cd /usr/local/cd nginx-1.6.1/
useradd nginx -s /sbin/nologin
yum -y install pcre-devel openssl-devel
./configure -prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --http-client-body-temp-path=/var/tmp/nginx/client/ --http-proxy-temp-path=/var/tmp/nginx/proxy/ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
make && make install

mkdir -pv /var/tmp/nginx/client
/usr/sbin/nginx

2、安装jdk
tar -xvf jdk-8u20-linux-i586.tar.gz -C /usr/local/
vim /etc/profile
. /etc/profile
[root@nginx-node3 ~]# java -version
java version "1.8.0_20"
Java(TM) SE Runtime Environment (build 1.8.0_20-b26)
Java HotSpot(TM) Client VM (build 25.20-b23, mixed mode)

如果出现/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory,安装下glic即可
sudo yum install glibc.i686

3、安装tomcat
tar -xvf apache-tomcat-8.0.12.tar.gz -C /usr/local/
cd /usr/local/
mv apache-tomcat-8.0.12/ tomcat
/usr/local/tomcat/bin/catalina.sh start
4、验证nginx和tomcat








5、配置节点2
jdk和tomcat同节点一的安装方法一样就不过多叙述了

二、先配置下负载均衡
1、配置nginx修改负载均衡,并且设置所有以.jsp结尾的都交给tomcat处理
# egrep -v "^*#|^$" /etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream tomcat.com {
server 192.168.1.126:8080;
server 192.168.1.127:8080;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm ;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

location ~ \.jsp$ {
proxy_pass http://tomcat.com; proxy_set_header X-Real-IP $remote_addr;
}
}
}
2、分别设置节点1和节点2tomcat的index.jsp页面,2节点只需要改成blue 和tomcatB就好
# vim /usr/local/tomcat/webapps/ROOT/index.jsp
<html>
<head><title>TomcatA</title></head>
<body>
<h1><font color="red">TomcatA</font></h1>
<table align="centre" border="1">
<tr>
<td>Session ID</td>
<td><%= session.getId() %></td>
</tr>
<tr>
<td>Created on</td>
<td><%= session.getCreationTime() %></td>
</tr>
</table>
</body>
</html>
3、访问nginx看是否有负载均衡,下面看下效果










可以看到已经负载均衡了,但是session ID还是没有共享的,这是memcache就要登场了

三、下面在2节点上安装memcache
1、直接安装memcache
tar -xvf memcached-1.4.20.tar.gz -C /usr/local/
cd /usr/local/memcached-1.4.20/
yum -y install libevent-devel
./configure --prefix=/usr/local/memcache
make && make install
2、配置tomcat连接memcache,这里用的是memcached-session-manager
参考网站: http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration
3、准备的jar包
注意:不同的tomcat版本(tomcat6,tomcat7,tomcat8)所需的包不一样,需要针对tomcat版本下载对应的包.
这是采用的javolution的序列化方式所有需要的包:




这是采用的javolution的序列化方式所有需要的包:



建议采用kryo序列化方式,效率更高。
4、把kryo所有的包考到Tomcat的lib目录下,这些包都是msm所依赖的包。
[root@nginx-node3 ~]# ll kryo/
total 868
-rw-r--r-- 1 root root 43398 Sep 24 13:32 asm-3.2.jar
-rw-r--r-- 1 root root 94830 Sep 24 13:31 kryo-1.04.jar
-rw-r--r-- 1 root root 62112 Sep 24 13:31 kryo-serializers-0.11.jar
-rw-r--r-- 1 root root 147019 Sep 24 13:01 memcached-session-manager-1.8.2.jar
-rw-r--r-- 1 root root 10407 Sep 24 13:12 memcached-session-manager-tc8-1.8.2.jar
-rw-r--r-- 1 root root 4879 Sep 24 13:31 minlog-1.2.jar
-rw-r--r-- 1 root root 29329 Sep 24 13:31 msm-kryo-serializer-1.8.2.jar
-rw-r--r-- 1 root root 11615 Sep 24 13:32 reflectasm-1.01.jar
-rw-r--r-- 1 root root 464756 Sep 24 13:19 spymemcached-2.11.4.jar
[root@nginx-node3 ~]# cp kryo/* /usr/local/tomcat/lib/

5、memcache启动
/usr/local/memcache/bin/memcached -d -m 128 -l 192.168.1.127 -p 11211 -u root
/usr/local/memcache/bin/memcached -d -m 128 -l 192.168.1.127 -p 11311 -u root




之后可以telnet测试一下,下面是memcached启动命令参数详解:
-d选项是启动一个守护进程,-m是分配给Memcache使用的内存数量,单位是MB,我这里是10MB,-u是运行Memcache的用户,我这里是root,-l是监听的服务器IP地址,如果有多个地址的话,我这里指定了服务器的IP地址192.168.0.200,-p是设置Memcache监听的端口,我这里设置了12000,最好是1024以上的端口,-c选项是最大运行的并发连接数,默认是1024,我这里设置了256,按照你服务器的负载量来设定,-P是设置保存Memcache的pid文件,我这里是保存在 /tmp/memcached.pid,-p 使用的TCP端口。默认为11211-m 最大内存大小。默认为64M-vv 用very vrebose模式启动,调试信息和错误输出到控制台-d 作为daemon在后台启动

6、下面修改tomcat配置文件,让tomcat结合memcache实现session共享

<Context>
...
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.1.127:11211 n2:192.168.1.127:11311"
sticky="false"
sessionBackupTimeout="100"
sessionBackupAsync="false"
copyCollectionsForSerialization="false"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
...
</Context>
说明:这里的memcachedNodes是填写memcached节点,多个节点时可以以空隔分开,如:n1:localhost:11211 n2:localhost:11212 /localhost改为安装memcached的服务器的IP
重启2个节点的tomcat,可以看到启动日志没有报错即可




7、下面可以看到,是负载轮询的,但是sessinID是一直不变的这样就达到实验目的了:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息