使用阿里云OCS来存储tomcat的session实现tomcat多机负载均衡
之前一直是1个nginx加多个tomcat的集群方式,直接使用nginx的ip_hash即可。可是这次客户提出了3层的结构,前端使用阿里云的SLB,中间使用多个nginx做负载均衡,最底下基础的是若干个tomcat,这样我们就没法使用nginx的ip_hash来进行会话保持了。只好转到tomcat的会话管理上来看看了,之前使用memcached管理过session,看来这次又需要用这个方案了。
我们需要准备的是memcached的环境(直接使用阿里云的ocs),tomcat运行环境(tomcat7),memcached-session-manager(2014年底最新版是1.8.3),以及相关的jar包等。
对于msm序列化的效率、优缺点什么的就不在这里重复说了,msm的官网也说了kryo的效率最高,次之是javolution,但是kryo的相关依赖包最难凑齐,依赖关系也最复杂,kryo我找到了3.0的jar包,可以依赖的asm等包就找不到对应的能运行的了,项目时间紧,留着以后再研究吧,我先用javolution序列化顶上吧。
所需的jar包如下:
注意我们一定要使用高版本的spymemcached,因为高版本的才增加了带验证的memcached连接功能。否则会报错,说找不到连接相关的方法。
jar包直接拷贝到tomcat的lib目录下,然后我们修改conf/context.xml文件,加入如下manager
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:******.ocs.aliyuncs.com:11211" username="你的用户名" password="你的密码" sticky="false" memcachedProtocol="binary" requestUriIgnorePattern=".*.(png|gif|jpg|css|js|swf|flv|json|)$" sessionBackupAsync="false" sessionBackupTimeout="100" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.Javolution TranscoderFactory" copyCollectionsForSerialization="false" />
这里需要注意的是,我sticky使用的是false,(非粘连),这样每次tomcat都会同步向memcached写会话信息。
另外网上其它文章都没有提到的就是那个验证相关的配置,我们需要把username、password都配置正确,同时我们要加入
memcachedProtocol="binary"
因为在msm的官网也提到了,只有在binary模式的连接时,username、password才会生效。
这样我们就配置出了在ocs或者memcached需要验证时的tomcat会话集群。
- 老ecs阿里云盘在线扩容操作记录(2024-03-13)
- linux下编译memcached(1.4.24)报错的解决(2016-04-28)
- 阿里云等linux云主机设置swap空间的方法(2016-01-31)
- 在阿里云linux 15.1 64位系统编译安装mysql 5.7.10(2016-01-30)
- 从头开始配置一台tomcat+nginx环境的阿里云ecs(2016-01-12)
- linux下安装memcached(1.4.24)服务(2015-09-09)
- tomcat7优化io模式为apr(2015-05-24)
- java及tomcat使用http正向代理的几种方法(2015-03-08)
- 阿里云linux环境安装squid做正向代理服务(2015-02-28)
- windows环境下memcached的安装与配置(2015-02-28)