tomcat多实例与集群
先说tomcat多实例,
- 这个很简单,就简单说一下,一台web服务器上部署好一次tomcat做好了优化以后,可以当作模板及,进行打包压缩,保存好,当需要添加多台tomcat时,压缩包直接进行解压后修改三个默认端口后就可以在负载均衡上进行配置,使用了,注意的就是要分别启动和检查端口与进程。
tomcat集群
- 由于单台Tomcat的承载能力是有限的,当我们的业务系统用户量比较大,请求压力比较大时,单台Tomcat是扛不住的,这个时候,就需要搭建Tomcat的集群,而目前比较流行的做法就是通过Nginx来实现Tomcat集群的负载均衡
实例:
- 准备Tomcat
- 在服务器上, 安装两台tomcat, 然后分别改Tomcat服务器的端口号 :
- 8005 ‐‐‐‐‐‐‐‐‐> 8015 ‐‐‐‐‐‐‐‐‐> 8025
- 8080 ‐‐‐‐‐‐‐‐‐> 8888 ‐‐‐‐‐‐‐‐‐> 9999
- 8009 ‐‐‐‐‐‐‐‐‐> 8019 ‐‐‐‐‐‐‐‐‐> 8029
- 配置*/Nginx/conf.d/xx.conf
upstream serverpool{ server 172.16.1.7:8888; server 172.16.1.8:9999; } server { listen 80; server_name www.hebbao.com; location / { proxy_pass http://serverpool/; } }
这里nginx负载均衡就不详细写了,负载的详细没有写,这里大概有个样子,后面会专门写nginx相关的
Session共享问题
- 在web服务器集群中有一个问题,如果有两台web服务器,用户在其中一台服务器上注册了个人信息进行,另一台服务器上未注册,这样就存在一个问题,其中一台服务器会向用户发送一个cookie,按照轮询,下一次用户访问另一台服务器,用户拿着cookie去寻找对应的session,找不到
解决方法:
- 方法一:ip_hash 策略(nginx算法实例,在写nignx的时候写)
- 一个用户发起的请求,只会请求到tomcat1上进行操作,另一个用户发起的请求只在tomcat2上进行操作 。那么这个时候,同一个用户发起的请求,都会通过nginx的ip_hash策略,将请求转发到其中的一台Tomcat上。
- 方法二:Session复制
- java写一个jsp文件,打包成war分别将工程存放在两台 tomcat 的webapps/ 目录下,然后重启tomcat
- 通过游览器访问war包解压后的x.jsp文件后,你就会发现两台服务的JSESSIONID不一样,说明session没有完成共享
- 解决方法:
- 一:在server.xml里<Engine下<Cluster标签放开一句话
- 每台tomcat上都要改
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<Engine name="Catalina" defaultHost="localhost"> <!--For clustering, please take a look at documentation at: /docs/cluster-howto.html (simple how to) /docs/config/cluster.html (reference documentation) --> <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
- 二:在应用程序WEB-INF/web.xml中添加到最下方
- 每台tomcat都添加
<distributable/>
- 三:检查完毕后,再次重启tomcat
注意:
- 上述方法二,适用于较小的集群环境(节点数不超过4个),如果集群的节点数比较多的话,通过这种广播的形式来完成Session的复制,会消耗大量的网络带宽,影响服务的性能。网络带宽资源耗费,基本不用
- 方法三:SSO-单点登录(这个要开发写)
- 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,也是用来解决集群环境Session共享的方案之一 。
当用户访问负载均衡的时候,负载均衡通过TCP连接后端的web服务器,如果用户请求的是身份认证,web服务器则先会把请求交给认证服务进行认证,然后再去redis缓存中查找session
继续阅读

我的微信
这是我的微信扫一扫
评论