本章分四个部分,原理与实验,配置文件解析与排错
Tomcat与Nginx
这里我们只讲解两个人之间的关系
Tomcat目录与配置文件
(1)主要目录说明
—bin/ : | 存放 Windows 或 Linux 平台上启动和关闭 Tomcat 的脚本文件。 |
---|---|
—conf/: | 存放 Tomcat 服务器的各种全局配置文件,其中最重要的是 server.xml 和 web.xml。 |
—lib/: | 存放 Tomcat 运行需要的库文件(JARS)。 |
—logs: | 存放 Tomcat 执行时的 LOG 文件。 |
—webapps: | Tomcat 的主要 Web 发布目录(包括应用程序示例)。 |
—work: | 存放 JSP 编译后产生的 class 文件 |
(2)配置文件说明 执行“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 等相关配置。 |
Nginx负载均衡实现原理
Nginx是一款非常优秀的HTTP服务器软件
支持高达50 000个并发连接数的响应
拥有强大的静态资源处理能力
运行稳定
内存、CPU等系统资源消耗非常低
目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力
Nginx配置反向代理的主要参数 | : |
---|---|
upstream服务池名{} | 配置后端服务器池,以提供响应数据 |
proxy_pass http://服务池名 | 配置将访问请求转发给后端服务器池的服务器处理 |
如上图:
客户端发送请求过来:有动态也有静态
静态交给Nginx处理,动态交给Tomcat处理
Nginx静态处理优势 |
---|
Nginx处理静态页面的效率远高于Tomcat的处理能力 |
若Tomcat的请求量为1000次,则Nginx的请求量为6000次 |
Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M |
Nginx处理静态资源的能力是Tomcat处理的6倍 |
负载均衡与动静分离部署
拓扑图
Nginx这个时候相当于调度器的角色,静态自己处理,动态Tomcat处理
网络环境
【调度器1】 | 【WEB1】 | 【WEB2】 |
---|---|---|
20.0.0.23 | 20.0.0.24 | 20.0.0.25 |
Nginx | Tomcat1 | Tomcat2 |
其他: | 防火墙,核心防护关闭 |
---|---|
网关: | 全部指向20.0.0.1 |
最小安装在开局前需要安装: | |
---|---|
yum -y install net-tools | 最小安装必装,可以使用ifconfig,netstat等 |
yum -y install bash-completion | 这个是最小安装自动补全命令 |
Tomcat1 20.0.0.24
2、查看JDK是否安装
运行 java -version 命令查看 Java 是否安装。如果没有安装需要自行下载安装
[root@localhost ~]# java -version
可以yum 安装 java-1.8.0-openjdk或者上传包到opt下
[root@localhost ~]# cd /opt
[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。
#创建软连接tomcatup
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
#创建软连接tomcatdown
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/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.
#检测是否启动,8080端口是否工作正常
[root@localhost opt]# netstat -anpt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 68238/java
#建立 Java 的 Web 站点
在根目录下建立一个 web 目录,并在里面建立一个 webapp1 目录,用于存放网站文件。
[root@localhost ~]# mkdir -pv /web/webapp1
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 1,http://www.5111111.com");%>
</body>
<body>
<div>静态页面的图片 1</div><br><img src="2.jpg">
</body>
</html>
###注意#####
<div>静态页面的图片 1</div><br><img src="2.jpg">
这里的2.jpg是等一下 Nginx(20.0.0.23):/usr/local/nginx/html/img/下的图片名称
因为我们将静态网页交给Nginx处理了,Tomcat只处理动态的
tomcat指路径,Nginx放图片
########
#修改 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.22:8080/
显示“静态页面的图片 1”文字,并没有出现logo.jpg 图片,原因是由于静态图片暂时没配,所以加载不出来
###测试#####在笔记本上测试
http://20.0.0.24:8080/ 查看默认测试页是否正常显示
Tomcat2 20.0.0.25
2、查看JDK是否安装
运行 java -version 命令查看 Java 是否安装。如果没有安装需要自行下载安装
[root@localhost ~]# java -version
可以yum 安装 java-1.8.0-openjdk或者上传包到opt下
[root@localhost ~]# cd /opt
[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。
#创建软连接tomcatup
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
#创建软连接tomcatdown
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/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.
#检测是否启动,8080端口是否工作正常
[root@localhost opt]# netstat -anpt | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 68238/java
#建立 Java 的 Web 站点
在根目录下建立一个 web 目录,并在里面建立一个 webapp1 目录,用于存放网站文件。
[root@localhost ~]# mkdir -pv /web/webapp1
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>
</head>
<body>
<% out.println("动态页面 2,http://www.52222222.com");%>
</body>
<body>
<div>静态页面的图片 2</div><br><img src="3.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://20.0.0.25:8080/
显示“静态页面的图片 1”文字,并没有出现 logo.jpg 图片,原因是由于静态图片暂时没配,所以加载不出来
Nginx 服务器配置 20.0.0.23
在 Nginx 服务器 20.0.0.23 上安装 Nginx,反向代理到两个 Tomcat 站点,并实现 负载均衡
(1)关闭防火墙。
(2)安装相关软件包。
[root@localhost ~]# yum -y install pcre-devel zlib-devel openssl-devel gcc-c++
(3)解压并安装 Nginx。
[root@localhost ~]# groupadd www
[root@localhost ~]# useradd -g www www -s /bin/false
cd /opt
[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_modu
[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
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
[root@localhost ~]# killall -3 nginx ###停止服务
如果出现: -bash: killall: command not found
[root@localhost ~]# yum -y install psmisc
[root@localhost ~]# nginx ####启动
yum -y install net-tools
[root@localhost ~]# netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
[root@localhost ~]# vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/bin/kill -s HUP $MAINPID
ExecStop=/usr/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
########################################
[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service
killall -3 nginx
systemctl start nginx
[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
(4)配置 nginx.conf。
配置命令如下: 下面只是告诉你添加的位置
[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
把 Nginx 的默认站点通过 proxy_pass 方法代理到了设定好的 tomcat_server 负载均衡
服务器组上。配置完成的 nginx.conf 文件内容如下。
…… //省略部分内容
http {
…… ###省略部分内容 第一个添加内容为:
#gzip on;
upstream tomcat_server {
server 20.0.0.24:8080 weight=1;
server 20.0.0.25:8080 weight=1;
}
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;
}
###检查语法问题
[root@localhost nginx-1.15.9]# 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@nginx ~]# mkdir /usr/local/nginx/html/img
[root@nginx ~]# cp /opt/2.jpg /usr/local/nginx/html/img
[root@nginx ~]# cp /opt/3.jpg /usr/local/nginx/html/img
或者用Xshell直接传两张叫2和3的图片到img下面,图片格式后缀名字为jpg
实验测试
(1)测试静态页面效果 打开浏览器访问 http://20.0.0.23/,可以看到访问到 nginx 静态页面, |
---|
(2)测试负载均衡效果 打开浏览器访问 http://20.0.0.23/index.jsp。 不断刷新浏览器测试, |
可以看到由于权重相同,页面会反复在以下两个页面来回切换。 第一次访问,出现 5111111的测试页面,
并且能正常加载 nginx 上的静态页面图片,刷新后,第二次访问,出现 5222222 的测试页面,
示。,就说明负载均衡群集搭建成功,已经可以 在两个 Tomcat server 站点进行切换了。
排错集
#(1)当你在安装Nginx后
#killall -3 nginx 想使用systemctl进行管理时,不可以直接使用,需要操作流程如下
killall -3 nginx
systemctl stop nginx.service
systemctl start nginx.service
#不然会一直报错
#(2)添加Nginx.conf完毕后,检查一下下面的两个},一个是http的,一个是server的
#如果缺少,就算提示你哪里错误,你也想不到是括号的问题
#(3)<div>静态页面的图片 1</div><br><img src="3.jpg">
这里的3.jpg是等一下 Nginx(20.0.0.23):/usr/local/nginx/html/img/下的图片名称
因为我们将静态网页交给Nginx处理了,Tomcat只处理动态的
tomcat指路径,Nginx放图片