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

群集 专栏收录该内容
9 篇文章 0 订阅

1、Tomcat简介

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

1.1、Tomcat重要目录

■ bin :存放启动和关闭Tomcat脚本

■ conf :存放Tomcat坏同的配置文件

■ doc: 存放Tomcat文档

■ lib: 存放Tomcat运行需要的库文件

■ logs:存放Tomcat执行时的LOG文件

■ src: 存放Tomcat的源代码

■ webapps: Tomcat的主要Web发布目录

■ work:存放jsp编译后产生的class文件

2、Nginx应用

■ Nginx是一款非常优秀的HTTP服务器软件容
● 支持高达50 000个并发连接数的响应
● 拥有强大的静态资源处理能力
● 运行稳定
● 内存、CPU等系统资源消耗非常低

■ 目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力

2.1、Nginx负载均衡实现原理

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

■ Nginx配置反向代理的主要参数
● upstream 服务池名{ }
◆ 配置后端服务器池,以提供响应数据
●proxy_ pass http://服务池名
◆配置将访问请求转发给后端服务 器池的服务器处理

■ 动静分离原理
●服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端

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

三、实例:Nginx+Tomcat 负载均衡动静分离双机热备测试测试设备配置:

调度器两台(双机热备)
IP地址:192.168.74.10(主)
IP地址:192.168.74.20(备)
web服务器两台
IP地址:192.168.74.30(tomcat1)
IP地址:192.168.74.40(tomcat2)
NFS服务器
IP地址:192.168.74.50
客户端电脑一台
IP地址:192.168.74.60
在这里插入图片描述

3、部署流程

3.1、进入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="a.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>动态页面2</div><br/><img src="b.jpg" />
</body>
</html>

在这里插入图片描述

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

在这里插入图片描述

[root@nfs ~]# systemctl start nfs   #服务开启
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl status nfs
[root@nfs ~]# systemctl status rpcbind

在这里插入图片描述

[root@nfs ~]# showmount -e                #查看共享情况

在这里插入图片描述

3.2、进入节点服务器tomcat1,tomcat2进行配置

3.21、放入安装包进行解压缩

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

3.22、tomcat1配置

