Linux--部署 Tomcat 及其负载均衡
1.案例前置知识点
1)Tomcat简介
名称由来:Tomcat最初是由 Sun的软件构架师詹姆斯·邓肯·戴维森开发的。后来他帮助将其变 为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目O'Reilly都会出一本相关的 书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动物的名字命名。因为他希 望这种动物能够自己照顾自己,最终,他将其命名为Tomcat(公猫)。而O1Reilly 出版的介绍Tomcat的书籍的封面也被设计成了一个公猫的形象。而Tomcat的Logo兼吉祥物也被设计成了一只公猫。
其实Tomcat最早在开始研发的时候并不叫这个名字,早期Tomcat项目的名字叫Cataline,所以 当我们安装完Tomcat 后会发现安装路径下面有很多和Catalina有关的目录和文件,而这些文件通常也是我们使用或者配置Tomcat的重要文件。
2)应用场景
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小 型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说, Tomcat 虽然和Apache 或者Nginx这些Web服务器一样,具有处理HTM_页面的功能,然而由于其处 理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端,如图5.1所示。

3.案例环境
本案例环境,如下所示。
主机 操作系统 IP地址 主要软件
Tomcat 服务器 apache-tomcat-8.5.16.tar.gz 192.168.184.101 CentOS 7.3 x86_64
5.1.2案例实施
1.实施准备
(1)关闭 firewalld防火墙。
[root@node01 ~]# systemctl stop firewalld
(2)在安装Tomcat之前必须先安装JDK.JDK的全称是Java Development Kit,是Sun公司免费提供的Java语言的软件开发工具包,其中包含Java虚拟机(JVM)。编写好的Java源程序经过编译 可形成Java字节码,只要安装了JDK,就可以利用JVM解释这些字节码文件,从而保证了Java的跨平台性。
在平台兼容性方面,JDK作为解释字节码文件并据此调用操作系统APl实现对应功能的 Java 虚 拟机,与操作系统类型和平台位数密切相关,因此存在不同类型的版本,而Tomcat 也具有上述特征. 默认情况下JDK已经安装,所以需要预先下载Tomcat,本章中所使用的Tomcat软件的源码包为 apache–tomcat–8.5.16. tar.gz。
2.查看JDK是否安装
运行java -versicn命令查看Java是否安装,如果没有安装需要自行下载安装。
[root@node01 ~]# java -version

3.安装配置Tomcat
(1)解压apache-tomcat-8.5.16.tar.gz包。
[root@node01 ~]# ftp 172.16.37.13ftp> cd 软件下载/y2/y2cftp> lsftp> get apache-tomcat-8.5.16.tar.gz
ftp> get nginx-1.12.0.tar.gzftp> exit[root@node01 ~]# tar zxf apache-tomcat-8.5.16.tar.gz
[root@node01 ~]# ls


(2)解压后生成apache-tomcat-8.5.16文件夹,将该文件夹移动到/usr/local/下,并改名为 tomcat7。
[root@node01 ~]# mv apache-tomcat-8.5.16 /usr/local/tomcat8
(3) 启动tomcat。
[root@node01 ~]# /usr/local/tomcat8/bin/startup.sh

Tomcat默认运行在8080端口,运行netstat命令查看8080端口监听的信息。
[root@node01 ~]# netstat -anpt | grep 8080

(4)打开浏览器访问测试:http://192.168.184.101:8080/,如果出现如图中所示的界面,则表示Tomcat 已经启动成功。

如果想关闭Tomcat,则运行/usr/local/tomcat8/bin/shutdown.sh命令。
4.Tomcat 配置相关说明
Tormcat的主目录为/usr/local/tomcat8/。
[root@node01 ~]# cd /usr/local/tomcat8/
[root@node01 tomcat8]# ll

(1)主要目录说明。
I--—bin/:存放Windows或Linux平台上启动和关闭 Tomcat 的脚本文件。
|一--conf/:存放Tomcat服务器的各种全局配置文件,其中最重要的是 server.xml 和 web.xml。
I---lib/:存放Tomcat运行需要的库文件(JARS)。
I---logs:存放Tomcat 执行时的LOG文件。
|---webapps:Tomcat 的主要Web发布目录(包括应用程序示例)。
|---work:存放JSP编译后产生的 class 文件。
(2)配置文件说明。
[root@node01 tomcat8]# ll conf/

