Tomcat+Nginx实现动静分离和负载均衡架构部署

Tomcat+Nginx实现动静分离和负载均衡架构部署

  • Tomcat
    • Tomcat简介
    • Tomcat重要目录
    • Tomcat部署与测试网站的搭建
  • Nginx
    • Nginx应用
    • Nginx负载均衡实现原理
    • Nginx动静分离实现原理
    • Nginx配置负载均衡、动静分离
  • 实现动静分离和负载均衡架构部署项目
    • 项目准备
    • 项目配置

Tomcat

Tomcat简介

  • 最初是由Sun的软件构架师詹姆斯邓肯.戴维森开发
  • 安装Tomcat后, 安装路径下面的目录和文件,是使用或者配置Tomcat的重要文件

Tomcat重要目录

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

Tomcat部署与测试网站的搭建

  • 要求部署两台后端Tomcat服务器
  • 为了进行测试,搭建两个内容不同的网站
  • Tomcat部署与网站搭建步骤
    • 关闭firewall防火墙
    • 安装JDK,配置JAVA环境
    • 安装Tomcat
    • 创建 /web/webapp1目录,修改server.html,将网站文件目录更改到/web/webapp1/路径下
    • /web/webapp1/下建立测试页面index.jsp,并进行测试

Nginx

Nginx应用

  • Nginx是一款非常优秀的HTTP服务器软件
    • 支持高达50000个并发连接数的响应
    • 拥有强大的静态资源处理能力
    • 运行稳定
    • 内存、CPU等系统资源消耗非常低
  • 目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力

Nginx负载均衡实现原理

  • Nginx实现负载均衡是通过反向代理实现
  • 反向代理原理
    Tomcat+Nginx实现动静分离和负载均衡架构部署_第1张图片
  • Nginx配置反向代理的主要参数
    • upstream 服务池名 { }
      • 配置后端服务器池,以提供响应数据
    • proxy_pass http://服务池名
      • 配置将访问请求转发给后端服务器池的服务器处理

Nginx动静分离实现原理

  • 动静分离原理
    • 服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端
      Tomcat+Nginx实现动静分离和负载均衡架构部署_第2张图片
  • Nginx静态处理优势
    • Nginx处理静态页面的效率远高于Tomcat的处理能力
    • 若Tomcat的请求量为1000次,则Nginx的请求量为6000次
    • Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
    • Nginx处理静态资源的能力是Tomcat处理的6倍

Nginx配置负载均衡、动静分离

  • 在Nginx服务器上安装Nginx,反向代理两个Tomcat站点,并实现负载均衡
    • 关闭Firewalld防火墙
    • 安装Nginx依赖软件包
    • 解压并编译安装Nginx
    • 配置nginx.conf,添加location静态页面处理及添加upstream配置段与proxy_pass
    • 检测配置文件与启动Nginx
    • 测试负载均衡、动静分离效果

实现动静分离和负载均衡架构部署项目

项目准备

nginx1 : 20.0.0.13
nginx2 : 20.0.0.14
tomcat1 : 20.0.0.15
tomcat2 : 20.0.0.16
nfs : 20.0.0.17
client : 20.0.0.18

项目配置

在nfs上

[root@nfs ~]# systemctl stop firewalld
[root@nfs ~]# setenforce 0
[root@nfs ~]# mkdir /web1
[root@nfs ~]# mkdir /web2
[root@nfs ~]# cd /web1
[root@nfs web1]# vi 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="1.jpg" />
</body>
</html>

[root@nfs web1]# cp index.jsp /web2
[root@nfs web1]# cd /web2
[root@nfs web2]# vi 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="2.jpg" />
</body>
</html>

[root@nfs web2]#cd

Tomcat+Nginx实现动静分离和负载均衡架构部署_第3张图片

Tomcat+Nginx实现动静分离和负载均衡架构部署_第4张图片

[root@nfs ~]# vi /etc/exports

/web1 20.0.0.15(ro)
/web2 20.0.0.16(ro)

