Nginx+Tomcat动静分离+keepalived高可用

Nginx+Tomcat动静分离+keepalived高可用

一: 动静分离

  • 动静分离:
    将网站的静态资源(HTML,JavaScript,CSS,img等文件)与 后台应用 分开部署,提高用户访问静态代码的速度,降低对后台应用的访问。

  • 静态资源部署在Nginx上,
    后台项目部署到应用服务器上,根据一定规则使静态资源请求全部转到nginx服务器,达到动静分离的目的。

  • 静态资源部署在CDN(Content Delivery Network)内容分发网络
    将项目中的JavaScript,CSS以及img文件都存放在CDN服务器上,将HTML文件一起存放到CDN上之后,可以将静态资源统一放置在一种服务器上,便于前端进行维护;而且用户在访问静态资源时,可以很好利用CDN的优点

  • 后端API提供数据,后端应用提供API
    根据前端的请求进行处理,并将处理结果通过JSON格式返回至前端。目前应用主要采用Java平台开发,因此应用服务器主要是Tomcat服务器,现在也开始有部分应用采用node进行开发,应用服务器也开始使用node服务器

1.1 动静分离优缺点

  • 优点:API接口服务化;前后端开发并行;减轻后端服务器的压力,提高静态资源访问速度

  • 缺点:不利于网站SEO(搜索引擎优化);开发量变大;在业务高速发展时需要慎重考虑

1.2 动静分离场景

  1. 静态文件访问量大,服务器负载高,I/O问题导致用户访问卡顿
  2. 静态文件数量大,服务器存储空间不够
  3. 静态文件用户访问量大,且分布在各地
  4. 并发下载量高

二: Nginx+Tomcat实现动静分离

  • 由于Tomcat本身处理静态效率不高,还会带来资源消耗,因此使用动静分离,将静态请求交由Nginx处理,动态请求交由Tomcat处理

  • Nginx根据客户端请求的url来判断请求的是否是静态资源,如果请求的url包含jpg、png,则由Nginx处理;如果请求的url是.php或者.jsp等,则被认为是动态的,将转发tomcat处理。即Nginx通过url来区分请求的类型,并且转发给不同的服务端

  • 网络结构图:
    在这里插入图片描述

三、操作

3.1 环境

nginx1 ip:192.168.100.10 主调度器
nginx2 ip:192.168.100.11 从调度器
tomcat1 ip:192.168.100.12
tomcat2 ip:192.168.100.13
nfs服务器 ip:192.168.100.14
验证访问客户端 ip:192.168.100.15

3.2 配置nfs服务器

  1. 安装nfs-utils rpcbind
yum -y install nfs-utils rpcbind
  1. 创建目录存放资源
mkdir /web1
mkdir /web2
  1. 编辑共享jsp网页资源
vim /web1/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>	  
<html>								  
  <head>								  
    <title>tomcat1</title>					  
  </head>								  
  <body>								  
  <% out.println ("This is tomcat1 server"); %>		  
  <div>动态页面</div><br/><img src="a.jpg" />				  
  </body>								  
</html>		
:wq			
vim /web2/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>	  
<html>								  
  <head>								  
    <title>tomcat2</title>		                     //这里不同			  
  </head>								  
  <body>								  
  <% out.println ("This is tomcat2 server"); %>		  //这里不同 
  <div>动态页面</div><br/><img src="b.jpg" />	      //这里不同			  
  </body>								  
</html>	
:wq				
  1. 编辑配置文件
vim /etc/exports
/web1 192.168.100.12(ro)
/web2 192.168.100.13(ro)
:wq
  1. 启动nfs systemctl start nfs
systemctl start nfs
systemctl start rpcbind

3.3 配置tomcat

3.3.1 配置java环境

  1. 解压jdk
tar zxvf jdk-8u91-linux-x64.tar.gz -C /opt
mv /opt/jdk1.8.0_91 /usr/local/java
  1. PATH环境变量添加java路径
cd /etc/profile.d/
vim java.sh
export JAVA_HOME=/usr/local/java/                //设置java根目录
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre             //在PATH环境变量中添加java根目录下的bin子目录
  1. 测试
source java.sh
echo $PATH		 			
java -version       //查看版本

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

写段Java小脚本,测试是否能正常工作

vim test.java
public class test {
    
    
  public static void main (String[] args) {
    
    
    System.out.println("你好,世界!!!");
  }
}
执行:javac test.java   编译后生成可执行文件
测试:java test  原样输出则为成功!

在这里插入图片描述

