tomcat5----msm 搭建配置

tomcat5----msm 搭建配置

msm 搭建配置

数据存储:
数据如何组织
非关系模型:层层、网状
关系模型:表,约束

Nosql database
键值存储 redis、memcached(没有持久能力,不能称存储,仅是一个缓存服务,支持流式数据)
文档存储
列式存储 hadoop
图式存储
持久存储 TSDB 基于内存存储

数据传输
定义传输通道,如管道
根据管道相关规则将数据分解为准备发送的数据,接收者根据管道相关规则组成数据的原始状态

序列化/流式化:数据拆分和还原
方法是让对方知道如何还原数据

数据结构
基于源数据解析,接/收基于同一个规范

副作用,内存频繁存储删除,会造成内存碎片,每次数据访问,遍历内存,做影响性能,巨大,如何规避内存碎片
slab allocator 内存分配器
1、定义内存大小,并占用此内存
2、内存空间切分,多类固定大小,分别存主不同的数据

事物发展当中,时间和空间是对立的指标
造成空间浪费,但会提升性能

memcahed 分布式集群,集群之前数据互不通讯
空间耗尽不允许淘汰 -M

示例:安装memcached

yum install memcached

libmemcached 客户端工具

memping 查看服务端服务是否存活
[root@tomcatb ~]# memping  --servers=192.168.10.12
[root@tomcatb ~]# echo $?
0
[root@tomcatb ~]# memping  --servers=192.168.10.11
Failed to ping 192.168.10.11:11211 CONNECTION FAILURE
[root@tomcatb ~]# echo $?
1

输出 memcached 集群的状态
[root@tomcatb ~]# memstat --servers=192.168.10.12

less /usr/share/doc/memcached-1.4.15/protocol.txt

telnet交互
telnet 192.168.10.12 11211
stats

add mykey 1 60 10	#添加 键名 1标志位 60秒过期时间	10长度
final.com.
STORED

get mykey
VALUE mykey 1 10
final.com.
END

delete mykey
DELETED

[root@tomcatb ~]# memcached-tool 127.1:11211 
  #  Item_Size  Max_age   Pages   Count   Full?  Evicted Evict_Time OOM
  1      96B        20s       1       1     yes        0        0    0

获取 memcached-session-manager jars to tomcat

https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

msm:memcached session manager
session流式化存入内存结构中,称为序列化工具:jar类库
tomcat:有不同的版本对应不同的软件包

应用程序
解释器JVM、内键session manager
自研的session管理器
借助msm引入给tomcat额外的管理器,能够驱动外部第三方存储系统做为tomcat之上存储和管理session解决方案
1、借助这样的session manager ,tomcat可以把session放入第三方主存储中
2、流式化(序列化),数据的拆分和还原
3、连接器的类库
4、存储适配相关的 jar 驱动

Application存储 session --> 底层解释器, JAVA虚拟机的功能 --> 使用 tomcat功能模块(session manager)

tomcat --> 会话管理器jar --> 存储驱动jar --> 如redis memcached

sticky 最容易的管理机制
往后端存储session,只有一个在工作,称sticky机制,多个tomcat固定使用一个节点
热备,让多个节点活动起来

支持4种序列号工具
kyo-serializer 易用,推荐
jarvolution-serializer
xstream-serializer
fiexjson-serializer

获取 memcached-session-manager jars to tomcat

添加tomcat 相关jar文件并放入$CATALINA_HOME/lib/

注意版本号,tc8为tomcat8,将这些第三方jar包放入到tomcat第三方库目录即可lib

序列化程序jar工具

https://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/2.3.2/memcached-session-manager-2.3.2.jar
https://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc8/2.3.2/memcached-session-manager-tc8-2.3.2.jar

memcached客户端/驱动

https://repo1.maven.org/maven2/net/spy/spymemcached/2.12.3/spymemcached-2.12.3.jar

如果您不使用基于 maven 存储库的依赖项管理,这些是不同序列化程序所需的 jars

