Bootstrap

nginx和tomcat实现动静分离

一、动静分离架构

1.1 tomcat

1.1.1 概述

最初是由Sun的软件架构师詹姆斯.邓肯。戴维森开发

安装Tomcat后,安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件

1.1.2 目录结构

  • bin:存放启动和关闭Tomcat脚本
  • conf:存放Tomcat不同的配置文件
  • doc:存放Tomcat文档
  • lib:存放Tomcat运行需要的库文件
  • logs:存放Tomcat执行时的LOG文件
  • src:存放Tomcat的源代码
  • webapps:Tomcat的主要Web发布目录
  • work:存放jsp编译后产生的class文件

1.2 nginx

1.2.1 nginx优势

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

1.2.2 Nginx动静分离实现原理

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

在这里插入图片描述

二、实例实现高可用负载均衡

2.1 nfs存储服务器的配置

systemctl stop firewalld
setenforce 0
yum -y install nfs-utils rpcbind
mkdir -p /opt/web1/
mkdir -p /opt/web2/

# 网页内容的制作
vi /opt/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>

vi /opt/web2/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><title>tomcat2</title>
</head>(body><% out.println("this is tomcat2 server2");%>
<div>动态页面1</div><br/><img src="b/png" />
</body>
</html>

# nfs服务器分发的地址
vi /etc/exports
/opt/web1 192.168.10.13(ro)
/opt/web2 192.168.10.14(ro)
systemctl start nfs
systemctl restart rpcbind

最后可通过showmount -e 来查看nfs内容分发情况
在这里插入图片描述

2.2 tomcat动态节点

2.2.1 java环境的布置

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
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre
source /etc/profile
echo $PATH

# 测试java环境
vi abc.java
	public class abc {
   public static void main (String[] args) {
   System.out.println("你好,世界!");
}
}
javac abc.java
java abc

在这里插入图片描述说明java环境已经布置好,可以进行tomcat的安装

2.2.2 tomcat的安装

tar zxvf apache-tomcat-8.5.16.tar.gz
mv apache-tomcat-8.5.16 /usr/local/tomcat8
mkdir /webapp1
ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown

vi /usr/local/tomcat8/conf/server.xml
    <Host name="localhost"  appBase="webapps"
        unpackWARs="true" autoDeploy="true">
    <Context docBase="/webapp1" path="" reloadable="false">	# 为补充项
    </Context>
mount 192.168.10.19:/opt/web1 /webapp1/
tomcatup
netstat -anpt | grep 8080

# 然后在网页上面访问 http://localhost:8080 能够访问到动态网页即可
# 另一台tomcat节点上面的配置与本台节点相同

在这里插入图片描述在这里插入图片描述

2.3 nginx调度器上面的配置

仅实现负载均衡,不实现高可用的情况下:

systemctl disable firewalld
setenforce 0
yum -y install pcre-devel openssl-devel zlib-devel
tar zxvf nginx-1.12.2.tar.gz
useradd -M -s /sbin/nologin nginx
cd nginx-1.12.2
./configure --prefix=/usr/local/nginx --usr=nginx --group=nginx
make && make install
ln -s /usr/local/nginx/conf/nginx.conf /etc/
ln -s /usr/local/nginx/sbin/nginx /usr/bin
vi /etc/nginx.conf
#gzip  on;
upstream tomcat_server {
    server 192.168.10.13:8080 weight=1;
    server 192.168.10.14:8080 weight=1;
}
server {
    listen       80;
    server_name  localhost;
    }
    location ~ \.jsp$ {
        proxy_pass http://tomcat_server;
    }
nginx 
netstat -anpt | grep 80
# 通过网页可以访问到http://192.168.10.11链接到nginx网页,http://192.168.10.11/index.jsp被代理到tomcat节点,并且能够实现轮询负载均衡

在这里插入图片描述在这里插入图片描述
通过keepalived实现高可用:

# 实现keepalive群集
tar zxvf keepalived-2.0.13.tar.gz
yum -y install popt-devel kernel-devel openssl-devel
cd keepalived-2.0.13
./configure --prefix=/
make && make install
cp keepalived-2.0.13/keepalived/etc/init.d/keepalived /etc/init.d/
vi /etc/init.d/keepalived
# chkconfig: 35 21 79  # 运行界面修改为35
chkconfig --add keepalived
chkconfig --list
vi /etc/keepalived/keepalived.conf           # 需要重新配置文件里面的所有内容
! Configuration File for keepalived
globa_defs {
    router_id nginx1
}
vrrp_script chk_http_port {
    script "/usr/local/src/nginx.sh"
    interval 2
    weight 2
}
vrrp_instance vi_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 110
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}
track_script {
    chk_http_port
}
virtual_ipaddress {
    192.168.10.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
systemctl start keepalived.service
systemctl status keepalived.service

# 另一台nginx调度器上面的配置过程与第一台相同,只不过在配置文件的时候需要修改一下三项:
vi /etc/keepalived/keepalived.conf   
    router_id nginx2
    state BACKUP
    priority 105

此时该主机为主服务器,有虚拟ip通过命令可检查与备用服务器不同备用调度器只显示为backup状态
并且没有虚拟地址当我们将主调度器上面关闭keepalive服务后,虚拟地址将自行漂移到备用调度器上面,从而实现我们想要的高可用情景。

在这里插入图片描述

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;