Tomcat之session解决方案(2)

memcached是一套分布式的快取系统,相关数据都是在内存里,一旦服务重启或者死机,则数据必然丢失;memcached是键值对存储形式;在以下试验中,每个session都会在这两台memcached上进行分布式存储,有了冗余性,即使一台出问题也不影响工作。同样只适用于中小型架构。

Tomcat之session解决方案

以下的配置两台Tomcat一样

[root@tnode1 ~]# yum -y install libevent memcached #安装memcached及其依赖 [root@tnode1 ~]# memcached -u root -m 512M -n 10 -f 2 -d -vvv -c 512 //-u:运行用户必须是root身份 //-m:指定使用物理机的多少内存 //-n:chunk size的最小空间是多少字节 //-f:chunk size大小增长的倍数默认1.25倍 //-d:在后台启动 //-vvv:显示详细信息 //-c:memcached服务的最大连接数 Tomcat连接memcached所依赖的库文件: javolution-5.5.1.jar memcached-session-manager-1.5.1.jar msm-kryo-serializer-1.6.4.jar kryo-1.03.jar memcached-session-manager-tc7-1.5.1.jar reflectasm-0.9.jar kryo-serializers-0.10.jar minlog-1.2.jar spymemcached-2.7.3.jar memcached-2.5.jar msm-javolution-serializer-1.5.1.jar 将这些文件放到/usr/local/tomcat7/lib/目录下 配置文件连接memcached。 [root@tnode2 ~]# vim /usr/local/tomcat7/conf/context.xml <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="memA:192.168.111.4:11211 memB:192.168.111.5:11211" requestUrilgnorePattern=".*\(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"/> [root@tnode2 ~]# /usr/local/tomcat7/bin/shutdown.sh [root@tnode2 ~]# /usr/local/tomcat7/bin/startup.sh #重启服务 测试页仍然使用以上的那个测试页 浏览器访问测试,可以看到sessionID不变 四、使用redis解决session问题

注意:尽量保持系统环境的纯净