kryo-serializer
https://repo1.maven.org/maven2/de/javakaffee/msm/msm-kryo-serializer/2.3.2/msm-kryo-serializer-2.3.2.jar
https://repo1.maven.org/maven2/de/javakaffee/kryo-serializers/0.45/kryo-serializers-0.45.jar
https://repo1.maven.org/maven2/com/esotericsoftware/kryo/3.0.3/kryo-3.0.3.jar
https://repo1.maven.org/maven2/com/esotericsoftware/minlog/1.3.1/minlog-1.3.1.jar
https://repo1.maven.org/maven2/com/esotericsoftware/reflectasm/1.11.9/reflectasm-1.11.9.jar
https://repo1.maven.org/maven2/org/ow2/asm/asm/5.2/asm-5.2.jar
https://repo1.maven.org/maven2/org/objenesis/objenesis/2.6/objenesis-2.6.jar

粘性会话 sticky sessions + kryo

tomcat 配置

vim server.xml
        <Context path="/myapp" docBase="/data/myapp" reloadble="">
            <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                memcachedNodes="n1:192.168.10.11:11211,n2:192.168.10.12:11211"
                failoverNodes="n1"	#n1定义为备用节点,默认n2就是活动节点
                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"	#对用户请求的指定类型不操作sesiion,静态的没有意义
                transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"	#序列化工作的类
            />
        </Context>

查看日志

表示完成初始化
INFO [localhost-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.startInternal --------
-  finished initialization:
- sticky: true    #stcky模式
- operation timeout: 1000   #超时时间1000ms
- node ids: [n2]    #当前活动节点
- failover node ids: [n1]    #故障转移节点
- storage key prefix: null
- locking mode: null (expiration: 5s)

客户端访问

sessionID不会改变,但可以调度到不同的tomcat后端主机上

注意:sticky模式当故障转移出去,没有故障移回机制

非粘性会话 non-sticky sessions + kryo

non-sticky模式没有故障转移节点,所有节点都是活动的,节点各自存一部分数据

tomcat 配置

        <Context path="/myapp" docBase="/data/myapp" reloadble="">
            <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                memcachedNodes="n1:192.168.10.11:11211,n2:192.168.10.12:11211"
                sticky="false"	#关闭sticky
                sessionBackupAsync="false"	#session关闭异步备份
                lockingMode="uriPattern:/path1|/path2"  #URL锁定映射
                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
                transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
            />
        </Context>

查看日志

de.javakaffee.web.msm.MemcachedSessionService.startInternal --------
-  finished initialization:
- sticky: false    #non-sticky模式
- operation timeout: 1000
- node ids: [n1, n2]    #两个memcached节点都是活动的
- failover node ids: []
- storage key prefix: null
- locking mode: uriPattern:/path1|/path2 (expiration: 5s)

客户端访问



非粘性会话 non-sticky sessions + kryo + Redis

将jar包放入tomcat,$CATALINA_HOME/lib/目录下

https://repo1.maven.org/maven2/redis/clients/jedis/3.0.0/jedis-3.0.0.jar

配置tomcat

        <Context path="/myapp" docBase="/data/myapp" reloadble="">
            <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
                memcachedNodes="redis://192.168.10.11"
                sticky="false"
                sessionBackupAsync="false"
                lockingMode="uriPattern:/path1|/path2" 
                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
                transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
            />
        </Context>

查看日志

INFO [localhost-startStop-1] de.javakaffee.web.msm.MemcachedSessionService.startInternal --------
-  finished initialization:
- sticky: false
- operation timeout: 1000
- node ids: []
- failover node ids: []
- storage key prefix: null
- locking mode: uriPattern:/path1|/path2 (expiration: 5s)
--------

客户端访问



注意:这里redis仅支持一个节点,redis有主从功能和持久存储,主节点宕机,需要人为的介入切换

小结

下载jar包注意版本号,根据文档下载对应的版本号

https://blog.csdn.net/hsj1213522415/article/details/78035433
粘性 session 就是指,apache 服务器会把某个用户的请求,交给 tomcat 集群中的一个节点,以后此节点就负责该保存该用户的 session,如果此节点挂掉,那么该用户的 session 也会消失(单个活动节点)
非粘性 session:这种方式下,通过负载均衡器会根据节点的情况,把用户的请求进行分发,也就是会复制多份 session 分发给多个节点,这样,如果节点中其中一个 session 挂掉的话,其他的还能继续工作,也就是只要有一个节点没有挂掉,该用户的信息就不会消失(多个活动节点)

posted @ 2021-09-08 10:42  Final233  阅读(83)  评论(0编辑  收藏  举报