[root@tomcat1 ~]# systemctl stop firewalld
[root@tomcat1 ~]# setenforce 0
[root@tomcat1 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz   #解压缩
[root@tomcat1 ~]# mv jdk1.8.0_91/ /usr/local/java      #剪切到usr/local下生成java目录
[root@tomcat1 ~]#  vi /etc/profile                    #配置文件的修改
export JAVA_HOME=/usr/local/java                   #设置全局变量,后面跟它的目录设置JAVA根目录设为全局变量
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre    #设置环境变量,引用老的环境,后面跟新的环境变量

在这里插入图片描述

将java.sh脚本导入到环境变量,使其生效                                                                        
[root@tomcat1 ~]# source /etc/profile     #进行调用
[root@tomcat1 ~]# echo $PATH                 #输出环境信息
[root@tomcat1 ~]# java -version               #查看版本信息

在这里插入图片描述

编写java脚本测试java是否可以正常使用
[root@tomcat1 ~]# vi abc.java           #编写Java脚本

在这里插入图片描述

public class abc {     定义类
        public static void main (String[] args) {
        System.out.println("hello world!!!"); 输出
      }
}
[root@tomcat1 ~]# javac abc.java           #编译脚本
[root@tomcat1 ~]# java abc                    #执行脚本

在这里插入图片描述

3.23、tomcat2配置

[root@tomcat2 ~]# systemctl stop firewalld
[root@tomcat2 ~]# setenforce 0
[root@tomcat2 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz              #解压缩
[root@tomcat2 ~]# mv jdk1.8.0_91/ /usr/local/java                 #剪切到usr/local下生成java目录
[root@tomcat2 ~]#  vi /etc/profile                #配置文件的修改
export JAVA_HOME=/usr/local/java                  #设置全局变量,后面跟它的目录设置JAVA根目录设为全局变量
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre   #设置环境变量,引用老的环境,后面跟新的环境变量
 [root@tomcat2 ~]# source /etc/profile            #进行调用
[root@tomcat2 ~]# echo $PATH                      #输出环境信息
[root@tomcat2 ~]# java -version                   #查看版本信息

在这里插入图片描述

编写java脚本测试java是否可以正常使用
[root@tomcat2 ~]# vi abc.java           #编写Java脚本

在这里插入图片描述

[root@tomcat2 ~]# javac abc.java       #编译脚本
[root@tomcat2 ~]# java abc                 #输出脚本

在这里插入图片描述

3.3、进入节点服务器1,进行tomcat的安装

[root@tomcat1 ~]# tar zxvf apache-tomcat-8.5.16.tar.gz #解压缩
[root@tomcat1 ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8               #进行目录剪切
[root@tomcat1 ~]# mkdir /webapp1   #创建站点目录
[root@tomcat1 ~]# mount 192.168.74.50:/web1 /webapp1/  #将NFS资源挂载到本地

在这里插入图片描述

在配置文件里面修改站点目录
[root@tomcat1 ~]# vi /usr/local/tomcat8/conf/server.xml

在这里插入图片描述

注:docBase:web应用的文档基准目录
path=""指定访问路径URI(虚拟目录名),访问url路径下是否跟内容
reloadable:本项为true时,当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务(所谓的支持热发布功能)
<Host name=“localhost” appBase=“webapps”中localhost:指的是本地主机名,不是域名

[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

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

3.4、进入节点服务器2,进行tomcat的安装

[root@tomcat2 ~]# tar zxvf apache-tomcat-8.5.16.tar.gz #解压缩
[root@tomcat2 ~]# mv apache-tomcat-8.5.16/ /usr/local/tomcat8    #进行目录剪切
[root@tomcat2 ~]# mkdir /webapp2                      #创建站点目录
[root@tomcat2 ~]# mount 192.168.74.50:/web2 /webapp2/  #将NFS资源挂载到本地

在这里插入图片描述

在配置文件里面修改站点目录
[root@tomcat2 ~]# vi /usr/local/tomcat8/conf/server.xml

在这里插入图片描述

[root@tomcat2 ~]# ln -s /usr/local/tomcat8/bin/startup.sh /usr/bin/tomcatup
[root@tomcat2 ~]# ln -s /usr/local/tomcat8/bin/shutdown.sh /usr/bin/tomcatdown
[root@tomcat2 ~]# tomcatup       #启动服务
[root@tomcat2 ~]# netstat -anpt | grep 8080    #查看端口信息

在这里插入图片描述

[root@tomcat2 ~]# curl http://localhost:8080

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

3.5、进入调度器Nginx1,Nginx2进行配置

3.51、放入安装包进行解压缩

[root@nginx1 ~]# systemctl stop firewalld
[root@nginx1 ~]# setenforce 0

在这里插入图片描述

3.52、进入调度器Nginx1进行配置

[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
[root@nginx1 ~]# vi /usr/local/nginx/conf/nginx.conf   #修改配置文件
添加upstream服务池
upstream tomcat_server {
             server 192.168.74.30:8080 weight=1;
              节点      ip地址  端口号  权重
             server 192.168.74.40:8080 weight=1;
}

        location ~ \.jsp$ {
             proxy_pass http://tomcat_server;  
}                                          服务地址池名

在这里插入图片描述

[root@nginx1 ~]# nginx -t

在这里插入图片描述

[root@nginx1 ~]# nginx 
[root@nginx1 ~]# netstat -anpt | grep 80 

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

[root@nginx1 ~]# cd /usr/local/nginx/html/

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

3.53、进入调度器Nginx2进行配置

[root@nginx2 ~]# systemctl stop firewalld
[root@nginx2 ~]# setenforce 0
[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 ~]# vi /usr/local/nginx/conf/nginx.conf   #修改配置文件
添加upstream服务池
upstream tomcat_server {
             server 192.168.74.30:8080 weight=1;
              节点      ip地址  端口号  权重
             server 192.168.74.40:8080 weight=1;
}

        location ~ \.jsp$ {
             proxy_pass http://tomcat_server;  
}                                          服务地址池名

在这里插入图片描述

[root@nginx2 ~]# nginx -t

在这里插入图片描述

[root@nginx2 ~]# nginx 
[root@nginx2 ~]# netstat -anpt | grep 80 

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

[root@nginx2 ~]# cd /usr/local/nginx/html/

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

3.6、进入调度器Nginx1安装keepalived

[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   #解压缩
[root@nginx1 ~]# cd keepalived-2.0.13/
[root@nginx1 keepalived-2.0.13]# ./configure --prefix=/   #设置路径
[root@nginx1 keepalived-2.0.13]# make && make install #编译安装

注:popt库的存在,主要是为了解析命令行选项。相比手动的解析argv数组或者使用getopt函数getopt( )或getopt_long( ), 使用popt库在很多方面都占有优势。popt的一些特点:它不使用全局变量,因此可以并行解析argv;它可以解析任意的argv风格的元素数组,可以解析来自任何源文件的命令行字符串(ps:估计是命令行字符串参数可保存在文件中,程序通过导入配置文件解析获得参数) ;它提供了一个使用选项别名的标准方法(后面会再讨论);它可以执行外部选项过滤器;最后,它能够自动生成程序的help和usage信息。
kernel-devel:做内核一般开发的,比如编写内核模块,原则上,可以不需要内核的源代码

[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

在这里插入图片描述

[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 {    vrrp脚本
     script "/usr/local/src/nginx.sh"  脚本路径 最后手动执行此脚本,以确保脚本能够正常运行
     interval 2          检测间隔时间 单位秒
     weight 2
}
vrrp_instance vi_1 {       实例名称
     state MASTER        指定keepalived的角色,MASTER为主,BACKUP为备
     interface ens33    当前进行vrrp通讯的网络接口卡
     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 {
     192.168.74.100    定义虚拟ip(VIP}
}

在这里插入图片描述

[root@nginx1 keepalived-2.0.13]# 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
[root@nginx1 keepalived-2.0.13]# chmod +x /usr/local/src/nginx.sh
[root@nginx1 keepalived-2.0.13]# systemctl start keepalived.service 
[root@nginx1 keepalived-2.0.13]# systemctl status keepalived.service

在这里插入图片描述

[root@nginx1 keepalived-2.0.13]# cd
[root@nginx1 ~]# tail -100 /var/log/messages    #查看日志

在这里插入图片描述

[root@nginx1 ~]# ip addr

在这里插入图片描述

3.7、进入调度器Nginx2安装keepalived

[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

在这里插入图片描述

[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 {
     192.168.74.100    
}
}
~                                                                                                                                     
:wq

在这里插入图片描述

[root@nginx2 keepalived-2.0.13]# 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
[root@nginx2 keepalived-2.0.13]# chmod +x /usr/local/src/nginx.sh
[root@nginx2 keepalived-2.0.13]# systemctl start keepalived.service 
[root@nginx2 keepalived-2.0.13]# systemctl status keepalived.service

在这里插入图片描述

[root@nginx2 keepalived-2.0.13]# cd
[root@nginx2 ~]# tail -100 /var/log/messages    #查看日志

在这里插入图片描述

[root@nginx2 ~]# ip addr

在这里插入图片描述

3.8、打开浏览器,访问虚拟地址,查看调度效果

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

3.9、当主调度器出现故障,查看效果

[root@nginx1 ~]# systemctl stop keepalived.service  #关掉主调度器

在这里插入图片描述

[root@nginx2 ~]# ip addr

在这里插入图片描述

[root@nginx2 ~]# tail -50 /var/log/messages

在这里插入图片描述

3.10、当一台调度器出现故障,打开浏览器,访问虚拟地址,查看调度效果

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

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论
请先登录 后发表评论~
©️2021 CSDN 皮肤主题: 1024 设计师:白松林 返回首页

打赏作者

繁星若渺

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值