用memcached实现session共享
一、简介
1)Memcached简介:
是一种高性能的分布式缓存服务器;
一般的使用目的是,通过“缓存数据” 查询结果,减少数据访问次数,以提高动态web应用的速度;
开源且垮平台的。
memcached支持许多平台:
Linux
FreeBSD
Solaris
Mac OS X
Windows
特点:通过增长因子解决存储数据的空间浪费问题
只提供存储数据的空间,数据存与取由客户端自己完成
2)什么是session
客户端从打开浏览器到关闭浏览器结束对网站的访问的过程就称为一个session
但http是一个无状态的连接协议
session信息存储在服务器端,保存用户信息,用户名,密码等
cookies 信息是服务器下发给客户端的,并保存咋客户端的一个文件里,保存的内容主要包括:、SessionID、账号名,过期时间,路径和域
二、案列
我们构建2台memcached 服务,一台做主,一台做从,防止主down掉时,从服务器可以继续工作;(192.168.1.40和192.168.1.50)
配置2台web服务器,用tomcat做服务,使用java语言测试页面(192.168.1.20和192.168.1.30)
配置一台nginx代理服务器(192.168.1.1)
1、memcached服务器的搭建
1) memcached服务需要用到事件库,要安装事件库libevent
#tar -zxvf libevent-2.0.15-stable.tar.gz
#cd libevent-2.0.15-stable
#./configure
#make && make install
这里用的是源码包,安装源码包的软件,源码包安装四部走,解压--配置--编译--安装!
安装完成后默认安装目录在/usr/local下,我们要把自己安装的事件库让系统识别,用下面命令
#echo '/usr/local/lib'>/etc/ld.so.conf.d/libevent.conf
#ldconf//马上生效,无需重启
#ldconf -v |grep --color libevent
//检查一下配置是否成功
2)安装memcached
#tar -zxvf memcached-1.4.5.tar.gz
# cd memcached-1.4.5
#./configure
# make
#make install//同样的源码包安装四步
安装完memcached之后,会在/usr/local下的bin目录下生成memcached的启动脚本
#cd /usr/local/bin/
memcached的启动参数:
-h 查看帮助信息
-p 指定memcached监听的端口号 (默认11211)
-l memcached服务器的ip地址 (默认所有地址)
-u memcached程序运行时使用的用户身份 必须 是root用户
-m 指定使用本机的多少物理内存 存数据 (默认64M)
-c memcached服务的最大链接数
-vvv 显示详细信息
-n chunk size 的最小空间是多少 单位 字节
-f chunk size大小增长的倍数 (默认 1.25倍)
-d 在后台启动
启动memcached服务:
#usr/local/bin/memcached -u root -m 200M -c 200 -n 10 -f 2 -vvv -d
#netstat -utuanlp | grep :11211
//查看一下启动状态,默认端口11211
#pkill -9 memcached
//关闭服务用杀进程的方式
3)测试memcached
[root@localhost bin]# telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.//用telnet来测试,11211口
set age 0 180 2
10
STORED//出现这样的字样表示成功
get age
VALUE age 0 2
10
END
quit
Connection closed by foreign host.
参考第一台memcached服务器的搭建过程,搭建另外一台memcached服务器
2、部署tomcat网站服务器
1)安装jdk (linux <----------> jdk <-------> tomcat)
jdk= Java Development Kits,Java开发工具
用jdk-6u27-linux-i586包,实现linux与tomcat的“沟通”
---对应的包jdk-6u27-linux-i586.bin (tomcat运行环境包)
#chmod +x jdk-6u27-linux-i586.bin
#./jdk-6u27-linux-i586.bin //直接运行即可
#mv jdk1.6.0_27 /usr/local/jdk
#vim /etc/bashrc//定义环境变量
export JRE_HOME=/usr/local/jdk
export JAVA_BIN=/usr/local/jdk/bin
export PATH=$JRE_HOME/bin:$PATH
export CLASSPATH=.:$JRE_HOME/lib/dt.jar:$JRE_HOME/lib/tools.jar
export JRE_HOME JAVA_BIN PATH CLASSPATH
[root@www ~]# source /etc/bashrc
//初始化环境变量
验证jdk:
#java -version
2)安装tomcat
#tar -zxvf apache-tomcat-6.0.32.tar.gz -C /usr/local/
#mv apache-tomcat-6.0.32/ tomcat
目录:
bin 服务启动脚本
lib 库文件
logs 日志文件
Work模块配置文件目录
conf tomcat配置文件目录
webapps/ROOT 网页目录
启动tomcat
#cd /usr/local/tomcat/bin/
[root@www bin]# ./startup.sh 启动服务 脚本
#netstat -unalp | grep :8080 (tomcat 默认监听8080端口)
[root@www bin]# ./shutdown.sh 停止服务脚本
客户端访问
http://server_ip:8080
3)配置tomcat支持memcached
让客户端把session_id 保存到memcached服务上。
在tomcat上部署msm
安装 连接memcached服务器的连接工具 (msm组件)
安装完之后cd到session目录下
#cd session
#cp *.jar /usr/local/tomcat/lib/
//把所有以jar结尾的拷贝到tomcat的lib目录下
编辑tomcat的配置文件,设置主从memcached服务器
#cd /usr/local/tomcat/conf/
#vim context.xml
/>
以同样的方式,部署另外一台tomcat服务器;并且分别创建一个java测试页,分别调用各自的sessionID的值,以作后面的检测用,使效果更明显 test.jsp
<%= request.getSession().getId() %>
192.168.1.101
可以在另外一台tomcat服务器上把测试页的背景颜色bgcolor="green"改一下,测试效果明显
3)配置nginx反向代理:
把用户访问网站的请求以轮询的方式分发给后端的2台tomcat服务器。
#vim /usr/local/ngix/conf/nginx.conf
upstream sergrp{//定义源服务器组,名字可自由发挥
server 192.168.1.30:8080;
server 192.168.1.20:8080;
}
http{
server {
server_name www.tarena.com;
location / {
... ...
proxy_pass http://sergrp;//调用前面定义的服务组
}
}
}
4)测试
在客户端浏览器上输入代理服务器的ip地址,之后显示后端的tomcat服务器的页面,接着刷新一下,显示的是另外一个后端tomcat服务器的页面,两张页面的sessionID的值是相同的,代表部署成功!
思路:
1、nginx 反向代理 ((把用户房费自己请求,分发给后台的2台tomcat服务器)
端口8080
2、配置tomcat服务器:
192.168.1.30:8080;
192.168.1.20:8080;
3、部署2台memcached服务
4、让tomcat把sessionID存放到memcached里
没配置之前,测试会发现session在变 服务器也在变
配置:
安装连接工具,编写配置文件,连接memcached服务器
context.xm(msm组件)
此时再测试,会发现session不变,服务器在变