catalina.policy:权限控制配置文件。
catalina.properties:Tomcat属性配置文件。
context.xml:上下文配置文件。
logging.properties:日志log相关配置文件。
server.xml:主配置文件。
tomcat-users.xml:manager-gui管理用户配置文件(Tomcat安装后提供一个manager-gui的管理 界面,通过配置该文件可以开启访问)。
web.xml:Tomcat的servlet、servlet-mapping、filter、MIME等相关配置。
7. 建立 java 的 Web 站点
(1)在根目录下建立一个web 目录,并在里面建立一个webapp1目录,用于存放网站文件。
[root@node01 ~]# mkdir -pv /web/webapp1

(2)在webapp1目录下建立一个index.jsp的测试页面。
[root@node01 ~]# vim /web/webapp1/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head><title>JSP test1 page</title></head><boby><% out.println("Welcom to test site,http//www.test1.com");%></body>
</html>[root@node01 ~]# more /web/webapp1/index.jsp


(3)修改Tomcat的server.xml文件。
定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webapp1,在host段增加context段。
[root@node01 ~]# vim /usr/local/tomcat8/conf/server.xml <Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/web/webapp1" path="" reloadable="false" ></Context> //docBase:web应用的文档基准目录//reloadable设置监视"类"是否变化//path=""设置默认"类"

(4)关闭Tomcat,再重新启动。
[root@node01 ~]# /usr/local/tomcat8/bin/shutdown.sh [root@node01 ~]# /usr/local/tomcat8/bin/startup.sh

(5)通过浏览器访问http://192.168.184.101:8080/,出现如图中所示的页面,说明该Tomcat 站点已经配置成功,并且已经能够运行JSP了。

5.2 案例:Nginx+Tomcat 负载均衡群集
5.2.1案例分析
1.案例概述
通常情况下,一台Tomcat站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等问 题,不能单独应用于生产环境下,所以我们需要一套更可靠的解决方案来完善Web站点架构。 Nginx是一款非常优秀的http服务器软件,它能够支持高达50000个并发连接数的响应,拥有强 大的静态资源处理能力,运行稳定,并且内存、CPU等系统资源消耗非常低.目前很多大型网站都 应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,来提升整个站点的负载并发能力。
本案例我们将讲解以Nginx作为负载均衡器,Tomcat作为应用服务器的负载群集的设置方法。 网站拓扑架构如图5.4所示。

2.案例环境 本案例环境如下所示。
表5-2案例环境
操作系统 主机 IP地址 主要软件
Nginx服务器 CentOS 7.3 x86_64 192.168.184.200 nginx-1.12.0.tar.gz
Tomcat 服务器1 CentOS 7.3 x86_64 192.168.184.101:8080 apache-tomcat-8.5.16.tar.gz
Tomcat 服务器2 CentOS 7.3 x86_64 192.168.184.10:8080 apache-tomcat-8.5.16.tar.gz
5.2.2案例实施
1.Tomcat2 server 配置 Tomcat2 server配置方法基本同Tomcat1,其中包括:
(1)关闭防火墙。
(2)确认是否安装JDK,JAVA版本与Tomcat1 server保持一致。
(3)安装配置Tomcat,版本与Tomcat1 server保持一致。
(4)创建/web/webapp1目录,修改Tomcat配置文件 server.xml,将网站文件目录更改到 /web/webapp1/路径下。
(5)在/web/webapp1/路径下建立index.jsp,为了区别将测试页面index.jsp的内容更改如下。
[root@node02 ~]# vim /web/webapp1/index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head><title>JSP test2 page</title></head><boby><% out.println("Welcom to test site,http//www.test2.com");%></body>
</html>

(6)启动Tomcat,浏览器访问Tomcat2 server,测试http://192.168.184.10:8080/。

2. Nginx服务器配置
在Nginx服务器192.168.184.200上安装Nginx,反向代理两个Tomcat站点,并实现负载均衡。
(1)关闭防火墙。
(2)安装相关软件包。
[root@node03 ~]# cd /etc/yum.repos.d/[root@node03 yum.repos.d]# lsCentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo[root@node03 yum.repos.d]# mv * /opt/
[root@node03 yum.repos.d]# ls
[root@node03 yum.repos.d]# vim local.repo
[root@node03 yum.repos.d]# cd[root@node03 ~]# mount /dev/cdrom /mnt/mount: /dev/sr0 写保护,将以只读方式挂载[root@node03 ~]# yum -y install pcre-devel zlib-devel openssl-devel
[root@node03 ~]# yum -y install ftp.x86_64


