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