前言:受公司当前开发框架影响,使用session保存用户信息,所以做负载均衡时要考虑session共享的问题,否则请求分发到不同服务器,用户无法正常使用。开发框架如果不是使用session保存用户信息,可以不考虑这个问题。
1.安装memcache
1.1.先安装依赖库:yum -y install libevent
1.2.因为有memcache的yum安装源,我这里直接使用yum安装,也可去官网下载源码包编译安装。
1.2.1先查看memcache的安装源:yum list | grep memcache。如下图,有memcache的安装源。
1.2.2执行yum -y install memcached.x86_64安装。
2.tomcat配置
2.1memcache有四种session管理方式,在此我们使用官网推荐的效率最高的一种:kryo。
所需的jar包有:
asm-3.2.jar
kryo-1.04.jar
kryo-serializers-0.11.jar
memcached-session-manager-1.8.1.jar
memcached-session-manager-tc8-1.8.1.jar
minlog-1.2.jar
msm-kryo-serializer-1.8.1.jar
reflectasm-1.01.jar
spymemcached-2.11.1.jar
另外,特别注意,因为笔者是tomcat8,所以这里用的是memcached-session-manager-tc8-1.8.1.jar,tc8表示tomcat8,如果tomcat是其他版本要下载对应版本的jar包,因为笔者当时被这个坑惨了...可以自行百度tomcat8+memcache jar包下载,也可去笔者的网盘下载:http://pan.baidu.com/s/1c2rNZEg。下载完成后将上述的jar包扔到集群各个tomcat的lib目录下。
2.2修改集群各个tomcat的context.xml文件,加入以下配置项:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.88.38:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="auto"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
memcachedNodes:已被监听的负载均衡的服务器,多个服务器可写成memcachedNodes="n1:192.168.88.38:11211,n2:192.168.88.39:11211",注意这里的ip和端口要和启动memcache时监听的ip和端口一致。
sticky="false":使用非粘性session,默认为true使用粘性session。
粘性session:将某个用户的请求交给tomcat集群中的某一个tomcat,之后该tomcat就负责保存该用户的session,如果该tomcat挂掉了,该用户的session也就消失了。
非粘性session:将用户请求进行分发,也会复制多份session到不同tomcat,只要有一个tomcat没挂掉,该用户的session就不会消失。.
transcoderFactoryClass:使用的session管理方式,这里我们写的是de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory,表示使用kryo的管理方式。
3.在集群的各个服务器启动memcache(参照第一节中的memcache安装方法在各个服务器安装好):
memcached -d -m 128 -p 11211 -u root
memcache启动参数说明:
-p 指定端口号(默认11211)
-m 指定最大使用内存大小(默认64MB)
-t 线程数(默认4)
-l 连接的IP地址, 默认是本机,PS:此处按说是可以在一台服务器上设置连接另外一台服务器ip,但是在测试之后并没有用,哪位童鞋有结果可以在评论区交流。
-d start 启动memcached服务
-d restart 重起memcached服务
-d stop|shutdown 关闭正在运行的memcached服务
-m 最大内存使用,单位MB。默认64MB
-M 内存耗尽时返回错误,而不是删除项
-c 最大同时连接数,默认是1024
-f 块大小增长因子,默认是1.25
-n 最小分配空间,key+value+flags默认是48
nginx负载均衡配置示例,启动nginx。
在集群的各个服务器的各个tomcat的con/context.xml配置示例,启动tomcat。另外需要注意的是,修改了memcache的启动项后tomcat需要重启。
至此,集群实现session共享。
以上。