Tomcat集群

问题:

1.tomcat集群能带来什么?

1).提高服务的性能(一般采用一台机器部署一个tomcat,如果一台机器部署多个tomcat,它们有共享瓶颈,它们要共享网卡、内存、I/O等),并发能力(一台tomcat的http线程池是有限的,根据机器的性能,如果是两台,则能承载的http线程就是两倍),以及高可用性(nginx下面如果有多台tomcat,当其中一台tomcat出故障了,可以把这个结点从nginx负载均衡tomcat集群的配置中去掉,nginx还可以达到tomcat其他可用的服务器上)

2).提供项目架构的横向扩展能力(如果我有一台服务器,通过不断升级内存、CPU,这是纵向提高性能。比如在双11时,只需根据历史评估添加tomcat横向结点即可)

2.tomcat集群实现原理

通过nginx负载均衡进行请求转发。

3.tomcat集群新旧架构对比解析

一期架构:

“想当然”二期架构:

例如:user1登录信息存在第一台tomcat的session中,user1要生成订单,通过Nginx可能请求到了第二台tomcat,这时发现没有登录信息,会请求用户再次登录。也就是出现了session无法共享的问题。

4.tomcat集群带来了什么新问题?

1).session登录信息存储及读取的问题

解决办法:采用nginx ip hash policy(即,根据请求的ip,对ip进行hash取模后分配到指定的服务器,那么这个ip发过来的请求都会发送到这台服务器上。优点:可以不改变现有技术架构,直接实现横向扩展。缺点:1.导致服务器请求(负载)不平均(完全依赖ip hash的结果)。例如,有两个用户,ip hash后都请求到第一台tomcat上,如果只有两个用户,两个tomcat,这样第二台tomcat就处于空闲状态。2.在IP变化的环境下无法服务。如果ip变化,有可能hash到不同的tomcat上,影响正常服务。)(这种办法在实操中基本不使用)

2).服务器定时任务并发的问题(比如定时关单)

二期架构:

所有服务器的session登录信息,都缓存在分布式的redis中。进而可以做单点登录,利用分布式redis,来做一个分布式锁,解决tomcat A,B,C在同一时间点启动定时任务的问题。如果不做分布式锁,会造成CPU、内存的资源浪费,因为在同一时间点只需要一台机器启动定时任务即可,其他机器不需要启动,并且随便一台都行。

5.单机部署多应用(一台服务器开启多个tomcat实例)/多机部署多应用(假设有A,B,C三台服务器,在这三台服务器上分别装有tomcat,然后把这三个做成一个集群)

6.nginx负载均衡配置、策略、场景及特点

1)轮询(默认)

优点:实现简单。

缺点:不考虑每台服务器处理能力。

upstream www.mall.com {
    server www.mall.com:8080;
    server www.mall.com:9080;
}

2)权重(实际最常使用,默认是1)

优点:考虑了每台服务器处理能力的不同。

upstream www.mall.com {
    server www.mall.com:8080 weight = 15;
    server www.mall.com:9080 weight = 10;
}

3)ip hash

优点:能实现同一个用户访问同一个服务器,就不会出现单点登录问题。

缺点:根据ip hash不一定平均。

upstream www.mall.com {
    ip_hash;
    server www.mall.com:8080;
    server www.mall.com:9080;
}

4)url hash(第三方)

优点:能实现同一个服务访问同一个服务器。

缺点:根据url hash分配请求会不平均,请求频繁的url会请求到同一个服务器上。

upstream www.mall.com {
    server www.mall.com:8080;
    server www.mall.com:9080;
    hash $request_uri;
}

5)fair(第三方)

优点:按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream www.mall.com {
    server www.mall.com:8080;
    server www.mall.com:9080;
    fair;
}

7.nginx+tomcat搭建集群

8.tomcat集群验证

原文地址:https://www.cnblogs.com/cing/p/8576684.html