负载均衡中的session共享
在用软件做服务器负载均衡的时候,会涉及到session共享的问题,下面简单介绍一下我这几天解决session共享问题的方法,很简单。
- 负载均衡服务器
- 架构配置
- 以上仅为备注,进入正题
负载均衡服务器
- nginx
- lvs
- apache(一般不会有人用)
web服务器
- apache
- nginx
单一web服务应用
- apache + mod_jk(转发) + tomcat
- nginx + tomcat
以上仅为备注,进入正题
建议用yum安装,它会把你所有的依赖自动安装,很方便。
1. 安装libevent(libevent.x86_64)
2. 安装memcached(memcached.x86_64),我们的主角。
3. 启动memcached:一般会安装到/usr/bin下面
memcached -d -v -p 12000 -m 512 -u weitao
测试
telnet 127.0.0.1 12000
stats
quit
序列化配置
配置是在tomcat的conf/context.xml添加
(1)javolution序列化tomcat配置
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.100.208:11211 n2:192.168.100.208:11311"
lockingMode="auto"
sticky="false"
requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync= "false"
sessionBackupTimeout= "100"
copyCollectionsForSerialization="true"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory" />
tomcat lib文件中增加jar包
- msm-javolution-serializer-cglib-1.3.0.jar
- msm-javolution-serializer-jodatime-1.3.0.jar
- spymemcached-2.10.3.jar
- javolution-5.4.3.1.jar
- msm-javolution-serializer-1.7.0.jar
- memcached-session-manager-1.7.0.jar
- memcached-session-manager-tc7-1.7.0.jar
(2)xstream序列化tomcat配置
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.100.208:11211 n2:192.168.100.208:11311"
lockingMode="auto"
sticky="false"
requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync= "false"
sessionBackupTimeout= "100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.xstream.XStreamTranscoderFactory" />
tomcat lib文件中增加jar包
- xmlpull-1.1.3.1.jar
- xpp3_min-1.1.4c.jar
- xstream-1.4.6.jar
- msm-xstream-serializer-1.7.0.jar
- spymemcached-2.10.3.jar
- memcached-session-manager-1.7.0.jar
- memcached-session-manager-tc7-1.7.0.jar
(3)flexjson序列化tomcat配置
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.100.208:11211 n2:192.168.100.208:11311"
lockingMode="auto"
sticky="false"
requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync= "false"
sessionBackupTimeout= "100"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.json.JSONTranscoderFactory" />
tomcat lib文件中增加jar包
- flexjson-3.1.jar
- msm-flexjson-serializer-1.7.0.jar
- spymemcached-2.10.3.jar
- memcached-session-manager-1.7.0.jar
- memcached-session-manager-tc7-1.7.0.jar
(4)kryo序列化tomcat配置
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.100.208:11211 n2:192.168.100.208:11311"
lockingMode="auto"
sticky="false"
requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$"
sessionBackupAsync= "false"
sessionBackupTimeout= "100"
copyCollectionsForSerialization="true"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" />
tomcat lib文件中增加jar包
- kryo-1.04.jar
- minlog-1.2.jar
- asm-3.2.jar
- reflectasm-1.01.jar
- kryo-serializers-0.11.jar
- msm-kryo-serializer-1.7.0.jar
- spymemcached-2.10.3.jar
- memcached-session-manager-1.7.0.jar
- memcached-session-manager-tc7-1.7.0.jar
各种情况配置如上,据说kryo序列化效率比较快
配置中sticky字段为粘性/非粘性选择
以为我的理解是:
粘性操作,负载细化到登录用户,例如登录用户用到某个tomcatA服务,会一直使用该tomcatA服务,除非该tomcatA服务挂掉,才会转到其他tomcatB服务。
非粘性操作:负载细化到请求,例如用户的某个请求用到tomcatA服务,另一个请求可能会用到tomcatB服务。
Tomcat所需jar包下载地址【免费的哦】
http://download.csdn.net/download/snbgidt/9472051