欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Nginx高可用 Tomcat 实现动静分离

程序员文章站 2022-03-22 09:59:58
文章目录一、为什么要实现动静分离1.1 什么是动静分离?1.2 为什么要做动静分离?1.3 如何实现动静分离?二、为什么使用nginx?2.1 Nginx静态处理优势三、Nginx动静分离实现原理四、NGINX,Tomcat负载均衡,动静分离案例一、为什么要实现动静分离1.1 什么是动静分离?将动态请求和静态请求区分访问,1.2 为什么要做动静分离?静态由Nginx处理, 动态由PHP处理或Tomcat处理…因为Tomcat程序本身是用来处理jsp代码的,但tomcat也能处理静态资源.tom...

一、为什么要实现动静分离

1.1 什么是动静分离?

将动态请求和静态请求区分访问,

1.2 为什么要做动静分离?

静态由Nginx处理, 动态由PHP处理或Tomcat处理…
因为Tomcat程序本身是用来处理jsp代码的,但tomcat也能处理静态资源.
tomcat本身处理静态效率不高,还会带来资源开销.

1.3 如何实现动静分离?

Nginx根据客户端请求的url来判断请求的是否是静态资源,如果请求的url包含jpg、png,则由Nginx处理。
如果请求的url是.php或者.jsp等等,这个时候这个请求是动态的,将转发给tomcat处理。
总结来说,Nginx是通过url来区分请求的类型,并转发给不同的服务端。

动态资源和静态资源分开,使服务器结构更清晰。

二、为什么使用nginx?

在传统的web项目中,并发量小,用户使用的少,所以在低并发的情况下,用户可以直接访问tomcat服务器,然后tomcat服务器返回消息给用户,理解如下图:
Nginx高可用 Tomcat 实现动静分离
当然我们知道,为了解决高并发,可以使用负载均衡,也就是我们多增加几个tomcat服务器,当用户访问的时候,请求可以提交到空闲的tomcat服务器上
Nginx高可用 Tomcat 实现动静分离
总结就是:

1.Nginx实现负载均衡是通过反向代理实现

当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。

2.Nginx配置反向代理的主要参数
(1)upstream 服务池名{}
配置后端服务器池,以提供响应数据
(2)proxy_pass http://服务池名
配置将访问请求转发给后端服务器池的服务器处理

2.1 Nginx静态处理优势

  • Nginx处理静态页面的效率远高于Tomcat的处理能力;
  • 若Tomcat的请求量为1000次,则Nginx的请求量为6000次;
  • Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M;
  • Nginx处理静态资源的能力是Tomcat处理的6倍。

三、Nginx动静分离实现原理

  • 如下图所示,我们部署了 nginx 和 tomcat服务器,把所有的静态资源都放置在nginx的webroot目录下面,把动态请求的程序都放在 tomcat 的webroot目录下面。
  • 当客户端访问服务端的时候,如果是静态资源的请求,就直接到nginx的webroot目录下面获取资源。
  • 如果是动态资源的请求,nginx利用反向代理的原理,把请求转发给tomcat进行处理,这样就实现了动静分离,提高了服务器处理请求的性能。
    Nginx高可用 Tomcat 实现动静分离

四、Nginx,Tomcat负载均衡,动静分离案例

其中使用Keepalived来实现高可用

Nginx高可用 Tomcat 实现动静分离

环境配置:

主机 IP地址
Nginx负载均衡器 1 + Keepalived 192.168.40.11
Nginx负载均衡器 2 + Keepalived 192.168.40.12
Tomcat网站服务节点 1 192.168.40.13
Tomcat网站服务节点 2 192.168.40.14
NFS共享服务器 192.168.40.15

安装NFS:

[root@nfs ~]# mkdir /web1
[root@nfs ~]# mkdir /web2
[root@nfs ~]# vi /web1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>

<title>tomcat1</title>
</head><body>

<% out.println("this is tomcat1 server1");%>
<div>动态页面1</div><br/><img src="a.jpg" />
</body>
</html>

[root@nfs ~]# cp index.jsp /web2
[root@nfs ~]# vi /web2/index.jsp	#修改web2节点
[root@nfs ~]# cd /web1	#导入a.jpg图片
[root@nfs web1]# ls
a.jpg index.jsp
[root@nfs web1]# cd /web2	#导入b.jpg图片
[root@nfs web2]# ls
b.jpg  index.jsp
[root@nfs ~]# vi /etc/exports
/web1 192.168.40.13(ro)
/web2 192.168.40.14(ro)