3.3.2 tomcat

  1. 安装tomcat
tar zxvf apache-tomcat-8.5.16.tar.gz -C /opt/
mv apache-tomcat-8.5.16 /usr/local/tomcat8
  1. tomcat启动和关闭
/usr/local/tomcat8/bin/startup.sh
netstat -anpt | grep 8080
/usr/local/tomcat8/bin/shutdown.sh   //关闭tomcat
netstat -anpt | grep 8080

在这里插入图片描述
3. 链接tomcat启动关闭程序

ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
  1. 创建网页资源挂载点,并挂载
mkdir /webapp1
mkdir /webapp2
mount 192.168.100.14:/web1 /webapp1
mount 192.168.100.14:/web2 /webapp2
  1. 编辑tomcat的server.xml配置文件
vim /usr/local/tomcat8/conf/server.xml
<Host name="localhost" appBase="webapps"
	       unpackWARs="true" autoDeploy="true">

<Context docBase="/webapp1" path="" reloadable="false">
</Context>                                                 //添加//
</Host>
  //注释:docBase   web应用的文档基准目录
  //reloadable:值为true时,当web.xml或者class有改动的时候,都会自动reload无需重启的服务
 // path=""  指定访问路径uri  ,访问url路径下是否跟内容

3.3.3 安装nginx并配置调度

  1. 编译安装nginx
yum -y install pcre-devel zlib-devel openssl-devel
useradd -M -s /sbin/nologin nginx
tar zxvf nginx-1.12.2 -C /opt
cd /opt/nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx \
--with-file-aio \                 //同时提交多个io请求给内核
--with-http_stub_status_module \      //状态统计
--with-http_gzip_static_module \
--with-http_flv_module \         //支持对FLV(flash)文件的拖动播放
--with-http_ssl_module          //支持安全ssl模块
make && make install 
  1. 编辑nginx配置文件实现动静分离
vim /usr/local/nginx/conf/nginx.conf
      keepalive_timeout   65;
      #gzip on;
   添加:   upstream tomcat_server {
    
                   //添加
          server 192.168.100.12:8080 weight=1;
          server 192.168.100.13:8080 weight=1;
       }
       
       server {
    
    
           listen       80;
            ... ... 省略
          location / {
    
    
	        root html;
	        index index.html index.htm;
          }
   ######添加
             location ~ \.jsp$ {
    
                    //添加
	           proxy_pass http://tomcat_server;
             }
         }
:wq
  1. 链接nginx启动程序
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx -t
  1. 测试动静分离效果
    浏览器访问 http://192.168.100.10/index.jsp
    http://192.168.100.10/index.jsp 图片不显示
    使用抓包软件 发现静态资源图片 是在nginx服务器上查找的。
    所以需要把资源放在nginx中 /usr/local/nginx/html
    在这里插入图片描述
    在这里插入图片描述

四、nginx+keepalived高可用

4.1 nginx主调度器

  1. 编译安装keepalived
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
  1. 复制keepalived init.d文件
cp keepalived/etc/init.d/keepalived /etc/init.d/
  1. 编辑keepalived配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
    
    
  notification_email {
    
    
    1391578633@qq.com
  }
  notification_email_from sns-lvs@gmail.com
  smtp_server smtp.qq.com
  smtp_connection_timeout 30
  router_id nginx_master                   //可以只设置这一个
}
vrrp_script chk_http_port {
    
    
  script "/usr/local/src/check_nginx_pid.sh"       //最后手动执行此脚本,确保它正常执行
  interval 2
  weight -20
}
vrrp_instance VI_1 {
    
    
  state MASTER
  interface ens33                 
  virtual_router_id 66           //虚拟路由编号,主从一致
  priority 110
  advert_int 1
  authentication {
    
    
	auth_type PASS
	auth_pass 1111
  }
  track_script {
    
    
  chk_http_port                        //调用脚本
  }
  virtual_ipaddress {
    
    
	192.168.100.200  
  }
}
:wq
  1. 编辑定义的脚本文件
vim /usr/local/src/check_nginx_pid.sh       //检测是否开启nginx服务,并开启nginx服务
#!/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
:wq
chmod +x /usr/local/src/check_nginx_pid.sh
  1. 启动nginx服务器
nginx
  1. 启动keepalived
systemctl start keepalived

4.2 nginx从调度器

配置和主服务器大致相同,只有3处不同

  router_id nginx_backup
  state BACKUP
  priority 105

4.3 验证效果

访问VIP 192.168.100.200/index.jsp
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_46480020/article/details/111028050
今日推荐