如果使用如上做完memcached环境接着做redis 1.rpm -e memcached-1... 2.vim /usr/local/tomcat7/conf/context.xml 3.pkill -9 memcached 4.删除相关jar包 安装部署redis [root@tnode1 ~]# tar zxf redis-3.2.5.tar.gz [root@tnode1 ~]# yum -y install tcl #依赖包 [root@tnode1 src]# mkdir /usr/local/redis/{bin,etc,var} -pv [root@tnode1 src]# cp ~/redis-3.2.5/src/redis-benchmark redis-check-aof redis-cli redis-server /usr/local/redis/bin/ //redis-benchmark:读写性能测试工具 //redis-cli:redis命令行操作工具 //redis-server:redis服务的daemon启动程序 [root@tnode1 src]# cp ~/redis-3.2.5/redis.conf /usr/local/redis/etc/ //redis的主配置文件 [root@tnode1 src]# vim /usr/local/redis/etc/redis.conf 128 daemonize yes #表示将redis启动在后台 61 bind 0.0.0.0 #监听所有主机 [root@tnode1 src]# /usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf [root@tnode1 src]# netstat -anpt | grep redis tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 69432/redis-server #启动并且查看端口 Tomcat和redis连接需要用到如下包: commons-logging-1.1.3.jar jedis-2.5.2.jar tomcat-redis-session-manage-tomcat7.jar commons-pool2-2.2.jar tomcat-juli.jar [root@tnode1 ~]# vim /usr/local/tomcat7/conf/context.xml #连接redis配置 <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="192.168.111.4" port="6379" database="0" maxInactiveInterval="60" /> #Context字段中添加如上,IP为redis服务器的IP。 #如下可以先把node2上该lib目录删掉,直接复制覆盖 [root@tnode1 ~]# scp -r /usr/local/tomcat7/lib root@192.168.111.5:/usr/local/tomcat7/lib #如下是直接覆盖node2配置文件 [root@tnode1 ~]# scp /usr/local/tomcat7/conf/context.xml root@192.168.111.5:/usr/local/tomcat7/conf/ #然后node2上重启Tomcat服务,可多重启几遍顺便观察node1上的redis监视状态,并且时刻关注本机catalina.out日志变化是否异常。 #如下是正常情况下redis监视的状态输出 [root@tnode1 src]# /usr/local/redis/bin/redis-cli -p 6379 monitor 1556385116.932343 [0 192.168.111.4:37948] "EXPIRE" "DCF23D098140E899E20A996990F690D5" "1800" 1556385116.970109 [0 192.168.111.4:37948] "GET" "DCF23D098140E899E20A996990F690D5" 1556385116.972760 [0 192.168.111.4:37948] "EXPIRE" "DCF23D098140E899E20A996990F690D5" "1800" 1556385117.582753 [0 192.168.111.4:37948] "GET" "DCF23D098140E899E20A996990F690D5" 1556385117.584391 [0 192.168.111.4:37948] "EXPIRE" "DCF23D098140E899E20A996990F690D5" "1800" 1556385117.599639 [0 192.168.111.4:37948] "GET" "DCF23D098140E899E20A996990F690D5" 1556385117.600743 [0 192.168.111.4:37948] "EXPIRE" "DCF23D098140E899E20A996990F690D5" "1800" 1556385125.008432 [0 192.168.111.4:37948] "PING" 1556385155.006175 [0 192.168.111.4:37948] "PING" 1556386097.450914 [0 192.168.111.5:34118] "SETNX" "F7379EF99F21FD0BBF830056FEF162A0" "null" 1556386097.575639 [0 192.168.111.5:34118] "SET" "F7379EF99F21FD0BBF830056FEF162A0" "\xac\xed\x00\x05sr\x00Dcom.orangefunction.tomcat.redissessions.S essionSerializationMetadataB\xd9\xd9\xf7v\xa2\xdbL\x03\x00\x01[\x00\x15sessionAttributesHasht\x00\x02[Bxpw\x14\x00\x00\x00\x10\x1f\xa2\xa9o\x15\x7f\xe1W\x9c\x9c\xc6\xc2\xb0\xd5\xe2\xa8xsr\x00\x0ejava.lang.Long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x01J\x00\x05valuexr\x00\x10java.lang.Number\x86\xac\x95\x1d\x0b\x94\xe0\x8b\x02\x00\x00xp\x00\x00\x01j3\x83F\xddsq\x00~\x00\x03\x00\x00\x01j3\x83F\xddsr\x00\x11java.lang.Integer\x12\xe2\xa0\xa4\xf7\x81\x878\x02\x00\x01I\x00\x05valuexq\x00~\x00\x04\x00\x00\a\bsr\x00\x11java.lang.Boolean\xcd r\x80\xd5\x9c\xfa\xee\x02\x00\x01Z\x00\x05valuexp\x01q\x00~\x00\nsq\x00~\x00\x03\x00\x00\x01j3\x83F\xddt\x00 F7379EF99F21FD0BBF830056FEF162A0sq\x00~\x00\a\x00\x00\x00\x00w\b\x00\x00\x01j3\x83F\xdd"1556386097.577377 [0 192.168.111.5:34118] "EXPIRE" "F7379EF99F21FD0BBF830056FEF162A0" "1800" 1556386097.586858 [0 192.168.111.5:34118] "EXPIRE" "F7379EF99F21FD0BBF830056FEF162A0" "1800" 1556386099.395455 [0 192.168.111.5:34118] "GET" "F7379EF99F21FD0BBF830056FEF162A0" 1556386099.403983 [0 192.168.111.5:34118] "EXPIRE" "F7379EF99F21FD0BBF830056FEF162A0" "1800" 1556386099.410867 [0 192.168.111.5:34118] "GET" "F7379EF99F21FD0BBF830056FEF162A0" 1556386099.413166 [0 192.168.111.5:34118] "EXPIRE" "F7379EF99F21FD0BBF830056FEF162A0" "1800" 1556386099.855877 [0 192.168.111.5:34118] "GET" "F7379EF99F21FD0BBF830056FEF162A0" 1556386099.857305 [0 192.168.111.5:34118] "EXPIRE" "F7379EF99F21FD0BBF830056FEF162A0" "1800" 1556386100.497947 [0 192.168.111.5:34118] "GET" "F7379EF99F21FD0BBF830056FEF162A0" 客户端访问,是Nginx的地址来进行测试,正常时是sessionID不会变的 五、memcached和redis对比表 、内存利用率性能数据持久化其它
redis   键值对村存储利用率低于memcached,但使用hash结构存储则超过后者   只使用单核CPU,数据大小100K以下快于后者   支持数据持久化(保存到硬盘)   Redis 支持数据的备份,即 master-slave 模式的数据备份,支持多种数据结构的存储  
memcached   如上   可以使用多核,100K以上快于前者   自身不支持持久化,但可以结合其他数据库做架构如:memcached + bdb   两者性能都属于非常不错的,而且也都是开源免费。  

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/251de06860d2c058fcd639d33447dd0c.html