[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# showmount -e
Export list for nfs:
/web2 192.168.40.14
/web1 192.168.40.13

安装Tomcat

tomcat1:

导入jdk+tomcat安装包
先安装jdk:
tar zxvf jdk-8u91-linux-x64.tar.gz 
mv jdk1.8.0_91/ /usr/local/java
vi /etc/profile
末行添加:
export JAVA_HOME=/usr/local/java	##设置java根目录
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre	##在PATH环境变量中添加JAVA根目录下的bin子目录

source /etc/profile	##java.sh脚本导入到环境变量中,使其生效
echo $PATH

vi abc.java	#测试
public class abc{
   public static void main (String[] args) {
        System.out.println("hello world!!!");
     }
}

javac abc.java 
java abc

安装tomcat:
tar zxvf apache-tomcat-8.5.16.tar.gz 
mv apache-tomcat-8.5.16/ /usr/local/tomcat8
mkdir /webapp1	#创建挂载目录
mount 192.168.40.15:/web1 /webapp1
df -Th	#查看挂载情况

vi /usr/local/tomcat8/conf/server.xml	#修改主页的站点目录
找到<Host name="localhost">
下面添加:
<Context docBase="/webapp1" path="" reloadable="false">
      </Context>
      				#站点目录	#网页	#文件自动加载
      				
 ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
 ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
 tomcatup	#启动
 netstat -anpt | grep 8080

tomcat2的部署过程与1相同。

测试
在win10*问
Nginx高可用 Tomcat 实现动静分离
Nginx高可用 Tomcat 实现动静分离

安装Nginx + Keepalived

nginx1:

导入nginx安装包
yum -y install pcre-devel zlib-devel
tar zxvf nginx-1.13.7.tar.gz 
cd nginx-1.13.7/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install

useradd -M -s /sbin/nologin nginx	#创建一个名为nginx的用户

ln -s /usr/local/nginx/conf/nginx.conf /etc/
ln -s /usr/local/nginx/sbin/nginx /usr/sbin/
vi /etc/nginx.conf
1、在#gzip on
添加
upstream tomcat_server {
        server 192.168.40.13:8080 weight=1;
        server 192.168.40.14:8080 weight=1;
}
2、在server { 下
添加
location ~ \.jsp$ {	#反向代理
        proxy_pass http://tomcat_server;
}

nginx -t	#检查语法
nginx 
netstat -anpt | grep 80
如:killall -1 nginx(若未出效果,可重启nginx)

测试1:
在win10*问:192.168.40.11/index.jsp
Nginx高可用 Tomcat 实现动静分离
图片没有显示!!
因为没有把静态资源(图片)放入nginx站点目录下,所有没有正常显示:

cd /usr/local/nginx/html/
导入a.jpg b.jpg

测试2:
此时再访问:192.168.40.11/index.jsp
Nginx高可用 Tomcat 实现动静分离
Nginx高可用 Tomcat 实现动静分离
Keepalived 1:

yum -y install popt-devel kernel-devel openssl-devel
tar zxvf keepalived-2.0.13.tar.gz 
cd keepalived-2.0.13/
./configure --prefix=/
make && make install
cp keepalived/etc/init.d/keepalived /etc/init.d	#加入系统管理服务
vi /etc/init.d/keepalived 
# chkconfig: 35 21 79 
(- 改成35)

chmod +x /etc/init.d/keepalived 
chkconfig -add keepalived
chkconfig --list
systemctl enable keepalived.service

vi /etc/keepalived/keepalived.conf	#编辑配置文件
! Configuration File for keepalived
global_defs {
  router_id nginx1  #本服务器的名称
}
vrrp_script chk_http_port {
     script "/usr/local/src/nginx.sh"
     interval 2
     weight 2
}
vrrp_instance VI_1 {  #定义VRRP热备实例
state MASTER 	#热备状态,MASTER(主服务器)
interface ens33   #承载VIP地址的物理接口
virtual_router_id 51  #虚拟路由器的ID号,每个热备组保持一致
priority 110  #优先级,数值越大优先级越高
advert_int 1  #通告间隔秒数(心跳频率)
authentication {  #热备认证信息,每个热备组保持一致
  auth_type PASS  #认证类型
  auth_pass 8888  #密码字符串
 }
track_script {
       chk_http_port
}
virtual_ipaddress {  ##指定漂移地址(VIP)
 192.168.40.100
	}
}

vi /usr/local/src/nginx.sh	#添加检测脚本
#!/bin/bash
A=`ps -C nginx --no-header | wc -l`
if [ $A -eq 0 ]
then /usr/local/nginx/sbin/nginx
  if [ `ps -C nginx --no-header | wc -l` -eq 0 ]
  then  exit 1
  else  exit 0
  fi
else
 exit 0
fi

chmod +x /usr/local/src/nginx.sh 
systemctl start keepalived.service
systemctl status keepalived.service
ip addr	#检查漂移地址
tail -100 /var/log/messages  #查看日志

Keepalived 2:

与Keepalived 1 的部署步骤基本相同,
在vi /etc/keepalived/keepalived.conf中修改三项
    router_id nginx2
	state BACKUP
	priority 105

测试:
Nginx高可用 Tomcat 实现动静分离
Nginx高可用 Tomcat 实现动静分离
Nginx高可用 Tomcat 实现动静分离

本文地址:https://blog.csdn.net/Mr_XHC/article/details/111032711

相关标签: java nginx tomcat