网站开发经理具备什么知识,大型电子商务网站建设方案,html怎么设置网页背景图片,网站后台如何上传文件探索Tomcat技术架构设计模式的奥秘 Tomcat集群原理Tomcat集群能带来什么Tomcat集群产生什么问题Tomcat 单服务体系架构Tomcat集群简单版首先要解决Session共享的问题典型负载均衡策略分析Session管理-Session Sticky粘滞会话#xff1a;Session管理-Session 复制S… 探索Tomcat技术架构设计模式的奥秘 Tomcat集群原理Tomcat集群能带来什么Tomcat集群产生什么问题Tomcat 单服务体系架构Tomcat集群简单版首先要解决Session共享的问题典型负载均衡策略分析Session管理-Session Sticky粘滞会话Session管理-Session 复制Session管理-基于CookieSession管理-Session 服务器 Tomcat单机部署多应用设置tomcat的环境变量设置tomcat的环境变量在profile文件里新增强制保存退出执行刷新环境变量 配置nginx修改hostnginx负载均衡策略主要分一下四种1)、轮询默认每个请求按时间顺序逐一分配到不同的后端服务器如果后端服务器宕机能自动剔除。2)、ip_hash 每个请求按访问ip的hash结果分配这样每个访客固定访问一个后端服务器。3)、fair 按后端服务器的响应时间来分配请求响应时间短的优先分配。4)、url_hash 按访问url的hash结果来分配请求使每个url定向到同一个后端服务器后端服务器为缓存时比较有效。 1利用tomcat自带的组播机制实现session复制。2利用第三方机制存储session。 Tomcat集群原理
通过Nginx负载均衡进行请求转发
Tomcat集群能带来什么
提高服务的性能, 并发能力, 以及高可用性提供项目架构的横向扩展能力
Tomcat集群产生什么问题
Session登录信息存储以及读取的问题服务器定时任务并发的问题
Tomcat 单服务体系架构
在这个架构图中一层Nginx首先Nginx主要职责给Tomcat一层反向代理。
此外Nginx还可以FTPServer指定的目录再做一层目录转发保证上传上去的图片实时可以通过http协议访问到。单服务架构先不用考虑集群碰到的各种问题
Tomcat集群简单版 比如我们的登录的时候登录了A服务器session信息存储到A服务器上了假设我们使用的负载均衡策略是ip hash那么登录信息还可以从A服务器上访问但是这个有可能造成某些服务器压力过大某些服务器又没有什么压力这个时候压力过大的机器(包括网卡带宽)有可能成为瓶颈并且请求不够分散。
首先要解决Session共享的问题
这时候我们使用轮询或者最小连接负载均衡策略就导致了第一次访问A服务器第二次可能访问到B服务器这个时候存储在A服务器上的session信息在B服务器上读取不到。
典型负载均衡策略分析
打个比方我们有轮询权重地址散列地址散列又分为原ip地址散列hash目标ip地址散列hash最少连接加权最少连接还有继续升级的很多种策略
轮询优点实现简单缺点不考虑每台服务器处理能力权重优点考虑了服务器处理能力的不同地址散列优点能实现同一个用户访问同一个服务器最少连接优点使集群中各个服务器负载更加均匀加权最少连接在最少连接的基础上为每台服务器加上权值。算法为(活动连接数*256非活动连接数)/权重计算出来的值小的服务器优先被选择。
Session管理-Session Sticky粘滞会话
对于同一个连接中的数据包负载均衡会将其转发至后端固定的服务器进行处理。
解决了我们session共享的问题但是它有什么缺点呢
一台服务器运行的服务挂掉或者重启上面的 session 都没了负载均衡器成了有状态的机器为以后实现容灾造成了羁绊
Session管理-Session 复制
就是每一个Tomcat都存储我们的Session不同的tomcat之间进行拷贝复制。
解决了我们session共享的问题但是它有什么缺点呢
应用服务器间带宽问题因为需要不断同步session数据大量用户在线时服务器占用内存过多
Session管理-基于Cookie
主要用于我们将session会话如同token一般存储在我们的前端
解决了我们session共享的问题但是它有什么缺点呢
cookie 的长度限制cookie存于浏览器安全性是一个问题
Session管理-Session 服务器
就是通过一个专门管理session会话的管理器服务进行集中化存储和管理session
解决了我们session共享的问题这种方案需要思考哪些问题呢保证 session 服务器的可用性session服务器单点如何解决
我们在写应用时需要做调整存储session的业务逻辑打个比方我们为了提高session server的可用性可以继续给session server做集群
Tomcat单机部署多应用 解压2个tomcat, 分别命名为tomcatA和tomcatB 分别设置2个tomcat的URIEncoding, 将tomcat的conf/server.xml里的port修改为两个不同端口。 设置tomcat的环境变量
tomcatA的环境变量和以往一样, 不做改变
设置tomcat的环境变量
sudo vim /ect/profile
在profile文件里新增
export CATALINA_BASE/Users/tomcat/apache-tomcat-9.0.21
export CATALINA_HOME/Users/tomcat/apache-tomcat-9.0.21
export TOMCAT_HOME/Users/tomcat/apache-tomcat-9.0.21export CATALINA_2_BASE/Users/tomcat/tomcat2
export CATALINA_2_HOME/Users/tomcat/tomcat2
export TOMCAT_2_HOME/Users/tomcat/tomcat2强制保存退出
继续配置tomcatB下的catalina.sh里的内容,
cd tomcat目录在# OS specific support. $var must be set to either true or false.下加入。
sudo vi catalina.sh
export CATALINA_BASE$CATALINA_2_BASE
export CATALINA_HOME$CATALINA_2_HOME执行刷新环境变量
source /etc/profile
使环境变量生效, 执行
echo $CATALINA_2_BASE
如果有输出, 即环境变量已经生效
/Users/tomcat/tomcat2
分别进入两个tomcat下的bin目录启动tomcat, 正常即可
配置nginx
修改host
sudo vim /etc/hosts
所谓tomcat集群就是可以向外提供并行服务的多台机器任何一台服务器宕机其它服务器可以替代它向外提供服务而不影响用户访问。
nginx是一个常用的反向代理服务可自定义模块实现请求转发及负载均衡根具体采用策略有关。为了tomcat集群的高可用性还需要实现nginx的双机热备。
一如果仅是对外提供一个页面访问不用区分单一用户不区分每个访问session不涉及用户权限用户资料等内容仅仅配置nginx负载均衡策略即可。
nginx负载均衡策略主要分一下四种
1)、轮询默认每个请求按时间顺序逐一分配到不同的后端服务器如果后端服务器宕机能自动剔除。
2)、ip_hash 每个请求按访问ip的hash结果分配这样每个访客固定访问一个后端服务器。
3)、fair 按后端服务器的响应时间来分配请求响应时间短的优先分配。
4)、url_hash 按访问url的hash结果来分配请求使每个url定向到同一个后端服务器后端服务器为缓存时比较有效。
二如果涉及到用户session做一些鉴权缓存、存放临时信息时就必须做tomcat的session共享。
目前可参考到的session共享方式主要分为两种。
1利用tomcat自带的组播机制实现session复制。
对tomcat及应用的若干配置文件进行配置即可实现网上有很多资料可参考。但这种方式些弊端看过一些资料不建议用session复制的方式。在实际使用过程中也发现有存在session莫名失踪的现象。
2利用第三方机制存储session。
比较常见的是tomcat集成memcached服务器来存储session。实际项目中我们采用过利用redis实现session存储redis高效的存取性能为高效的访问提供了保障但是目前redis的集群功能似乎没有发布如何解决redis的单点故障需要研究。
小结是否实现session共享与nginx的负载策略有很大关系。比如采用轮询策略就必须实现session共享因为客户端会访问到每台服务器而如果采用ip_hash策略就可以不用考虑session共享的问题了但是ip_hash有些缺陷使它不能随便使用如多台pc使用同一个外网ip。
最近发现一个nginx的粘连模块类似session粘连可以看做nginx的第5种均衡策略。它利用客户端cookie对其写入一个route参数每次访问可以根据route的值固定的访问一台服务器解决的session共享的问题。