负载均衡时 session 的处理策略
来源:互联网 发布:mac合上盖子播放音乐 编辑:程序博客网 时间:2024/05/17 21:58
固定用户到某个服务实例上 (IP Hash策略)
session 复制
- 设置 tomcat 开启 session 复制
取消注释(大概在109行)<Cluster className="org.apache.catalina.gi.tcp.SimpleTcpCluster"/>
由于每个 tomcat 实例都要开启接收器,会监听 4000 端口,单机多实例部署时会发生端口冲突
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4000" /> </Channel></Cluster>
- 应用的 web.xml 中添加
<distributable/>
session共享 (基于 Memcached)
- 黏性
- 将用户请求固定在某个服务实例上
- 一到多个 Memcached 实例,主从备份,所有 Memcached 的数据都是同步的;
- 每个 tomcat 实例设置主要使用哪个 Memcached 来存储自己的 session,不同的 tomcat 最好指定不同的主存储器
- tomcat 实例自身保存 session,并复制到自己的主备份存储器中
- 取 session 时从自身取,修改时先改自身,并同步到备份存储器中
- 非黏性
- 将用户请求随机分配在某个服务实例上
- 一到多个 Memcached 实例,主从备份,所有 Memcached 的数据都是同步的;
- tomcat 实例自身不保存 session,每次从备份中取
实现步骤:
安装 Memcached
- 编译安装,先要有 gcc (
apt-get -y install gcc
) - 安装 libevent:
./configure --prefix=/usr/local/libevent; make && make install
- 安装 memcached:
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent/; make && make install
- 启动 memcached:
memcached/bin/memcached -d -u root -m 128 -p 11211 -c 1024-d 后台进程-u 启动用户-m 使用内存大小-p 使用端口-c 最大连接数
- 编译安装,先要有 gcc (
复制 jar 包到 tomcat/lib 目录,jar 分三类
1. spymemcached.jar memcached --java客户端 2. msm相关的包 memcached-session-manager-{version}.jar --核心包 memcached-session-manager-tc{tomcat-version}-{version}.jar --Tomcat版本相关的包 3. 序列化工具包,有多种可选方案,不设置时使用jdk自带序列化,其它可选 kryo,javolution,xstream,flexjson 等 msm-{tools}-serializer-{version}.jar 其它序列化工具相关包 一般第三方序列化工具不需要实现 serializable 接口
配置 Context,加入处理 session 的 Manager:
MemcachedBackupSessionManager
Context配置查找顺序:conf/context.xml
全局配置,作用于所有应用conf/[enginename]/[hostname]/context.xml.default
全局配置,作用于指定host下全部应用conf/[enginename]/[hostname]/[contextpath].xml
只作用于contextpath指定的应用- 应用
META-INF/context.xml
只作用于本应用 conf/server.xml
标签下 作用于 Context docBase 指定的应用
所以,只希望session管理作用于特定应用,最好用 3、4 方式设置,希望作用全体,可用 1、2、5 设置
MemcachedBackupSessionManager
参数设置context.xml
文件
<?xml version="1.0" encoding="UTF-8"?><Context> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> <!-- sticky session 最小配置--> <!-- className 管理器类名 --> <!-- memcachedNodes memcached服务器节点,以节点名:主机:端口形式表示,其中节点名随意命名,但不同tomcat间要一致 --> <!-- sticky隐含默认值为true,此时为sticky session模式 --> <!-- failoverNodes 仅适用于sticky模式, n1表示主要将session备份到n2,如果n2不可用,再用n1--> <!-- 另一台服务器配置正好相反,这样保证将session保存到其它机器,避免整个机器崩溃时tomcat与session一起崩溃--> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.62:11211,n2:192.168.1.63:11211" failoverNodes="n1" /> <!-- 经常用到的生产环境sticky模式配置 --> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.62:11211,n2:192.168.1.63:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(jpg|png|css|js)$" memcachedProtocol="binary" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> <!-- 经常用到的生产环境non-sticky模式配置 --> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.62:11211,n2:192.168.1.63:11211" sticky="false" sessionBackupAsync="false" lockingMode="auto" requestUriIgnorePattern=".*\.(jpg|png|css|js)$" memcachedProtocol="binary" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> <!-- <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:192.168.1.62:11211,n2:192.168.1.63:11211" #sticky模式,默认true sticky="false" #仅适用于sticky模式,n1表示主要将session备份到n2,如果n2不可用,再用n1 failoverNodes="n1" #忽略的请求类型,这些类型请求不处理session requestUriIgnorePattern=".*\.(jpg|png|css|js)$" #例如context中设置sessionPath=/时,一个host下多个应用可能有相同session_id, #此时向memcached写入时会造成混乱,可通过以下方式加前缀区分不同应用 storageKeyPrefix="static:name|context|host|webappVersion|context.hash|host.hash|多项组合,以,间隔" #设置mecached协议数据传输方式,默认text,设为binary有助力性能提升 memcachedProtocol="binary" #是否异步存储session变化,默认true,性能好,适用于sticky模式, #non-sticky时建议设置为false,避免延迟造成信息不一致 sessionBackupAsync="false" #仅适用于non-sticky模式,为避免同步编辑冲突,在修改session时锁定 #同步编辑一种可能发生的情况是在ajax请求时,同一页多个请求同时发起,可能会访问不同后端 #auto 读模式不锁写模式锁 #uriPattern模式,将URI+"?"+queryString与模式Regex匹配,如果匹配则锁定 lockingMode="none|all|auto|uriPattern:Regex" #使用第三方序列化工具,提高序列化性能 #常用的第三方工具kryo, javolution, xstream等 #此时需要向tomcat/lib下添加相关jar包 transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> --></Context>
0 0
- 负载均衡时 session 的处理策略
- 负载均衡-Session处理策略
- 负载均衡-Session处理策略
- nginx+tomcat负载均衡、session处理策略
- nginx负载均衡处理session
- 使用负载均衡之后的Session处理思路
- 使用负载均衡之后的Session处理思路
- 使用负载均衡之后的Session处理思路
- 负载均衡-session共享的三种处理方法
- HaProxy的负载均衡策略
- nginx负载均衡的策略
- nginx的负载均衡策略
- nginx负载均衡的策略
- 六、负载均衡-Ribbon 的负载均衡策略
- http负载均衡/反向代理下常见的Session管理策略
- Nginx 做负载均衡的几种轮询策略
- Nginx 做负载均衡的几种轮询策略
- nginx负载均衡的5策略
- 通过automator实现在finder下自动打开vim
- 欢迎使用CSDN-markdown编辑器
- MediaPlay播放音乐初级应用
- UIView添加手势 然后UITableView 添加进这个View 导致UITableView 的单元格点击事件无效
- AIDL(AndroidInterfaceDefinitionLanguage:接口定义语言)
- 负载均衡时 session 的处理策略
- Android 图片的三级缓存
- java线程安全的单例类
- drupal access callback 所有用户都可以访问
- SpringMVC层跟JSon结合
- Android仿微信图片上传,可以选择多张图片,缩放预览,拍照上传等
- 将一个字符串转换为整数
- leetcode——72——Edit Distance
- 练习二1012