简介
在前面已经学习了Nginx服务器的安装配置,本章主要采用案例课的形式介绍Tomcat及Nginx+Tomcat负载均衡群集。Tomcat案例首先介绍其应用场景,然后重点介绍Tomcat的安装配置,Nginx+Tomcat负载均衡群集案例是应用于生产环境下的一套可靠的Web站点解决方案。
应用场景
Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。
一、部署Tomcat
1.实施准备
(1)关闭firewalld防火墙
[root@love ~]# systemctl stop firewalld
(2)在安装 Tomcat 之前必须先安装JDK。 JDK的全称是Java Development Kit,是Sun公司免费提供的Java语言的软件开发工具包,其中包含Java虚拟机(JVM)。编写好的Java源程序经过编译可形成Java字节码,只要安装了JDK,就可以利用JVM解释这些字节码文件,从而保证了Java的跨平台性。
在平台兼容性方面,JDK作为解释字节码文件并据此调用操作系统API实现对应功能的Java虚拟机,与操作系统类型和平台位数密切相关,因此存在不同类型的版本,而Tomcat也具有上述特征,默认情况下JDK已经安装,所以需要预先下载Tomcat,本章中所使用的Tomcat软件的源码包为apache-tomcat-8.5.16.tar.gz。
2.查看JDK是否安装
运行java-version命令查看Java是否安装。如果没有安装需要自行下载安装。
3.安装配置Tomcat
(1)解压apache-tomcat-8.5.16.tar.gz包。
[root@love ~]# tar xf apache-tomcat-8.5.16.tar.gz
(2)解压后生成apache-tomcat-8.5.16文件夹,将该文件夹移动到/usr/local/下,并改名为
tomcat7。
[root@love ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8
(3)启动tomcat
Tomcat默认运行在8080端口,运行netstat命令查看8080端口监听的信息。
(4)打开浏览器访问测试:http://192.168.19.10:8080/,如果出现以下界面,则
表示Tomcat 已经启动成功。
如果想关闭Tomcat,则运行/usr/local/tomcat8/bin/shutdown.sh命令。
4.Tomcat配置相关说明
Tomcat的主目录为/usr/local/tomcat8/。
(1)主要目录说明。
- ---bin/:存放Windows或Linux平台上启动和关闭Tomcat的脚本文件。
- ---conf/:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml。
- ---lib/:存放Tomcat运行需要的库文件(JARS)。
- ---logs:存放Tomcat执行时的LOG文件。
- ---webapps:Tomcat的主要Web发布目录(包括应用程序示例)。
- ---work:存放JSP编译后产生的class文件。
(2)配置文件说明。
- catalina.policy:权限控制配置文件。
- catalina.properties:Tomcat属性配置文件.
- context.xml:上下文配置文件。
- logging.properties:日志log相关配置文件。
- server.xml:主配置文件。
- torcat-users.xml:manager-gui管理用户配置文件(Tomcat安装后提供一个manager-gui的管理界面,通过配置该文件可以开启访问)。
- web.xml:Tomcat的servlet、servlet-mapping、filter、MIME等相关配置。
5.Tomcat主配置文件说明
server.xml为Tomcat的主要配置文件,通过配置该文件,可以修改Tomcat的启动端口、网站目录、虚拟主机、开启https等重要功能。
整个server.xml由以下结构构成:< Server>、<Service>、<Connector/>、< Engine>、<Host>、<Context>、</Context>、</Host>、</Engine>、</Service>和</Server>。
以下是默认安装后server.xml文件的部分内容,其中 <!-- -- >内的内容是注释信息,黑色斜体部分是我们需要注意和需要经常更改的部分。
6.Tomcat Server的组成部分说明
(1)Server
Server元素代表了整个Catalina的servlet容器。
(2) Service
Service 是这样一个集合:它由一个或者多个Connector,以及一个Engine(负责处理所Connector所获得的客户请求)组成。
(3)Connector
一个Connector在某个指定端口上侦听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户。
Tomcat 有两个典型的 Connector,一个直接侦听来自browser的http请求,一个侦听来自其他WebServer 的请求。
Coyote Http/1.1 Connector在端口8080处侦听来自客户browser的http请求。
Coyote JK2 Connector在端口8009处侦听来自其他WebServer(Apache)的servlet/jsp代理求。
(4)Engine
Engine下可以配置多个虚拟主机Virtual Host,每个虚拟主机都有一个域名。当Engine获得一个请求时,它把该请求匹配到某个Host上,然后把该请求交给该Host来处理。Engine 有一个默认虚拟主机,当请求无法匹配到任何一个Host上的时候,将交给该默认Host来处理。
(5)Host
Host 代表一个Virtual Host,即虚拟主机,每个虚拟主机和某个网络域名Domain Name相匹配。每个虚拟主机下都可以部署(deploy)一个或者多个Web App,每个Web App对应于一个Context,有一个Context path。
当Host获得一个请求时,将把该请求匹配到某个Context上,然后把该请求交给该Context 来处理匹配的方法是“最长匹配”,所以一个path==""的Context将成为该Host的默认Context。
所有无法和其他Context的路径名匹配的请求都将最终和该默认Context 匹配。
(6)Context
一个Context对应于一个Web Application,一个Web Application由一个或者多个Servlet组成。
7.建立java的Web站点
(1)在根目录下建立一个web目录,并在里面建立一个webapp1目录,用于存放网站文件。
[root@love ~]# mkdir -pv /web/webappl
(2)在webapp1目录下建立一个index.jsp的测试页面。
[root@love ~]# vim /web/webappl/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("Welcom to test site,http://www.testl.com");%>
</body>
</html>
[root@love ~]# more /web/webappl/index.jsp
(3)修改Tomcat的server.xml文件。
定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webapp1,在host段增加context段。(加在149行下面)
[root@love ~]# vim /usr/local/tomcat8/conf/server.xml
<Context docBase="/web/webappl" path="" reloadable="false" >
</Context>
(4)关闭Tomcat,再重新启动。
[root@love ~]# /usr/local/tomcat8/bin/shutdown.sh
[root@love ~]# /usr/local/tomcat8/bin/startup.sh
(5)通过浏览器访问http://172.16.16.172:8080/,出现以下页面,说明该Tomcat
站点已经配置成功,并且已经能够运行JSP了。
二、Nginx+Tomcat负载均衡集群
案例环境、概述
通常情况下,一台Tomcat站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等问题,不能单独应用于生产环境下,所以我们需要一套更可靠的解决方案来完善Web站点架构。
Nginx是一款非常优秀的http服务器软件,它能够支持高达50000个并发连接数的响应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU 等系统资源消耗非常低。目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,来提升整个站点的负载并发能力。
本案例我们将讲解以Nginx 作为负载均衡器,Tomcat 作为应用服务器的负载群集的设置方法。
主机 | 操作系统 | IP 地址 | 主要软件 |
Nginx 服务器 | CentOS7.3 x86_64 | 192.168.19.20 | nginx-1.12.0.tar.gz |
Tomcat 服务器1 | CentOS7.3 x86_64 | 192.168.19.10:8080 | apache-tomcat-8.5-16.tar.gz |
Tomcat 服务器2 | CentOS7.3 x86_64 | 192.168.19.30:8080 | apache-tomcat-8.5-16.tar.gz |
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@love ~]# vim /web/webappl/index.jsp
<html>
<head>
<title>JSP test2 page</title>
</head>
<body>
<% out.println("Welcom to test site,http://www.test2.com");%>
</body>
</html>
(6)启动Tomcat,浏览器访问Tomcat2 server,测试 http://192.168.19.30:8080/。
2.Nginx服务器配置
在Nginx 服务器192.168.19.20上安装Nginx,反向代理两个Tomcat站点,并实现负载均衡。
(1)关闭防火墙。
(2)安装相关软件包.
[root@love ~]# yum -y install pcre-devel zlib-devel opemssl-devel
(3)解压并安装Nginx。
[root@love ~]# groupadd www
[root@love ~]# useradd -g www www -s /bin/false
[root@love ~]# tar xf nginx-1.12.0.tar.gz
[root@love ~]# cd nginx-1.12.0/
[root@love 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
[root@love nginx-1.12.0]# make
[root@love nginx-1.12.0]# make install
(4)配置nginx.conf
[root@love ~]# vim /usr/local/nginx/conf/nginx.conf
upstream tomcat_server {
server 192.168.19.10:8080 weight=1;
server 192.169.19.30:8080 weight=1;
}
location / {
root html;
index index.html index.htm;
proxy_pass http://tomcat_server;
}
(5)测试Nginx配置文件是否正确
[root@love ~]# /usr/local/nginx/sbin/nginx -t
(6)启动Nginx服务
[root@love ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
(7)查看Nginx服务进程
(8)查看端口号及PID进程号
3.测试负载均衡效果
(1)打开浏览器访问:http://192.168.19.20/。
(2)不断刷新浏览器测试,可以看到由于权重相同,页面会反复在以下两个页面来回切换。第一次访问,出现test1的测试页面,如下图1。刷新后,第二次访问,出现test2的测试页面,如下图2。这说明负载均衡群集搭建成功,已经可以在两个Tomcat server站点进行切换了。