Tomcat11——Tomat集群

1. 引介

        由于单台的Tomcat的承载能力是有限的,当我们的业务系统用户量比较大,请求压力比较大的时候,单台的Tomcat是扛不住的,这个时候,就需要搭建tomcat集群,而目前比较流行的做法是通过Nginx来实现Tomcat集群的负载均衡。

2. 环境准备

2.1 准备tomcat

1. 在服务器上,安装两台tomcat

2. 然后分别改tomcat服务器的端口号:

打开tomcat/conf/server.xml

A)修改监听关闭服务器的指令端口号:8005——> 8015 ——> 8025

B)修改HTTP监听端口号:8080 ——> 8888 ——> 9999

C)修改tomcat与其他服务器进行交互的端口号:8009 ——> 8019 ——> 8029

2.2 安装配置Nginx

2.2.1 下载安装Ngnix

dohk

2.2.2 配置Nginx

在当前服务器上,安装Nginx,然后配置Nginx,修改nginx-1.8.1\conf\nginx.conf:

新增配置如下:

###  serverpool upstream负载均衡模块的名称
###  在serverpool中配置了两个tomcat的访问路径
###  当我们以localhost的99这个端口号来访问的时候,访问的是Nginx,
###  但是最终要访问的是我们配置好的两个tomcat 8888 和 9999 
###  通过serverpool来找,所以,在serverpool中应该配置这两个访问路径
upstream serverpool {
	server localhost:8888;
	server localhost:9999;
}

server {
            ##  当前虚拟主机监听的端口号
			listen 99;

            ##  访问的域名
			server_name localhost;
			
            ##  拦截的映射路径 为 / 即根目录
			location / {
                ## proxy_pass 反向代理配置  代理的路径是http://serverpool/
                ## serverpool指的是一个upstream的模块,所以需要在上面声明一个upstream模块
				proxy_pass  http://serverpool/;
			}
		}

如图:

2.3 修改tomcat配置信息

为了验证我们的配置是成功的,Nginx能实现负载均衡,我们需要修改tomcat服务器的欢迎页面

分别修改两台tomcat的ROOT项目的index.jsp的Home为Home-8888与Home-9999,如图:

2.4 启动tomcat

分别启动两台tomcat

2.5 启动Nginx

双击nginx.exe,弹出cmd控制台一闪而过,就启动成功,打开任务管理器,查看进程,可以看到启动成功,如图:

2.6 访问测试

首先分别访问两台tomcat,如图:

访问成功。

现在用Nginx访问,怎么访问了,我们刚才在Nginx中配置了一个虚拟主机,访问域名是localhost,监听端口号是99 ,所以直接用http://localhost:99/来访问,如图:

刷新一下,访问另一台服务器,如图:

由此可知,这里是均匀的将客户端浏览器的压力分摊给两台tomcat,这个是由Nginx负载均衡策略所决定的,这种策略称之为轮询。

3. 负载均衡策略

3.1 轮询

        最基本的配置方法,它是upstream模块默认的负载均衡策略,每个请求会按照访问时间顺序,逐一分配到不同的后端服务器。

upstream serverpool {
			server localhost:8888;
			server localhost:9999;
		}

参数说明:

参数描述
fail_timeout与max_fails结合使用
max_fails

设置在fail_timeout参数设置的时间内的最大失败次数,如果在这个时间内,所针对该服务器

的请求都失败了,那么该服务器会被认为是停机了

fail_time服务器会被认为停机的时间长度,默认为10s
backup

标记该服务器为备用服务器,当主服务器停止时,请求会被发送到备用机。

例如:server localhost:9999 backup;

down标记服务器永久停机了

3.2 权重weight

        权重方式,在轮询的基础上制定轮询的几率。

upstream serverpool {
			server localhost:8888 weight=3;
			server localhost:9999 weight=1;
		}

weight参数用于指定轮询几率,默认值为1,;weight的数值与访问比率成正比,比如:133服务器上的服务被访问的几率为137服务器的3倍。

此配置比较适用服务器的硬件配置差别比较大的情况。

权重配置好之后,可以使用命令:nginx.exe -s reload  重启Nginx例如:

3.3 ip_hash

        指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

upstream serverpool {
            ip_hash;
			server localhost:8888 weight=3;
			server localhost:9999 weight=1;
		}

4. Session共享方案

        在tomcat集群中,如果应用需要用户进行登录,那么这个时候,用于tomcat做了负载均衡,则用户登录并访问应用系统时,就会出现问题。

要解决以上问题,有以下几种方案

4.1 ip_hash 策略

        一个用户发起的请求,只会请求到tomcat1上进行操作,另一个用户发起的请求只在tomcat2上进行操作,那么这个时候,同一个用户发起的请求,都会通过Nginx的ip_hash策略,将请求转发到其中的一台tomcat上。

4.2 Session复制

        在工程中,制作session.jsp页面,分别将工程存放在两台tomcat的webapps/目录下:

4.2.1 测试工程准备

session.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
  <head>
    <title>hello</title>
  </head>
  <body>
      Tomcat-9999
  <br/>
  sessionId:<%= session.getId() %>
  <br/>
  <%
    Object loginUser = session.getAttribute("loginUser");
    if(loginUser != null && loginUser.toString().length() > 0 ){
      out.println("session有值,loginUser = " + loginUser);
    } else {
      session.setAttribute("loginUser","zoudm");
      out.println("session没有有值");
    }
  %>
  </body>
</html>

tomcat1和tomcat2上分别发布该工程:

4.2.2 访问

在浏览器分别输入http://localhost:8888/webTest/session.jsphttp://localhost:9999/webTest/session.jsp,如图:

可以看到sessionID值并不一致。说明这时候,两个工程的session还没实现共享,所以现在我们需要实现的是,当访问8888的时候,我们需要将8888服务器上的session信息同步到9999,当访问9999服务器的时候,要将session同步到8888,要想实现这个功能,我们需要依赖tomcat的一个配置。

4.2.3 tomcat集群的session共享配置

        打开tomcat官网关于集群的描述 http://tomcat.apache.org/tomcat-8.5-doc/cluster-howto.html ,通过其描述,可以知道我们要实现这个功能需要添加两个配置,一个是在server.xml中添加如下配置

一个是在当前工程web.xml中新增一个标签,如图:

开始配置:

tomcat/conf/server.xml

WEB-INF/web.xml

注意:两台服务器和两个工程都需要这样配置

然后重启两台服务器,重新访问

先访问9999,如图:

再访问8888,如图:

且两次访问的sessionId值是一样的。

注意:session复制这种解决方案只能在小型集群的web应用中使用,大型集群应用很少有这样用的。因为当服务器比较多的时候,做session复制会形成资源耗费,session复制是通过广播的形式来操作的,所以会造成带宽的极度耗费,所以最终会影响我们的性能。

4.3 SSO-单点登录

        单点登录(single sign on),简称SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,也是用来解决集群环境session共享的方案之一。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值