nginx+tomcat+nfs →web集群部署

nginx+tomcat+nfs  →web集群部署

 一.安装前介绍

  1. NGINX是一个高性能的Web服务器和反向代理服务器。它能够处理静态内容,缓存请求结果,以及将请求转发给后端服务器。通过反向代理,NGINX能够实现请求的负载均衡、安全性增强、SSL加密等功能。此外,NGINX还具有强大的模块化架构和配置灵活性,可以轻松地定制以满足特定需求。
    Tomcat是一个开源的Java Servlet容器,用于提供Web应用程序的运行环境。它支持Java EE标准,并能够运行各种Java Web应用程序。通过部署Web应用程序到Tomcat上,我们可以轻松地实现动态内容的生成和交互功能。
    NFS(Network File System)是一种分布式文件系统协议,用于在网络上的计算机之间共享文件。通过NFS共享,我们可以将静态文件(如图片、CSS、JavaScript等)存储在一个集中的位置,并由所有Web服务器共享访问。这有助于提高文件的访问速度和可靠性,减少存储空间的使用和冗余。
    在构建高性能的Web应用服务器时,我们可以通过以下步骤将NGINX、Tomcat和NFS共享集成在一起:

  2. 安装NGINX并配置反向代理规则。在NGINX的配置文件中,指定代理服务器的地址、端口、、缓存设置等参数。
  3. 安装Tomcat并配置Web应用程序的运行环境。在Tomcat的配置文件中,指定应用程序的部署路径、内存限制等参数。
  4. 配置NFS共享以实现文件共享。这包括在NFS服务器上安装NFS服务、创建共享目录、在客户端上挂载共享目录。在挂载时,指定NFS服务器的地址、共享目录的路径等参数。
    通过以上步骤,我们可以构建一个高性能的Web应用服务器,实现负载均衡、反向代理、动态内容生成和文件共享等功能。在实际应用中,我们需要注意监控服务器的性能指标、调整配置参数以提高性能和可靠性、以及定期备份和维护服务器等措施。同时,我们还需要关注安全问题,如防止恶意攻击、保护敏感数据等。

二.服务器架构如下

 架构解析:nginx代理外部的web访问请求,由两台到多台tomcat服务器提供真实的web服务,为了保证所有用户访问网站的统一性,所有tomcat服务器的网站根目录指向NFS(图中Database服务器)共享目录。

架构作用:提升网站吞吐性能,保持web架构一定的冗余性(仅tomcat)

部署需要至少4台服务器,服务器操作系统版本centos7.9,外网通。

服务器部署顺序为:NFS→tomcat→nginx

您只需将对应脚本上传到对应服务器执行即可,tomcat安装包csdn搜索下载对应版本再上传到服务器对应目录即可(具体安装包版本运行脚本时有提示)。

三.部署脚本如下:

NFS:

#!/bin/bash
#function:nfs
#author:tommypeng 20220714 final version
##########################################
 if
  [  "$USER"  != "root"   ]
then
   echo "错误:非root用户,权限不足!"
  exit  0
