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.jsp与http://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共享的方案之一。

Tomcat11——Tomat集群相关推荐

  1. apache+jk+tomcat集群+session同步

    说明借前人之鉴写一篇关于tomcat集群及session同步的问题首先介绍tomcat集成及做集群的原因和必要性session同步的作用.然后包括各软件的安装配置. 原理tomcat 做个WEB服务器 ...

  2. Windows+Nginx+Tomcat搭建负载均衡和集群环境同时实现session共享(一)

    摘要:随着网站的访问量越来越多,所以就考虑给网站增加服务器了,现在比较流行的做法就是给网站做集群环境,下面我把我做的过程记录一下,方便日后查看,同时也希望可以帮助到有需要的朋友! 一:首先是环境: 1 ...

  3. Redis+Tomcat实现集群的Session管理

    Redis+Tomcat实现集群的Session管理 本地环境 JDK java version "1.8.0_102" Tomcat apache-tomcat-7.0.90 R ...

  4. Apache + Tomcat + JK 集群

    原文请见http://www.cnblogs.com/dennisit/p/3370220.html 本文介绍了集群和负载均衡的基本开源实现,实现了用Apache分发请求到多个Tomcat里面相应的应 ...

  5. 集群和均衡负载[摘]

    http://www.xxlinux.com/linux/article/network/app/20060921/4464.html 本文目的在于分析Jetspeed支持集群的现状.首先介绍了集群计 ...

  6. Apache+Tomcat+jk windows环境下的集群部署

    记一次在Windows服务器上搭建apatch+tomcat+jk的集群搭建过程,其中也遇到了很多问题,总结一下. 一.准备工作 1.apache-tomcat-7.0.88 2.Apche http ...

  7. 永洪Bi架构部署与集群部署

    永洪Bi架构部署与集群部署 ​ 永洪Bi是一款先进的数据技术与数据可视化的一站式大数据分析平台.他的优势在于:1.可靠的多数据源对接能力:2.丰富精致的数据图表样式:3.灵活高效的可视化探索式分析:4 ...

  8. Redis开发及集群

    Redis开发 中文网站:http://www.redis.net.cn/ 1.     Redis 简介 REmote DIctionaryServer(Redis) 是一个由Salvatore S ...

  9. 正式压力测试:locust进阶,超简单搭建生产级locust集群

    locust进阶,搭建生产级locust集群 本教程基于k8s集群搭建,使用helm作为包管理工具 通过helm安装locust

最新文章

  1. pjax 历史管理 jQuery.History.js
  2. “AI+”农业向农民致敬-丰收节交易会:谋定工业反哺农业
  3. 核心概念——节点/边/Combo——内置节点——Ellipse
  4. SAP UI5 的 TypeScript 实践
  5. 深入浅出 RPC - 浅出篇+深入篇
  6. 【渝粤题库】陕西师范大学210014幼儿园科学教育作业(高起专)
  7. 栈结构功能实现的伪码展示【数据结构F】
  8. Facebook面向所有用户开放人脸识别功能;福布斯美国最具创新力领袖公布;AMD:将发新BIOS 优化三代锐龙加速性能……...
  9. 富文本编辑器 java_HtmlBox富文本编辑器的使用
  10. nginx 1.8.0下载
  11. Python解离散数学
  12. 机器学习一【决策树】
  13. 真•扑克牌洗牌算法实现
  14. ❤️FFmpeg❤️ MP4格式文件,将MPEG4的编码方式转为H.264
  15. 小白刷LeeCode(算法篇)7
  16. 打爆一排气球arr,你能获得的最大分数是多少?
  17. Flutter Ticker类的用法
  18. mysql是大端小端_大端和小端 - HackerVirus - 博客园
  19. Msp430学习笔记—ADC12(一)
  20. 计算机毕业设计(附源码)python语言学习系统

热门文章

  1. iphone中怎么添加邮箱_如何在iPhone的Gmail中添加附件
  2. C++编译器优化:Copy Elision(省略不必要的拷贝)
  3. 云计算之路-阿里云上:在乌云中坚信蓝天
  4. 快速打开 控制面板下网络和 Internet下的网络连接
  5. 头部导航栏和底部 图片pic 字体图标设置文字大小
  6. 思科模拟器 Cisco Packet Tracer 8.2免登录以及汉化步骤
  7. 解决小米手机安装失败(-108)错误
  8. python列表两两组合_关于python:两个列表之间的组合?
  9. Android 包大小优化总结
  10. python生成10个随机密码_python题:随机密码生成。编写程序,在26个字母大小写和9个数字组成的列表中随机生成10个8位密码...