• 售前

  • 售后

热门帖子
入门百科

redission-tomcat快速实现从单机部署到多机部署详解

[复制链接]
Holily1985 显示全部楼层 发表于 2021-10-26 13:49:06 |阅读模式 打印 上一主题 下一主题
媒介
一些项目初期出于简朴快速,都是做单机开辟与部署,但是随着业务的扩展或对可用性要求的进步,单机情况已不满足需求。单机部署往多机部署切换,此中可能存在的一个重要环节就是session的共享(如果一开始就是基于token的认证则可忽略)。本文介绍一个基于redis的tomcat session管理开源项目:redission-tomcat,可无代码侵入式地快速实现session共享。
简介

redisson是与jedis雷同的一个redis客户端,其功能比jedis要更丰富一些。redission-tomcat是一个基于redis的tomcat session管理器项目,项目地点。相比于别的实现,该项目的存储更为高效,写操作也更为优化。每一个session参数是在调用HttpSession.setAttribute时写入redis的,别的方案却一样平常是每次都将整个session进行序列化后写入。
使用

1.将redisson-all-3.11.0.jar,redisson-tomcat-8-3.11.0.jar(针对tomcat8,别的版本可在上述项目地点页面找到下载链接)两个jar包下载放到tomcat的lib目录下。
2.在tomcat conf目录下的context.xml文件中添加如下配置
  1. <Manager className="org.redisson.tomcat.RedissonSessionManager"
  2. configPath="${catalina.base}/conf/redisson.conf"
  3. readMode="MEMORY" updateMode="AFTER_REQUEST" broadcastSessionEvents="false"/>
复制代码
此中
      
  • configPath:指向Redisson的json或yaml格式的配置文件,第3步中给出。  
  • readMode:session属性的读取模式。可取值 1. MEMORY, 该模式会将session属性同时生存到本地tomcat session与redis中,后续的session更新通过redis事故传播到本地tomcat session;2. REDIS,只将session属性生存到redis中。默以为REDIS。  
  • updateMode:session属性的更新模式。可取值 1. DEFAULT,session属性只通过setAttribute方法生存到redis中;2. AFTER_REQUEST,在每次哀求之后,将全部session属性生存至redis。默以为DEFAULT。  
  • broadcastSessionEvents:如果设置为true,则sessionCreated与sessionDestroyed事故将会被广播到全部tomcat实例,并使全部注册的HttpSessionListeners监听器被触发。默以为false。
3.在tomcat conf目录下新增配置文件redisson.conf,内容如下
  1. {
  2. "singleServerConfig":{
  3. "idleConnectionTimeout":10000,
  4. "connectTimeout":10000,
  5. "timeout":3000,
  6. "retryAttempts":3,
  7. "retryInterval":1500,
  8. "password":"123456",
  9. "subscriptionsPerConnection":5,
  10. "clientName":null,
  11. "address": "redis://127.0.0.1:6379",
  12. "subscriptionConnectionMinimumIdleSize":1,
  13. "subscriptionConnectionPoolSize":50,
  14. "connectionMinimumIdleSize":24,
  15. "connectionPoolSize":64,
  16. "database":0,
  17. "dnsMonitoringInterval":5000
  18. },
  19. "threads":16,
  20. "nettyThreads":32,
  21. "codec":{
  22. "class":"org.redisson.codec.FstCodec"
  23. },
  24. "transportMode":"NIO"
  25. }
复制代码
以上为单机模式redis情况配置,此中password,address修改为自己的值。如果是集群模式,则配置文件为
  1. {
  2. "sentinelServersConfig":{
  3. "idleConnectionTimeout":10000,
  4. "connectTimeout":10000,
  5. "timeout":3000,
  6. "retryAttempts":3,
  7. "retryInterval":1500,
  8. "failedSlaveReconnectionInterval":3000,
  9. "failedSlaveCheckInterval":60000,
  10. "password":null,
  11. "subscriptionsPerConnection":5,
  12. "clientName":null,
  13. "loadBalancer":{
  14. "class":"org.redisson.connection.balancer.RoundRobinLoadBalancer"
  15. },
  16. "subscriptionConnectionMinimumIdleSize":1,
  17. "subscriptionConnectionPoolSize":50,
  18. "slaveConnectionMinimumIdleSize":24,
  19. "slaveConnectionPoolSize":64,
  20. "masterConnectionMinimumIdleSize":24,
  21. "masterConnectionPoolSize":64,
  22. "readMode":"SLAVE",
  23. "subscriptionMode":"SLAVE",
  24. "sentinelAddresses":[
  25. "redis://127.0.0.1:26379",
  26. "redis://127.0.0.1:26389"
  27. ],
  28. "masterName":"mymaster",
  29. "database":0
  30. },
  31. "threads":16,
  32. "nettyThreads":32,
  33. "codec":{
  34. "class":"org.redisson.codec.FstCodec"
  35. },
  36. "transportMode":"NIO"
  37. }
复制代码
我们可以使用nginx来实现负载均衡,参考配置
  1. upstream cnserver{
  2. server 127.0.0.1:8080 weight=2 fail_timeout=10s max_fails=1;
  3. server 127.0.0.1:8081 weight=2 fail_timeout=10s max_fails=1;
  4. }
  5. server {
  6. listen 80;
  7. server_name localhost;
  8. index index.html index.htm;
  9. location /rest/ {
  10. index index.html;
  11. proxy_pass http://cnserver/rest/;
  12. }
  13. }
复制代码
以上即为使用redisson-tomcat来实现单机部署到多机部署的全部配置。
总结

技术架构都是随着业务的发展而不停演进。在业务发展初期,用户量、业务复杂度都相对较低,为了实现快速上线验证,往往采取简朴单一的架构。很多项目可能还没来得及进行架构演进升级就GG了,而有幸继续成长的项目必然会随着业务的扩张不停优化与升级。
本文介绍的redisson-tomcat可帮助单机项目快速切换到多机支持,当然只是在session管理环节。如果涉及到别的如文件上传,定时任务平分布式支持,则要另做相应调解了。
以上就是本文的全部内容,渴望对各人的学习有所帮助,也渴望各人多多支持脚本之家。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作