fi
###############防火墙及SElinux############
systemctl stop firewalld && systemctl disable firewalld  && echo "防火墙已经关闭"
sed -i 's/SELINUX=.*/SELINUX=disabled/g'  /etc/selinux/config  && echo "关闭selinux"
echo  "脚本所需安装包请访问作者个人网站:https://www.huoshichong.cn/index.php/download.html"
sleep 10
###############网络############
ping -c 3   www.baidu.com
if
   [ $? -eq 0 ]
   then
   echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32m网络畅通,即将安装依赖包\033[0m"
   else 
     echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32m即将退出,请检查外网通讯 !\033[0m"
        exit  0
fi
##################NFS#####################
yum install -y rpc* nfs-utils  &&   echo  "NFS安装成功"
#################创建文件夹#################
mkdir /pengxiaogang  &&  chmod -R 777 /pengxiaogang  &&  echo  "共享文件夹创建成功"
cat >>  /etc/exports  <<  EOF
/pengxiaogang *(rw,sync)
EOF
 
############按顺序启动rpcbind和nfs服务################
systemctl start rpcbind  &&  systemctl start nfs  &&  echo "按顺序启动rpcbind和nfs服务成功"
##############配置生效##############
exportfs -r
##################测试####################
showmount -e localhost  &&  echo "I love you,I love BDQN!!" > /pengxiaogang/index.jsp
 
请查询好NFS服务器的IP地址备用,再另一台服务器运行tomcat脚本:

tomcat:

#!/bin/bash
#function:tomcat
#author:tommypeng 20220714 final version
##########################################
 if
  [  "$USER"  != "root"   ]
then
   echo "错误:非root用户,权限不足!"
  exit  0
fi
###############防火墙及SElinux############
systemctl stop firewalld && systemctl disable firewalld  && echo "防火墙已经关闭"
sed -i 's/SELINUX=.*/SELINUX=disabled/g'  /etc/selinux/config  && echo "关闭selinux"
echo  "脚本所需安装包请访问作者个人网站:https://www.huoshichong.cn/index.php/download.html"
sleep 10
############清理老旧包###########
rpm -qa | grep java  >  /root/888.txt
PLIST=$(cat  /root/888.txt)
for  PKGNAME   in    $PLIST
do
      rpm -e --nodeps   $PKGNAME   &&  echo  "老旧包已经清理完毕" 
done
rm -rf  /root/888.txt  &&  echo "临时文件已删除"
sleep 5
tarbagp=/usr/local
#判断文件是否存在,如果存在就不用下载了
function is_exist()
{
    if [ ! -f $tarbagp/$1 ];then
        echo  "请上传$1到/usr/local/"    
        ###return 2###
        exit 0
    fi
}
###############安装JDK############
cd $tarbagp
   #判断文件是否存在
   is_exist jdk-8u311-linux-x64.tar.gz 
   is_exist apache-tomcat-8.5.72.tar.gz
   if [ $? -eq 0 ];then
   echo  "安装包已经就位,准备安装"
   fi
   sleep  5
cd $tarbagp &&  tar -zxvf jdk-8u311-linux-x64.tar.gz   &&   mv jdk1.8.0_311  jdk1.8
##############配置环境变量##############
cat >> /etc/profile  <<EOF
export JAVA_HOME=/usr/local/jdk1.8/
 
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
 
export PATH=$PATH:$JAVA_HOME/bin
 
EOF
sleep 4
source /etc/profile
source /etc/profile
##########安装tomcat###########
cd $tarbagp
mkdir myDir
cp  $tarbagp/apache-tomcat-8.5.72.tar.gz  $tarbagp/myDir  &&  cd $tarbagp/myDir
tar -zxvf apache-tomcat-8.5.72.tar.gz  &&   mv apache-tomcat-8.5.72  tomcat8
cd $tarbagp/myDir/tomcat8/bin/
sleep  3 
####sed -i '#\#!/bin/sh  #a\\   JAVA_HOME=/usr/local/jdk1.8/ '  /usr/local/myDir/tomcat8/bin/catalina.sh
sed  '2aJAVA_HOME=/usr/local/jdk1.8/'   /usr/local/myDir/tomcat8/bin/catalina.sh
./startup.sh    
if [ $? -eq 0 ];then
   echo  "tomcat启动成功"
else
   echo "tomcat启动失败,看来这个脚本没有帮到你,您还是自己折腾吧"
   exit 1
 fi
 ###############NFS################
 read  -p  "请输入NFS服务器的IP  " nfsip
 mount -v -t nfs $nfsip:/pengxiaogang  /usr/local/myDir/tomcat8/webapps/ROOT 
 mount -v -t nfs $nfsip:/pengxiaogang  /usr/local/myDir/tomcat8/webapps/ROOT
 rm -rf  /usr/local/myDir/tomcat8/webapps/ROOT/index.jsp 
 ###默认首页目录/usr/local/myDir/tomcat8/webapps/ROOT#########
####默认安装目录/usr/local/myDir/tomcat8#######
 
 
在第三台服务器再次运行以上脚本,安装两台tomcat服务器完毕,您需要准备好这两台tomcat服务器的IP备用,运行nginx脚本时需要提供。

第四台服务器,安装nginx,用如下脚本安装:

#!/bin/bash
#function:nginx代理
#author:tommypeng 20220714 final version
##########################################
 if
  [  "$USER"  != "root"   ]
then
   echo "错误:非root用户,权限不足!"
  exit  0
fi
###############防火墙及SElinux############
systemctl stop firewalld && systemctl disable firewalld  && echo "防火墙已经关闭"
sed -i 's/SELINUX=.*/SELINUX=disabled/g'  /etc/selinux/config  && echo "关闭selinux"
###############网络############
ping -c 3   www.baidu.com
if
   [ $? -eq 0 ]
   then
   echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32m网络畅通,即将安装依赖包\033[0m"
   else 
     echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32m即将退出,请检查外网通讯 !\033[0m"
        exit  0
fi
#######################依赖包###################
yum -y install  gcc gcc-c++ autoconf automake libtool make openssl openssl-devel pcre pcre-devel  wget
#############下载安装包##############
cd  /usr/local/src/    &&   wget  http://nginx.org/download/nginx-1.8.1.tar.gz 
if
   [ $? -eq 0 ]
   then
   echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32m安装包已经下载成功\033[0m"
   else 
     echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32m哟吼,滚犊子的下载失败了,即将退出 !\033[0m"
        exit  0
fi
###############编译及安装#############
    cd  /usr/local/src/  &&      tar -zxvf nginx-1.8.1.tar.gz
if [ $? -eq 0 ];then
cd  /usr/local/src/nginx-1.8.1
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre
make  && make install
             if  [ $? -eq 0 ];then
                    echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32m nginx编译安装成功 !\033[0m"
             else
                    echo -e "\033[32m nginx编译安装失败,请检查! \033[0m"
                    exit 1
             fi
    fi
mv  /usr/local/nginx/conf/nginx.conf   /usr/local/nginx/conf/nginx.conf.bak    &&  echo "已备份默认配置文件,即将重建配置文件含反向代理"
sleep 5
read -p  "请输入第一台tomcat服务器的IP  "   tomcata
read -p  "请输入第二台tomcat服务器的IP  "   tomcatb
cat >>  /usr/local/nginx/conf/nginx.conf  <<EOF
#user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
 
http {
    include       mime.types;
    default_type  application/octet-stream;
    upstream backend{
                                                             server  $tomcata:8080; 
                                                             server  $tomcatb:8080;      
                                                              }
 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    #gzip  on;
 
    server {
        listen       80;
        server_name  localhost;
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
 
        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://backend;
        }
 
        #error_page  404              /404.html;
 
        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
 
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
 
 
   # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
 
   # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
 
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
 
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
 
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
 
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
 
}
EOF
/usr/local/nginx/sbin/nginx -t 
 if  [ $? -eq 0 ];then
                    echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32m nginx配置测试成功 !\033[0m"
             else
                    echo -e "\033[32m nginx配置测试失败,请检查,6秒后退出! \033[0m"
                    sleep  6
                    exit 1
fi
/usr/local/nginx/sbin/nginx
if  [ $? -eq 0 ];then
                    echo -e "\n\033[32m-----------------------------------------------\033[0m"
                    echo -e "\033[32m nginx启动成功 !\033[0m"
             else
                    echo -e "\033[32m nginx启动失败,请检查,8秒后退出! \033[0m"
                    sleep  8
                    exit 1
fi
echo "
常用命令:
# 进入生成目录
cd  /usr/local/nginx
# 测试
/usr/local/nginx/sbin/nginx -t
# 查看编译模块信息
/usr/local/nginx/sbin/nginx -V
# 启动
/usr/local/nginx/sbin/nginx
# 重新载入配置文件
/usr/local/nginx/sbin/nginx  -s reload
# 重启
/usr/local/nginx/sbin/nginx  -s reopen
# 停止
/usr/local/nginx/sbin/nginx  -s stop  "

四.测试
 
以上四台您部署完毕后,访问nginx服务器的ip

如果出现如下界面则表示集群部署成功!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/715640.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ实践——利用随机交换器做负载均衡

大纲 启用Random Exchange创建Exchange绑定队列测试 在《RabbitMQ实践——利用一致性Hash交换器做负载均衡》中&#xff0c;我们使用了Consistent Hash Exchange实践了消息路由的负载均衡。本文我们将使用一种更简单的交换器来实现该功能&#xff0c;这就是“随机交换器”&…

Linux初识地址空间

前言 上一期我们对进程优先级、命令行参数以及环境和变量做了介绍&#xff01;以前我们就提到过一个问题有了运行队列为什么还要有优先级&#xff1f;本期将带你揭晓&#xff01; 本期内容介绍 虚拟地址空间的引入 虚拟地址空间的介绍 如何理解地址空间 为什么要有地址空间 如…

3DMAX卷曲修改器Roller插件使用方法详解

3DMAX卷曲修改器Roller插件使用教程 3DMAX卷曲修改器Roller&#xff0c;用于创建卷曲形状建模&#xff0c;并可生成卷曲和展开动画。使创建诸如卷起和打开毯子、旗帜这样的动画变得非常简单。 【适用版本】 适用于3ds Max 2012及更高版本 【安装方法】 3DMAX卷曲修改器Roller…

QT

#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) ,Gcancle(new QPushButton("取消",this)) ,EmmEdit(new QLineEdit(this)) { ui->setupUi(this);…

UDS——诊断三要素

文章目录 诊断三要素一、请求1.1 带子功能的服务1.2 不带子功能的服务二、正响应(肯定响应)2.1 带子功能诊断请求的肯定响应格式2.2 不带子功能诊断请求的肯定响应格式三、负响应(否定响应)否定响应码诊断三要素 诊断主要包含请求、肯定响应和否定响应三个要素 “请求”由…

浙大版PTA Python程序设计 题目与知识点整理(综合版)

目录 第一章 一、高级语言程序的执行方式 二、变量赋值与内存地址 三、字符编码 3.1 Unicode 3.2 ASCII&#xff08;American Standard Code for Information Interchange&#xff09; 四、编程语言分类按照编程范式分类 4.1 面向过程语言 4.2 面向对象语言 五、原码…

【LeetCode最详尽解答】42-接雨水 Trapping-Rain-Water

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; 链接: 42-接雨水 直觉 通过可视化图形来解决这个问题会更容易理解和解决。 给定输入: height [0,1,…

力扣231. 2 的幂(位运算)

Problem: 231. 2 的幂 文章目录 题目描述思路及解法复杂度Code 题目描述 思路及解法 1.若为0和负数则直接返回false&#xff1b; 2.利用一个标志数mask令其为一&#xff0c;不断的算术左移同时和n做与&#xff08;&&#xff09;运算&#xff0c;统计n中二进制位为1的个数&a…

HDU - 5651 xiaoxin juju needs help(Java JS Python C C++)

题目来源 Problem - 5651 (hdu.edu.cn) 题目描述 众所周知&#xff0c;小新是一位才华横溢的程序员。当他还是小学六年级的学生时&#xff0c;他就知道回文字符串了。 今年夏天&#xff0c;他在腾讯实习。一天&#xff0c;他的领导来找小新帮忙。他的领导给了他一个字符串&a…

25 avl树

目录 底层结构avl树的概念节点定义插入旋转验证删除全性能 1. 底层结构 前面对map/multimap/set/multiset进行了简单的介绍&#xff0c;在其文档介绍中发现&#xff0c;这几个容器有几个共同点是&#xff1a;其底层都是按照二叉搜索树来实现的&#xff0c;但是二叉搜索树有自…

【CSS in Depth2精译】1.1 层叠

CSS 本质上就是声明规则&#xff0c;并让这些特定的规则在各种情况下生效。一个类添加到某个元素上&#xff0c;则应用这个类包含的这一些样式&#xff1b;元素 X 是元素 Y 的一个子节点&#xff0c;则应用另一些样式。浏览器于是根据这些规则&#xff0c;判定所有样式生效的具…

使用 C# 进行面向对象编程:第 9 部分

使用 OOP 的用户活动日志 应用程序背后的关键概念 在这一部分中&#xff0c;我们将使用之前学到的一些 OOP 概念。我们将创建一个小型应用程序。在继续之前&#xff0c;请阅读我的文章user-activity-log-using-C-Sharp-with-sql-server/。在本课程中&#xff0c;我们将再次使…

springboot+vue+mybatis教师工作审核系统+PPT+论文+讲解+售后

随着社会不断进步与发展&#xff0c;生活节奏不断加快&#xff0c;信息已经成为我们生活中不可缺少的一部分&#xff0c;很多学校需要掌握大量的信息来了解特定学生的需求&#xff0c;传统的做法是组织大量的人力物力对学生散发调查表&#xff0c;然后对收集的信息进行统计并得…

PHP调用阿里云OSS的SDK封装成服务的完整指南与问题解决

在现代Web开发中&#xff0c;使用云存储来管理和存储大量的静态文件已经成为常态。阿里云OSS&#xff08;对象存储服务&#xff09;是其中一个非常受欢迎的选择。在这篇文章中&#xff0c;我们将详细讲解如何在PHP项目中集成并使用阿里云OSS SDK。 #### 一、前期准备 在开始之…

SSH概念、用途、详细使用方法

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

【安装笔记-20240616-Windows-Gpg4win 证书管理器】

安装笔记-系列文章目录 安装笔记-20240616-Windows-Gpg4win 证书管理器 文章目录 安装笔记-系列文章目录安装笔记-20240616-Windows-Gpg4win 证书管理器 前言一、软件介绍名称&#xff1a;Gpg4win主页官方介绍 二、安装步骤测试版本&#xff1a;Gpg4win 4.3.1下载链接安装界面…

调用第三方系统的签名设计与校验实例讲解与实践

在现代软件开发中&#xff0c;调用第三方系统API已经成为常见需求。为了保证数据传输的安全性和完整性&#xff0c;许多API采用了签名机制。本文将详细讲解如何设计与校验调用第三方系统的签名&#xff0c;以确保双方通信的安全和可靠。 #### 一、签名机制的意义 签名机制主要…

ElasticSearch地理空间数据了解

ElasticSearch地理空间数据了解 使用场景 Elasticsearch 的地理空间数据处理功能在现代社会中有着广泛的应用&#xff0c;以下是一些常见的使用场景和方向&#xff1a; 1. 位置搜索和导航 本地服务发现&#xff1a;应用程序可以使用 Elasticsearch 查找用户附近的餐馆、商店…

awd工具安装

fscan(漏洞扫描) 下载 下载地址: Releases shadow1ng/fscan GitHub 把下载的文件放到指定文件目录里, 在文件的位置打开cmd 输入 fscan64.exe -h 192.168.1.1/24 ok了 接下来说说fscan的使用 使用 1.信息搜集: 存活探测(icmp) 端口扫描 2.爆破功能: 各类服务爆破(…

Django REST framework视图集与路由详解:深入理解ViewSet、ModelViewSet与路由映射器

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…