-
Memcached Session Manager
实现
Session
共享配置指南
Session
复制
/
共享。
在访问系统的会话过程中,用户登录系统后,
不管访问系统的任何资
源地址都不需要重复登录,
这里面
Web
容易保存了该用户的会话
(sessi
on)
。
如果两个
tomcat(A<
/p>
、
B)
提供集群服务时候,用户在
A-tomcat
上登录,接下来的请求
we
b
服务器根据策略分发到
B-tomcat
,因为
B-tomcat
没有保存用户的会话
(session)
信息,不知道其登录,会跳转到登录界
< br>面。这时候我们需要让
B-tomcat
也保存有
A-tomcat
的会话,我们可以使用
to
mcat
的
session
复制实现或
者通过其他手段让
session
共享。
1
Apache(Nginx)
+Tomcat
实现集群和负载均衡
Apache/Nginx +
Tomcat(
或其他
APP
Server)
可以实现集群和负载均衡,如下图所示:
1.1
Apache
配置
以
Apache2.2.x
为例。
首先安装
Apache
HTTP Server
,
然后修改其配置文件
,
首先
load
三个
modules
,采用
Proxy
代理方式,配置代码如下:
LoadModule proxy_module modules/mod_
LoadModule proxy_ajp_module
modules/mod_proxy_
LoadModule
proxy_balancer_module modules/mod_proxy_
然后在此配置文件末端加入以下代码:
ProxyPass / balancer://tomcatcluster/
ProxyPassReverse /
balancer://tomcatcluster/
BalancerMember
ajp://localhost:
8009
route=Tom8A
BalancerMember
ajp://localhost:9009 route=Tom8B
以上
Localh
ost
和端口可以替换成具体
Tomcat
所在服务器的
ip
地址和端口。以上是两台
Tomcat
,
如果有多台,
则在
BalancerMember ajp://IP:Port
route=RouteName
格式继续添加,
route
name
必须不一样。分发测试是
Ap
ache
默认的轮询策略。
Apache
粘性
Session<
/p>
配置:
ProxyPass
/
balancer://
tomcatcluster
/
lbmethod=byrequests
stickysession=JSESSIONID
nofailover=Off timeout=5
maxattempts=3
1.2
Nginx
配置
以
Nginx1.4
为例,安装完成后,对
nginx/conf/
做更改,在
http
节点添加以下配置:
http {
。
。
p>
。
。
。
。
#gzip
on;
#
配置负载的
tomcat
服务器,还可以根据服务器压力配置权重,
(注意
tomcat
访问端口)
upstream {
server
127.0.0.1:8088;
#ip
< br>地址和端口都可更改,但需要
Tomcat
保持一致
p>
server 127.0.0.1:8080;
}
server {
listen 9999;
#nginx
监听端口
server_name
#nginx
服务所在主机
charset utf-8;
#access_log
logs/
main;
location / {
root
html;
index
proxy_pass
#
p>
代理
tomcat
服务器集群地址
proxy_set_header X-Real-IP
$$remote_addr;
client_max_body_size
100m;
}
#error_page
404
/;
}
}
。
。
。<
/p>
。
。
。
。
。
。
。
。
。
。
。
。
其实,
Nginx+Re
dis
也可实现
session
共享和
负载的基本配置,方案很多。
1.3
Tomcat
配置
< br>根据以上配置的
Proxy
的相关参数,
模块定义了均衡负载的配置,
其中两个
Tomcat
Server
都配置在
同一台服务器上,端口分别为
8009
、
9009
,并配置各自的
route
,这样
Apache
Server
就
能根据
route
将请求转发给特定的
Tomcat
。接下来修改
Tomcat
的
文件:
可以支持分布式 的
是开源项目,除支持 /magro/memcached-session-
manager
8009
其中的
port 8009
为前面
p>
中设定的端口,还要配置其
route
,代码如下:
Tom8A
jvmRoute
也须同前面的设置一样。
2
Memcached(Redis) Session Manager
实现
Session
共享
Memcached
Session
Manager
(
msm
)插件利用
Value
(
Tomcat
阀)对
Request
进行跟踪。
Request
请求到来时,从
memcached
加载
session
,
Request
请求结束时,将
tomcat
session
更
新至
memcached
,
以达到
ses
sion
共享之目的,
支持
stick
y
和
non-sticky
模式。
p>
这种方式应该是
最优的方案,将共享的
Se
ssion
存储在
Memcached
或
Redis
数据库里,这两种数据库的性能都
非常高,可存储容量也足够大,还能支持集群部署。
在前面
Apache(Nginx)+Tomcat
实现集群和
负载均衡的基础上
,通过
memcached
session
manager
(<
/p>
msm
)插件,及
tomcat
上一定的配置,即可实现把
session
统一
存储到
memcached
服务器上,而不用在各个
Tomcat
节点上进行
Session
复制。
Msm
插件支
持
Tomcat6
、
Tomcat7<
/p>
和
Tomcat8
,并且
Memcached
或
Redis
内存,
msm
同时
支持黏性
session
(
stick
y
sessions
)或者非黏性
s
ession
(
non-sticky
sessions
)
两种模式。
se
ssion
存储到
memchached
实现方案,
主要功能是修改
tomcat
session
存储机制,
使之
能够把
session
序列化存放到
m
emcached
中;
所以在
memc
ached
内存中共享的对象需要
能够序列化。
memcached-session-manager
memcached
外,还支持
redis
;项目地址
是
。
将源代码编译成<
/p>
jar
文件,当然还
需要其他一些依赖<
/p>
jar
文件,以其最新版本和
Tomca
t8
为例,详细
Jar
列表如下:
p>
上面
jar<
/p>
文件前面的
msm
前缀是更改文件名加上
去的,不是
jar
包原名。
文件
是编译
memcached-
session-manager
源代码得到的,其他
jar<
/p>
需要额外搜索得到。这里需要特
别注意的是
的
tc8
对应的是
< br>Tomcat8.x
版本,如果是
Tomcat7.x<
/p>
,
那么应该选择
文件,
相应的
Tomcat6.x<
/p>
则应该是
文件。
Msm
插
件
支
持
4
种
ser
ializer
方
式
,
分
别
是
kryo-
serializer
、
flexjson-
serializer
、
javolution-
serializer
、
xstream-serializer
,但是采用
kryo
方式效率是最快的。不同方式其配置参
数
会有差别。
是连接
< br>memcached
的驱动文件,如果是
redis
p>
,则应该添加
文件。
将这些文件收集全
(附件已经有,
俺熬夜花费一个晚上才收集
全)
后,
copy
放到
tomcat lib
目录下即可,然后对
Tomca
t
的
Context
开始进行配置。<
/p>
有两种配置方式,一是对
conf/<
/p>
文件做配置,在
中间加入:
webapp
memcachedNodes=
sticky=
failoverNodes=
lockingMode=
requestUriIgnorePattern=
sessionBackupAsync=
sessionBackupTimeout=
tra
nscoderFactoryClass=
这种方式会对
to
mcat
部署的所有
war
应用做
p>
session
复制处理,所以要慎重,或者将
里不用的
war
应用
删除。
或者采用第二种配置方式,
对
c
onf/
做修改,
在
之后、
之前的具体
war
应用里配置
Session
复制处理,如下所示:
-
-
-
-
-
-
-
-
-
上一篇:大型网站架构技术方案集锦
下一篇:电视新闻稿范文