小小群集不用怕,一看就懂!!!超级详细 Nginx+Tomcat 负载均衡、动静分离群集

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

1.案例概述 通常情况下,一台 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的 请求等问题,
不能单独应用于生产环境下,所以需要一套更可靠的解决方案来完善 Web 站点 架构。
Nginx 是一款非常优秀的 http 服务器软件,它能够支持高达 50000 个并发连接数的响
应,拥有强大的静态资源处理能力,运行稳定,并且内存、CPU 等系统资源消耗非常低。
目前很多大型网站都应用 Nginx 服务器作为后端网站程序的反向代理及负载均衡器,来提升整 个站点的
负载并发能力。 Nginx 是一个非常强大的静态 web 服务,Tomcat 处理动态请求效率不高,而一般网站大
多数的内容都是静态文件(如图片、html、css、js 等),经过 Nginx 前端的反向代理加速 和过滤,
后端 Tomcat 处理请求的压力便可大大减少,只需负责处理动态内容就可以了。在 性能与稳定性的权衡下,
使用 Nginx+Tomcat 搭配便可让它们在各自擅长的领域大展拳脚。

① 安装 nginx、tomcat;
② nginx、tomcat 配置;
③ 编写动静分离页面。

案例前置知识点

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

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

                                                     【交  换  机】
                                                               ●
                                                               ●
                                                               ●      
               ●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
               ● 		●                              ● 	
               ●		●                              ● 		
               ●		●                              ● 		 
       【调度器1】	          【WEB1】            【WEB2】                   	
    192.168.100.21           192.168.100.22           192.168.100.23      	 

案例实施

####Tomcat1###192.168.30.22

1、实施准备

●关闭防火墙、关闭核心防护
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

●在安装 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 是否安装。如果没有安装需要自行下载安装
[root@localhost ~]# java -version ###可通过 yum 安装 java-1.8.0-openjdk

如果没有装则执行下面命令
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版本
在这里插入图片描述

3、安装配置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

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.52xit.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.30.22:8080/

在这里插入图片描述

Tomcat2 192.168.30.23

1、实施准备

●关闭防火墙、关闭核心防护
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0

2、查看JDK是否安装

运行 java -version 命令查看 Java 是否安装。如果没有安装需要自行下载安装
[root@localhost ~]# java -version ###可通过 yum 安装 java-1.8.0-openjdk

如果没有装则执行下面命令

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版本

3、安装配置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

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.51xit.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.22:8080
在这里插入图片描述

Nginx 服务器配置

在 Nginx 服务器 192.168.100.21上安装 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
[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

■检查配置文件

与 Apache 的主程序 httpd 类似, Nginx 的主程序也提供了“-t”选项用来对配置文件进行
检查, 以便找出不当或错误的配置。 配置文件 nginx.conf 默认位于安装目录下的 conf/子目
录中。 若要检查位于其他位置的配置文件, 可使用“-c”选项来指定路径
[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

■启动、 停止 Nginx
killall -1 nginx ####安全重启
killall -3 nginx ###停止服务

如果出现: -bash: killall: command not found
yum -y install psmisc

[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

用浏览器输入192.168.30.21测试一下

在这里插入图片描述

添加 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 参数

#######重启系统#########

(4)配置 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;
	}

 tomcat_921:8080   :这个意思tomcat池 ,921:8080这个是命令已经监听端口 ,weight=1 权重是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>

[root@localhost opt]# vi /usr/local/nginx/conf/nginx.conf //还是在主配置文件

在 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 文件内容如下。

下面在 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

root 13304 0.0 0.0 20492 624 ? Ss 17:59 0:00 nginx: master proc ess /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf
nginx.conf www 13305 0.0 0.1 20940 1348 ? S 17:59 0:00
nginx: worker proc ess root 13311 0.0 0.0 112664 972 pts/0 S+ 17:59 0:00
grep --color=auto nginx

查看端口号及 PID 进程号。
[root@localhost ~]# netstat -anpt | grep nginx

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13304/nginx: master

测试效果 下面是测试步骤。

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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值