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.13

ftp> cd 软件下载/y2/y2c

ftp> ls

ftp> get apache-tomcat-8.5.16.tar.gz
ftp> get nginx-1.12.0.tar.gz

ftp> 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]# ls

CentOS-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.conf

upstream 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的测试页面 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/326985.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

黑马程序员——javase基础——day02——运算符选择语句

目录&#xff1a; 运算符 算术运算符案例数值拆分操作的三种情况 数字相加(类型转换)字符相加字符串相加赋值运算符选择语句 顺序结构Debug的基本使用选择语句之if if语句格式1if语句格式2和格式3案例1(交通信号灯)关系运算符案例2(奇偶数)案例3(手机以旧换新)案例4(你是青年人…

探索2023年大模型与AIGC峰会:程序员的学习之旅与未来展望

在2023年的技术前沿&#xff0c;大模型与AIGC峰会无疑是一个备受瞩目的盛会。 作为程序员&#xff0c;你将从这次大会中学到什么&#xff1f;这次峰会将为你揭示哪些前沿科技趋势&#xff1f;让我们一起来探讨这个问题。 一、理解大模型与AIGC 大模型和AIGC是人工智能领域中两…

开源图床Lychee本地如何部署并结合内网穿透工具实现远程访问

文章目录 1.前言2. Lychee网站搭建2.1. Lychee下载和安装2.2 Lychee网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 1.前言 图床作为图片集中存放的服务网站&#xff0c;可以看做是云存储的一部分&#xff0c;既可…

NASA太空原子电池与Betavolt便携原子能电池对比分析

一、核心技术原理对比 1. Betavolt BV100原子能电池 工作原理&#xff1a;Betavolt BV100采用镍-63同位素作为能量源&#xff0c;这种同位素在衰变过程中释放β粒子&#xff08;高速电子流&#xff09;&#xff0c;并通过金刚石半导体材料捕获并转换为电能。不同于传统的热电转…

单调栈练习(五)— 子数组的最小值之和

题目 同样的LeetCode原题&#xff1a;题目链接 给定一个整数数组 arr&#xff0c;找到 min(b) 的总和&#xff0c;其中 b 的范围为 arr 的每个&#xff08;连续&#xff09;子数组。 由于答案可能很大&#xff0c;因此 返回答案模 10^9 7 。 思路 暴力解 先来说暴力解的思路…

别再给自己的创业失败找借口了,什么都有你还创什么业?2024普通人如何创业,2024适合普通人的创业项目

说起创业&#xff0c;大家都是满腹牢骚&#xff0c;抱怨现在阶层固化&#xff0c;没有机会&#xff0c;自己也没有钱&#xff0c;没有资源。反正就是给自己创业失败找借口。 但是马云曾经表示&#xff0c;钱是最容易得到的东西&#xff0c;如果自己一开始就有钱&#xff0c;那…

C++特殊类设计类型转换

一、特殊类设计 在普通类的设计基础上&#xff0c;提出一些限制条件设计的类就是特殊类。 1、请设计一个类&#xff0c;不能被拷贝 拷贝只会放生在两个场景中&#xff1a;拷贝构造函数以及赋值运算符重载&#xff0c;因此想要让一个类禁止拷贝&#xff0c; 只需让该类不能调…

Codeforces Round 919 (Div. 2) A~E

A. Satisfying Constraints(模拟) 题意&#xff1a; 给出 n n n个限制条件&#xff0c;问有多少个数字 k k k同时满足这些限制条件。 限制条件分为以下三种&#xff1a; k k k必须大于等于给出的一些数字 x x x k k k必须小于等于给出的一些数字 x x x k k k不能与给出的…

Go新项目-为何选Gin框架?(0)

先说结论&#xff1a;我们选型Gin框架 早在大概在2019年下旬&#xff0c;由于内部一个多线程上传的需求&#xff0c;考虑到Go协程的优势&#xff1b; 内部采用Gin框架编写了内部的数据上传平台BAP&#xff0c;采用GinVue开发&#xff0c;但前期没考虑到工程化思维&#xff0c;导…

【linux】终端发送网络请求与文件下载

发送网络请求 linux的终端中发送网络请求可以使用curl命令。 语法&#xff1a; curl [url] 但是他返回的是html代码&#xff0c;因为在终端中&#xff0c;他无法像浏览器中一样把访问到的html代码渲染成我们访问的页面&#xff0c;所以我们只能拿到他的源码。 访问CSDN - 专…

线性表的应用 | 线性表的合并

线性表的合并 #include <iostream> using namespace std;#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2typedef int Status;// 定义单链表 typedef struct LNode {int data;struct LNode *next; }LNode, *…

stack,queue和prioriy_queue

MySTL stack和queue template <class T, class Container deque<T> > class queue;template <class T, class Container deque<T> > class stack;选择适配器的宗旨是要能达到预想的功能 queue——只能使用list和deque stack——可以使用vector和…

【开源】基于JAVA的康复中心管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

试用清华Chatglm智能体

清华AI平台&#xff0c;感觉在见过的国内AI平台中做的是比较优秀的&#xff0c;目前该平台提供的智能体功能感觉更智能或者说更傻瓜式一些。定义可以定义专属智能体&#xff0c;这些智能体是自己想要的网络上的汇集处理后的信息&#xff0c;或者是绘画或者是编写某个方面的代码…

16.桥接模式

桥接模式 介绍 桥接模式是一种结构型设计模式&#xff0c;它通过将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。这种模式通过组合的方式来实现&#xff0c;而不是继承。桥接模式通过将抽象和实现解耦&#xff0c;从而实现抽象和实现的分离&#xff0c;使得系统更加…

数字人系统OEM流程:部署AI数字人系统源码需要注意哪些?

随着数字化技术的不断发展&#xff0c;数字人SaaS系统源码的部署已经成为许多企业关注的焦点。数字人SaaS系统源码的部署可以帮助企业降低成本、提高运营效率&#xff0c;为企业提供更加高效的服务。然而&#xff0c;在部署数字人SaaS源码时&#xff0c;有一些须知事项需要我们…

SpringAOP-说说 JDK动态代理和 CGLIB 代理

Spring 的 AOP 是通过动态代理来实现的&#xff0c;动态代理主要有两种方式 JDK 动态代理和 Cglib 动态代理&#xff0c;这两种动态代理的使用和原理有些不同。 JDK 动态代理 Interface&#xff1a;JDK动态代理是基于接口的代理&#xff0c;它要求目标类实现一个接口。Invoca…

内存四区图练习

带着白卡去旅行 绘制图中三种情况的内存四区图 一个实参 一个形参 取地址 通过指针修改变量 返回 多级指针的训练 #define _CRT_SECURE_NO_WARNINGS #include<stdlib.h> #include<stdio.h> #include<string.h> #include<math.h>int getMem(char***p3,…

模拟记事本

1. 模拟记事本 设计一个记事本 &#xff08;1&#xff09;更改字体颜色 &#xff08;2&#xff09;更改字体大小 &#xff08;3&#xff09;新建记事本 &#xff08;4&#xff09;查找记事本中的数据 &#xff08;5&#xff09;设置消息提示 &#xff08;6&#xff09;设置粘贴…

蓝莓产量预测(R语言版)

数据描述 字段名 描述 字段名 描述 id 蓝莓唯一标识 MinOfUpperTRange 花期内最高温带日平均气温的最低记录, Clonesize 蓝莓克隆平均大小 AverageOfUpperTRange 花期内最高温带日平均气温, Honeybee 蜜蜂密度 MaxOfLowerTRange 花期内最低温带日平均气温的最…