Nginx+Tomcat负载均衡、动静分离

1. Tomcat 概述

1.1 Tomcat 简介

Tomcat 最初是由 Sun 的软件构架师詹姆斯·邓肯·戴维森开发的。后来他 帮助将其变为开源项目,并由 Sun 贡献给 Apache 软件基金会。由于大部分开源项目 O’Reilly 都会出一本相关的书,并且将其封面设计成某个动物的素描,因此他希望将此项目以一个动 物的名字命名。因为他希望这种动物能够自己照顾自己,最终,他将其命名为 Tomcat(公 猫)。而 O’Reilly 出版的介绍
Tomcat 的书籍的封面也被设计成了一个公猫的形象。而 Tomcat 的 Logo 兼吉祥物也被设计成了一只公猫。 其实 Tomcat 在开始研发的时候并不叫这个名字,早期 Tomcat 项目的名字叫 Catalina, 所以当我们安装完 Tomcat 后会发现安装路径下面有很多和 Catalina 有关的目录和文件,而这些文件通常也是我们使用或者配置 Tomcat 的重要文件。

1.2 应用场景

Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。 一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的 功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端

1.3 安装过程

  1. 关闭防火墙、关闭核心防护
[root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# setenforce 0
  1. 在安装 Tomcat 之前必须先安装 JDK
  2. 查看JDK是否安装
[root@localhost ~]# java -version  ###可通过 yum 安装 java-1.8.0-openjdk
  1. 安装配置Tomcat
  2. Tomcat 配置相关说明

Tomcat 的主目录为/usr/local/tomcat8/
[root@localhost ~]# cd /usr/local/tomcat8/
[root@localhost tomcat8]# ll
(1)主要目录说明

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

 
  1. 配置文件说明 执行“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 等相关配置。
  1. Tomcat 主配置文件说明
server.xml 为 Tomcat 的主要配置文件,通过配置该文件,可以修改 Tomcat 的启动端 口、网站目录、虚拟主机、开启 https 等重要功能。
 整个 server.xml 由以下结构构成:<Server><Service><Connector /><Engine><Host><Context></Context></Host></Engine></Service></Server>。 以下是默认安装后 server.xml 文件的部分内容,其中<!-- -->内的内容是注释信息,
<?xml version="1.0" encoding="UTF-8"?>
 ……  //省略部分内容 
<Server port="8005" shutdown="SHUTDOWN">  // Tomcat 关闭端口,默认只对本机地址开放,可以在本机通过 telnet 127.0.0.1 8005 访问, // 对 Tomcat 进行关闭操作
…… //省略部分内容 
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 
//Tomcat 启动的默认端口号 8080,可以根据需要进行更改
 …… //省略部分内容
 <!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 
//Tomcat 启动 AJP 1.3 连接器时默认的端口号,可以根据需要进行更改 
…… //省略部分内容 
//以下为 Tomcat 定义虚拟主机时的配置及日志配置 
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
<!-- SingleSignOn valve, share authentication between web applications
 Documentation at: /docs/config/valve.html --> 
<!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> -->
<!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> 
<Valve className="org.apache.catalina.valves.AccessLogValve" directory = "logs"prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
 </Host> 
</Engine> 
</Service> 
</Server>

2. Nginx+Tomcat 负载均衡、动静分离群集实验

  1. 安装 nginx、tomcat;
  2. nginx、tomcat 配置;
  3. 编写动静分离页面。

2.1 Tomcat1 192.168.100.20

关闭防火墙、关闭核心防护

[root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# setenforce 0

查看JDK是否安装,没有则安装

[root@localhost ~]# java -version  ##查看java版本

如果没有装则执行下面命令
tar xf jdk-8u144-linux-x64.tar.gz                ##### 解压安装包
cp -rv jdk1.8.0_144/ /usr/local/java           #####复制文件到/usr/local/java  
vi /etc/profile                                             #####编辑环境变量
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib

source /etc/profile                                     #####让刚才编辑的环境变量生效
java -version                                              #####检查java版本

安装配置Tomcat

Tomcat的安装和配置步骤如下
●解压 apache-tomcat-8.5.16.tar.gz 包
[root@localhost ~]# tar xf apache-tomcat-8.5.16.tar.gz
●解压后生成 apache-tomcat-8.5.16 文件夹,将该文件夹移动到/usr/local/下,并 改名为 tomcat8。
[root@localhost ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8
●启动 tomcat。
[root@localhost ~]# cd /opt
[root@localhost opt]# tar xzvf apache-tomcat-8.5.23.tar.gz                      #####解压
[root@localhost opt]# cp -r apache-tomcat-8.5.23 /usr/local/tomcat8     #####将源代码复制到/usr/local/tomcat8
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup                        #####创建软连接tomcatup      
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown               #####创建软连接tomcatdown  
[root@localhost opt]# tomcatup                                                                 ######启动tomcat
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.
[root@localhost opt]# netstat -anpt | grep 8080                                   #####检测是否启动,8080端口是否工作正常
tcp6       0      0 :::8080                 :::*                    LISTEN      68238/java   

建立 Java 的 Web 站点

在根目录下建立一个 web 目录,并在里面建立一个 webapp1 目录,用于存放网站文 件。
[root@localhost ~]# mkdir -pv /web/webapp1

在webapp1 目录下建立一个 index.jsp 的测试页面

[root@localhost ~]# vim /web/webapp1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
 <head>
  <title>JSP test1 page</title>
 </head>
 <body> 
  <% out.println("动态页面 1,http://www.51xit.com");%>
 </body>
 <body>
   <div>静态页面的图片 1</div><br><img src="logo.jpg">
 </body>
</html>

修改 Tomcat 的 server.xml 文件

定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webapp1,
在 host 段增加 context 段
[root@localhost ~]# 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="" 设置默认"类"

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

通过浏览器访问 http://192.168.100.20:8080/
显示“静态页面的图片 1”文字,并没有出现 logo.jpg 图片,原因是由于静态图片暂时没 配,所以加载不出来

2.2 Tomcat1 192.168.100.30

闭防火墙、关闭核心防护

[root@localhost ~]# systemctl stop firewalld
 [root@localhost ~]# setenforce 0

查看JDK是否安装

[root@localhost ~]# java -version   

安装IDK

tar xf jdk-8u144-linux-x64.tar.gz                ##### 解压安装包
cp -rv jdk1.8.0_144/ /usr/local/java           #####复制文件到/usr/local/java  
vi /etc/profile                                             #####编辑环境变量

export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export PATH=$PATH:/usr/local/java/bin
export CLASSPATH=./:/usr/local/java/lib:/usr/local/java/jre/lib

source /etc/profile                                     #####让刚才编辑的环境变量生效
java -version                                              #####检查java版本

安装配置Tomcat

Tomcat的安装和配置步骤如下
●解压 apache-tomcat-8.5.23.tar.gz 
[root@localhost ~]# tar xzvf apache-tomcat-8.5.23.tar.gz 

●解压后生成 apache-tomcat-8.5.23 文件夹,将该文件夹移动到/usr/local/下,并 改名为 tomcat8。
[root@localhost ~]# mv apache-tomcat-8.5.23/ /usr/local/tomcat8

●启动 tomcat。
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup                        #####创建软连接tomcatup      
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown               #####创建软连接tomcatdown  

[root@localhost opt]# tomcatup                                                                 ######启动tomcat
Using CATALINA_BASE:   /usr/local/tomcat8
Using CATALINA_HOME:   /usr/local/tomcat8
Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
Using JRE_HOME:        /usr
Using CLASSPATH:       /usr/local/tomcat8/bin/bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
Tomcat started.

[root@localhost opt]# netstat -anpt | grep 8080                                   #####检测是否启动,8080端口是否工作正常
tcp6       0      0 :::8080                 :::*                    LISTEN      68238/java   

建立 Java 的 Web 站点

在根目录下建立一个 web 目录,并在里面建立一个 webapp1 目录,用于存放网站文 件。
[root@localhost ~]# mkdir -pv /web/webapp1

在webapp1 目录下建立一个 index.jsp 的测试页面。

[root@localhost ~]# vim /web/webapp1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
 <head>
  <title>JSP test1 page</title>
 </head>
 <body> 
  <% out.println("动态页面 2,http://www.52xit.com");%>
 </body>
 <body>
   <div>静态页面的图片2</div><br><img src="logo.jpg">
 </body>
</html>

修改 Tomcat 的 server.xml 文件

定义一个虚拟主机,并将网站文件路径指向已经建立的/web/webapp1,
在 host 段增加 context 段
[root@localhost ~]# 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="" 设置默认"类"

关闭 Tomcat,再重新启动

[root@localhost ~]# tomcatdown 
[root@localhost ~]# tomcatup

通过浏览器访问 http://192.168.100.30:8080

2.3 Nginx 服务器配置

在 Nginx 服务器 192.168.100.40上安装 Nginx,反向代理到两个 Tomcat 站点,并实现 负载均衡
(1)关闭防火墙。
(2)安装相关软件包

[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel gcc-c++

解压并安装 Nginx。

[root@localhost ~]# groupadd www
[root@localhost ~]# useradd -g www www -s /bin/false
[root@localhost opt]# tar xzvf nginx-1.15.9.tar.gz
[root@localhost opt]# cd nginx-1.15.9/
[root@localhost nginx-1.15.9]# 
./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 启用 flv 模块,提供寻求内存使用基于时间的偏移量文件
//–with-http_ssl_module 启用 SSL 模块

[root@localhost nginx-1.12.0]# make && make install

[root@localhost nginx-1.12.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.12.0]# ls -l /usr/local/sbin/nginx
lrwxrwxrwx 1 root root 27 5 月 16 16:50 /usr/local/sbin/nginx -> /usr/local/nginx/sbin/nginx

检查配置文件

[root@localhost ~]# nginx -t
[root@localhost ~]# nginx                                ####启动
[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
7180/nginx: master

添加 Nginx 系统服务

[root@localhost ~]# vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx                                                 ####描述
After=network.target                                            ####描述服务类别
[Service]
Type=forking                                                          ####后台运行形式
PIDFile=/usr/local/nginx/logs/nginx.pid                ####PID 文件位置
ExecStart=/usr/local/nginx/sbin/nginx                  ####启动服务
ExecReload=/usr/bin/kill -s HUP $MAINPID         ####根据 PID 重载配置
ExecStop=/usr/bin/kill -s QUIT $MAINPID           ####根据 PID 终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target

[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
[root@localhost ~]# systemctl enable nginx.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to
/usr/lib/systemd/system/nginx.service.
这样一来, 就可以 systemctl 命令来启动、 停止、 重启、 重载 Nginx 服务器了, 方法是
在执行时添加相应的 start、 stop、 restart、 reload 参数

重启系统

systemctl start nginx.service
systemctl stop nginx.service
systemctl reload nginx.service
systemctl restart nginx.service
systemctl status nginx.service

配置 nginx.conf。

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf 

在 http {…} 中加入以下代码,设定负载均衡的服务器列表,weight 参数表示权重, 权重越高,
被分配到的概率越大。为了使测试效果比较明显,我们把权重设置为一样。

upstream tomcat_921:8080 weight=1;
 server 172.16.16.173:8080 weight=1;
 }

下面是编辑 Nginx 静态页面文件

[root@nginx conf]# vim /usr/local/nginx/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"> 
<title>静态页面</title>
<style>
 body {
  width: 35em;
  margin: 0 auto;
  font-family: Tahoma, Verdana, Arial, sans-serif;
 }
</style>
</head>
<body>
<h1>静态页面</h1>
<p>这是个静态页面</p>
</body>
</html>

在 http {…} - server{…}中加入 location ~ .*.jsp${…}动态请求条件规则以及静 态图片请求规则。
… 省略

location ~ .*.jsp$ {  ###动态页面正则
 proxy_set_header HOST $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header Client-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_pass http://tomcat_server;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {   ###静态图片正则
 root /usr/local/nginx/html/img;
 expires 30d;
 }
location / {
 root html;
 index index.html index.htm;
 } 

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

server {
 listen 80;
 server_name localhost;
 #charset koi8-r;
 #access_log logs/host.access.log main;
 location ~ .*.jsp$ {
  proxy_set_header HOST $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header Client-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://tomcat_server;
  }
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
 root /usr/local/nginx/html/img;
 expires 30d;
}
location / {
 root html;
 index index.html index.htm;
}

下面在 Nginx 上准备静态图片

[root@nginx ~]# mkdir /usr/local/nginx/html/img   ###创建静态文件目录 
[root@nginx ~]# cp /opt/logo.jpg /usr/local/nginx/html/img

测试 Nginx 配置文件是否正确

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t 
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok 
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

启动 Nginx 服务

[root@localhost ~]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

查看 Nginx 服务进程

[root@localhost ~]# ps aux | grep nginx 

查看端口号及 PID 进程号

 [root@localhost ~]# netstat -anpt | grep nginx 

2.4 测试

测试静态页面效果 打开浏览器访问 http://192.168.100.40/,可以看到访问到 nginx 静态页面,

测试负载均衡效果 打开浏览器访问 http://192.168.100.40/index.jsp。 不断刷新浏览器测试,
可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现 test1 的测试页面,
并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 test2 的测试页面,
示。,就说明负载均衡群集搭建成功,已经可以 在两个 Tomcat server 站点进行切换了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值