[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl restart rpcbind
[root@nfs ~]# showmount -e

Tomcat+Nginx实现动静分离和负载均衡架构部署_第5张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第6张图片
在tomcat1上编辑
先加入安装包
Tomcat+Nginx实现动静分离和负载均衡架构部署_第7张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第8张图片

[root@tomcat1 ~]# systemctl stop firewalld
[root@tomcat1 ~]# setenforce 0
[root@tomcat1 ~]# ll
[root@tomcat1 ~]# tar zxvf apache-tomcat-8.5.16.tar.gz #解压软件包
[root@tomcat1 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz
[root@tomcat1 ~]# mv jdk1.8.0_91/ /usr/local/java
[root@tomcat1 ~]# vi /etc/profile

在末尾添加
export JAVA_HOME=/usr/local/java # 设置全局变量
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre #设置环境变量

[root@tomcat1 ~]# source /etc/profile
[root@tomcat1 ~]# echo $PATH
[root@tomcat1 ~]# java -version #查看版本
[root@tomcat1 ~]# vi abc.java #编写一个Java小程序来验证

public class abc {
     
        public static void main (String[] args) {
     
                System.out.println("你好。。。。。");
        }
}

[root@tomcat1 ~]# javac abc.java #编译
[root@tomcat1 ~]# java abc
#可以显示出测试内容,则Java组件是好的

Tomcat+Nginx实现动静分离和负载均衡架构部署_第9张图片
在这里插入图片描述
Tomcat+Nginx实现动静分离和负载均衡架构部署_第10张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第11张图片
安装tomcat

先解压缩安装包
[root@tomcat1 ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8
[root@tomcat1 ~]# mkdir /webapp1
[root@tomcat1 ~]# mount 20.0.0.17:/web1 /webapp1 #挂载
[root@tomcat1 ~]# df -Th
[root@tomcat1 ~]# vi /usr/local/tomcat8/conf/server.xml #站点目录

Tomcat+Nginx实现动静分离和负载均衡架构部署_第12张图片

 [root@tomcat1 ~]# vi /usr/local/tomcat8/conf/server.xml 
 添加
 <Context docBase="/webapp1" path="" reloadable="false">
 </Context>

验证
[root@tomcat1 ~]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@tomcat1 ~]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown

[root@tomcat1 ~]#tomcatup
[root@tomcat1 ~]# netstat -anpt | grep 8080
[root@tomcat1 ~]# curl http://localhost:8080

Tomcat+Nginx实现动静分离和负载均衡架构部署_第13张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第14张图片
在/webapp1的文件夹中加入图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第15张图片
访问测试

在tomcat2上
步骤与部署tomcat1一致
修改web1,webapp1为web2,webapp2即可
在webapp2文件中加入
Tomcat+Nginx实现动静分离和负载均衡架构部署_第16张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第17张图片
访问测试
Tomcat+Nginx实现动静分离和负载均衡架构部署_第18张图片
部署调度器
在nginx1上部署
先添加nginx,keepalived安装包
Tomcat+Nginx实现动静分离和负载均衡架构部署_第19张图片

[root@nginx1 ~]# ls -lh
[root@nginx1 ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel
[root@nginx1 ~]# useradd -M -s /sbin/nologin nginx  #创建不可登录,不带宿主的用户
[root@nginx1 ~]# tar zxvf nginx-1.12.2.tar.gz      # 解压缩
[root@nginx1 ~]# cd nginx-1.12.2/
[root@nginx1 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx   #安装路径,属主,属组设置
[root@nginx1 nginx-1.12.2]# make && make install  # 编译安装
[root@nginx1 nginx-1.12.2]# ln -s /usr/local/nginx/conf/nginx.conf /etc/     #创建设置链接
[root@nginx1 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/    #  创建命令链接
[root@nginx1 nginx-1.12.2]# cd

Tomcat+Nginx实现动静分离和负载均衡架构部署_第20张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第21张图片

[root@nginx1 ~]# vi /usr/local/nginx/conf/nginx.conf

upstream tomcat_server {
     
             server 20.0.0.15:8080 weight=1;
             server 20.0.0.16:8080 weight=1;
}
        location ~ \.jsp$ {
     
             proxy_pass http://tomcat_server;  
}

[root@nginx1 ~]# nginx -t   #检查语法
[root@nginx1 ~]# nginx    #服务启动
[root@nginx1 ~]# netstat -anpt | grep 80  # 查看端口状态

Tomcat+Nginx实现动静分离和负载均衡架构部署_第22张图片
在/usr/local/nginx/html中添加图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第23张图片

访问测试
Tomcat+Nginx实现动静分离和负载均衡架构部署_第24张图片
安装keepalived

[root@nginx1 ~]# modprobe ip_vs #加载ip_vs模块
[root@nginx1 ~]# yum -y install ipvsadm.x86_64 #安装管理软件ipvsadm
[root@nginx1 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel #安装编译工具及插件
[root@nginx1 ~]# tar zxvf keepalived-2.0.13.tar.gz #解压keepalived安装包
[root@nginx1 ~]# cd keepalived-2.0.13/
[root@nginx1 keepalived-2.0.13]# ./configure --prefix=/ #配置安装到/目录下
[root@nginx1 keepalived-2.0.13]# make && make install #编译与安装
[root@nginx1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d/ #加入系统管理服务,用以支持systemctl管理
[root@nginx1 keepalived-2.0.13]# systemctl enable keepalived #设置开机启动
[root@nginx1 keepalived-2.0.13]# 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 {
     
     state MASTER
     interface ens33    
     virtual_router_id 51   #虚拟路由编号,主从要一致
     priority 110            #优先级
     adver_int 1             #检查间隔,默认为1s (vrrp组播周期秒数)
     authentication {
     
          auth_type PASS
          auth_pass 1111
}
track_script {
              
       chk_http_port     #调用检测脚本  
}
virtual_ipaddress {
     
     20.0.0.100    虚拟ip
}
}

[root@nginx1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d
[root@nginx1 keepalived-2.0.13]# vi /etc/init.d/keepalived   
[root@nginx1 keepalived-2.0.13]# chmod 755 /etc/init.d
[root@nginx1 keepalived-2.0.13]# chkconfig --add keepalived
[root@nginx1 keepalived-2.0.13]# chkconfig --list

# chkconfig: 35 21 79  运行级别

Tomcat+Nginx实现动静分离和负载均衡架构部署_第25张图片

Tomcat+Nginx实现动静分离和负载均衡架构部署_第26张图片
配置keepalived
Tomcat+Nginx实现动静分离和负载均衡架构部署_第27张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第28张图片
编写脚本

[root@nginx1 keepalived-2.0.13]# vi /usr/local/src/nginx.sh
[root@nginx1 keepalived-2.0.13]# chmod +x /usr/local/src/nginx.sh
[root@nginx1 keepalived-2.0.13]# systemctl start keepalived
[root@nginx1 keepalived-2.0.13]# systemctl status keepalived
[root@nginx1 ~]# tail -100 /var/log/messages  #查看日志
[root@nginx1 ~]# ip addr   #查看虚拟地址

Tomcat+Nginx实现动静分离和负载均衡架构部署_第29张图片

Tomcat+Nginx实现动静分离和负载均衡架构部署_第30张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第31张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第32张图片

在nginx2上
添加安装包
Tomcat+Nginx实现动静分离和负载均衡架构部署_第33张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第34张图片
在html文件中添加图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第35张图片

[root@nginx2 ~]# ls -lh
[root@nginx2 ~]# yum -y install gcc gcc-c++ make pcre-devel zlib-devel
[root@nginx2 ~]# useradd -M -s /sbin/nologin nginx  #创建不可登录,不带宿主的用户
[root@nginx2 ~]# tar zxvf nginx-1.12.2.tar.gz       #解压缩
[root@nginx2 ~]# cd nginx-1.12.2/
[root@nginx2 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx   #安装路径,属主,属组设置
[root@nginx2 nginx-1.12.2]# make && make install   #编译安装
[root@nginx2 nginx-1.12.2]# ln -s /usr/local/nginx/conf/nginx.conf /etc/     #创建设置链接
[root@nginx2 nginx-1.12.2]# ln -s /usr/local/nginx/sbin/nginx /usr/sbin/      #创建命令链接
[root@nginx2 nginx-1.12.2]# cd
[root@nginx2 ~]# cd /usr/local/nginx/html
添加图片

Tomcat+Nginx实现动静分离和负载均衡架构部署_第36张图片

Tomcat+Nginx实现动静分离和负载均衡架构部署_第37张图片
访问测试
Tomcat+Nginx实现动静分离和负载均衡架构部署_第38张图片
在nginx2上安装keepalived

与nginx1上配置相同
[root@nginx2 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@nginx2 ~]# tar zxvf keepalived-2.0.13.tar.gz    #解压缩
[root@nginx2 ~]# cd keepalived-2.0.13/
[root@nginx2 keepalived-2.0.13]# ./configure --prefix=/      #路径设置
[root@nginx2 keepalived-2.0.13]# make && make install   #编译安装
[root@nginx2 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d
[root@nginx2 keepalived-2.0.13]# vi /etc/init.d/keepalived   
[root@nginx2 keepalived-2.0.13]# chmod 755 /etc/init.d
[root@nginx2 keepalived-2.0.13]# chkconfig --add keepalived
[root@nginx2 keepalived-2.0.13]# chkconfig --list

添加运行级别
# chkconfig: 35 21 79

[root@nginx2 keepalived-2.0.13]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
     
     router_id nginx2      
}
vrrp_script chk_http_port {
     
     script "/usr/local/src/nginx.sh"  
     interval 2          
     weight 2
}
vrrp_instance vi_1 {
     
     state BACKUP
     interface ens33    
     virtual_router_id 51   
     priority 105
     adver_int 1             
     authentication {
     
          auth_type PASS
          auth_pass 1111
}
track_script {
              
       chk_http_port     
}
virtual_ipaddress {
     
     20.0.0.100    
}
}


Tomcat+Nginx实现动静分离和负载均衡架构部署_第39张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第40张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第41张图片
编写脚本

[root@nginx2 keepalived-2.0.13]# vi /usr/local/src/nginx.sh
[root@nginx2 keepalived-2.0.13]# chmod +x /usr/local/src/nginx.sh
[root@nginx2 keepalived-2.0.13]# systemctl start keepalived
[root@nginx2 keepalived-2.0.13]# systemctl status keepalived

#!/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

[root@nginx2 keepalived-2.0.13]# tail -100 /var/log/messages
[root@nginx2 keepalived-2.0.13]# ip addr

Tomcat+Nginx实现动静分离和负载均衡架构部署_第42张图片

Tomcat+Nginx实现动静分离和负载均衡架构部署_第43张图片
Tomcat+Nginx实现动静分离和负载均衡架构部署_第44张图片

关闭主调度器上面的keepalive服务后,虚拟地址将自行漂移到备用调度器上面
Tomcat+Nginx实现动静分离和负载均衡架构部署_第45张图片

你可能感兴趣的:(Linux)