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 挂掉的话,其他的还能继续工作,也就是只要有一个节点没有挂掉,该用户的信息就不会消失(多个活动节点)