(3)解压并安装Nginx。
[root@node03 ~]# groupadd www
[root@node03 ~]# useradd -g www www -s /bin/false
root@node03 ~]# tar zxf nginx-1.12.0.tar.gz
[root@node03 ~]# cd nginx-1.12.0/
[root@node03 nginx-1.12.0]# ./configure --prefix=/usr/local/nginx --user=www --group=www --with-file-aio --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module//--user=,--group= 指定运行的用户和组
//--with-file-aio 启用文件修改支持
//--with-http_stub_status_module 启用状态统计
//--with-http_gzip_static_module 启用gzip静态压缩
//--with-http_flv_module 启用f1v模块,提供寻求内存使用基于时间的偏移量文件
//--with-http_ssl_module 启用SSL模块[root@node03 nginx-1.12.0]# make
[root@node03 nginx-1.12.0]# make install
(4)配置nginx.conf。
① 在 http {…} 中加入以下代码,设定负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大。为了使测试效果比较明显,我们把权重设置为一样。
[root@node03 ~]# vim /usr/local/nginx/conf/nginx.confupstream tomcat_server {server 192.168.184.101:8080 weight=1;server 192.168.184.10:8080 weight=1;}

② 在 http {…} - server {…} - location / {…} 中加入一行 “proxy_pass http://tomcat_server;"。
location / {root html;index index.html index.htm;proxy_pass http://tomcat_server;}

③ 把Nginx的默认站点通过proxy_pass方法代理到了设定好的tomcat_server 负载均衡服务器组上。配置完成的nginx.conf 文件内容如下。


(5)测试Nginx配置文件是否正确。
[root@node03 ~]# /usr/local/nginx/sbin/nginx -t

(6)启动Nginx服务。
[root@node03 ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

(7)查看Nginx服务进程。
[root@node03 ~]# ps aux | grep nginx

(8)查看端口号及PID进程号。
[root@node03 ~]# netstat -anpt | grep nginx

3.测试负载均衡效果
(1)打开浏览器访问:http://192.168.184.200/。
(2)不断刷新浏览器测试,可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现test1的测试页面,如图5.5所示。刷新后,第二次访问,出现test2的测试页面,如图5.6所示,这说明负载均衡群集搭建成功,已经可以在两个Tomcat server站点进行切换了。
图5.5 test1的测试页面

图5.6 test2的测试页面

相关文章:
Linux--部署 Tomcat 及其负载均衡
1.案例前置知识点 1)Tomcat简介 名称由来:Tomcat最初是由 Sun的软件构架师詹姆斯邓肯戴维森开发的。后来他帮助将其变 为开源项目,并由Sun贡献给Apache软件基金会。由于大部分开源项目OReilly都会出一本相关的 书,并且将其封面设…...
影像组学介绍
影像组学介绍 1 影像组学介绍2 具体提取影像组学方法流程及工具代码:2.1 影像数据获取2.2 感兴趣区域分割2.3 特征提取与降维选择2.3.1 特征提取:2.3.2 特征降维(特征选择) 2.4 建模分析:2.5 结果分析 参考: 1 影像组学介绍 其实…...
什么是云服务器?云服务器的工作原理是介绍
阿里云服务器ECS英文全程Elastic Compute Service,云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云百科aliyunbai…...
【前后端的那些事】前后端环境搭建+树形结构表格实现
文章目录 1. 前后端项目环境搭建2. table-tree2.1 后端准备2.2 前端准备 前言:最近写项目,发现了一些很有意思的功能,想写文章,录视频把这些内容记录下。但这些功能太零碎,如果为每个功能都单独搭建一个项目࿰…...
PHP版学校教务管理系统源码带文字安装教程
PHP版学校教务管理系统源码带文字安装教程 运行环境 服务器宝塔面板 PHP 7.0 Mysql 5.5及以上版本 Linux Centos7以上 系统介绍: 后台权限控制:支持多个管理员,学生管理,学生成绩,教师管理,文章管理&#x…...
前端背景收集之烟花背景
文章目录 🐒个人主页🏅Vue项目常用组件模板仓库📖前言:🎀源码如下: 🐒个人主页 🏅Vue项目常用组件模板仓库 📖前言: 本篇博客主要提供前端背景收集之烟花背景…...
PCL 格网法计算点云的占地面积
目录 一、算法原理二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT生成的文章。 一、算法原理 该方法主要用于粗略统计机载点云的占地面积。方法原理是将点云沿 X O Y XOY...
《设计模式的艺术》笔记 - 面向对象设计原则
1、单一职责原则 一个类只负责单一功能领域中的相应职责。 2、开闭原则 一个软件实体应当对扩展开放,对修改关闭。即软件实体应当尽量在不修改原有代码的情况下进行扩展。 3、里氏代换原则 所有引用基类的地方必须能透明地使用其子类的对象。即在软件中将一个基类…...
《Linux C编程实战》笔记:线程同步
这一节主要是解决共享资源的处理。操作系统里也讲过互斥、锁之类的概念。 互斥锁 互斥锁通过锁机制来实现线程同步,同一时刻只允许一个线程执行一个关键部分的代码 一下是操作互斥锁的函数,均声明在pthread.h中。 pthread_mutex_init(初始…...
leetcode141.环形链表
题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…...
景联文科技:以高质量数据赋能文生图大模型
1月5日,在智求共赢・中国AIGC产业应用峰会暨无界AI生态合作伙伴大会上,中国AIGC产业联盟联合无界AI发布了《中国AIGC文生图产业白皮书2023》,从AIGC文生图发展历程、主流工具、产业实践以及规模预测等多个维度,全面揭示了中国AIGC…...
[论文笔记] PAI-Megatron中qwen和mistral合并到Megtron-LM
一、千问 关于tokenizer的改动: 1.1、更改build_tokenizer中tokenizer类的加载。 /mnt/nas/pretrain/code/Megatron-LM/megatron/tokenizer/__init__.py 或者 tokenizer.py 在build_tokenizer.py函数中: elif args.tokenizer_type == "QwenTokenizer":assert a…...
python设计模式有哪几种
Python 中常见的设计模式有以下几种 一 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供全局访问点。 二 工厂模式(Factory Pattern):使用工厂方法来创建对象,而不是直…...
C语言从入门到实战——数据在内存中的存储方式
数据在内存中的存储方式 前言1. 整数在内存中的存储2. 大小端字节序和字节序判断2.1 什么是大小端2.2 为什么有大小端2.3 练习2.3.1 练习12.3.2 练习22.3.3 练习32.3.4 练习42.3.5 练习52.3.6 练习6 3. 浮点数在内存中的存储3.1 练习3.2 浮点数的存储3.2.1 浮点数存的过程3.2.2…...
高效便捷的远程管理利器——Royal TSX for Mac软件介绍
Royal TSX for Mac是一款功能强大、操作便捷的远程管理软件。无论是远程桌面、SSH、VNC、Telnet还是FTP,用户都可以通过Royal TSX轻松地远程连接和管理各种服务器、计算机和网络设备。 Royal TSX for Mac提供了直观的界面和丰富的功能,让用户能够快速便…...
Docker 部署后端项目自动化脚本
文章目录 开机自启动docker打包后端项目Dockerfile文件脚本文件使用 开机自启动docker systemctl enable dockersystemctl is-enabled docker打包后端项目 这里的项目位置是target同级目录 1.在项目下面新建一个bin目录 新建一个package.txt 写入下方代码后 后缀改为.bat ec…...
MySQL从0到1全教程【2】SQL语言的通用语法及分类
1 SQL语言的通用语法格式 无论是那种数据库的产品,SQL语法都是通用的。 SQL语句可以单行编写也可以多行编写,以分号结尾。SQL语句可以使用空格或者缩进的方式来增强语句的可读性,空格和缩进的数量没有限制。MySQL数据库的SQL语句是不区分大…...
【npm link】Node命令中的npm link命令的使用,还有CLI全局命令的使用,开发命令行工具必不可少的部分
😁 作者简介:一名大四的学生,致力学习前端开发技术 ⭐️个人主页:夜宵饽饽的主页 ❔ 系列专栏:NodeJs 👐学习格言:成功不是终点,失败也并非末日,最重要的是继续前进的勇气…...
Unity组件开发--相机跟随角色和旋转
1.相机跟随组件,节点: 2.相机跟随组件脚本: using System; using System.Collections; using System.Collections.Generic; using Unity.Burst.Intrinsics; using UnityEngine; using UnityEngine.UI;public class CameraFollow : Singleton&…...
JavaScript系列——Proxy(代理)
文章目录 概要Proxy 语法handler 对象的方法Proxy 示例常用handler 对象的方法的参数handler.get()语法示例 handler.set()语法示例 使用场景验证值修正及附加属性 小结 概要 Proxy 用于创建一个对象的代理,将对原对象上的操作(属性获取、赋值、函数调用…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
