nginx负载均衡和动静分离

一、Tomcat简介

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

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

Tomcat重要目录

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

Nginx应用

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

二、Nginx负载均衡原理

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

反向代理原理

Nginx配置反向代理的主要参数

  • upstream 服务池名{ }
    配置后端服务器池,以提供响应数据
  • proxy_pass http://服务池名
    配置将访问请求转发给后端服务器池的服务器处理

三、Nginx动静分离原理

动静分离原理

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

Nginx静态处理优势

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

四、部署Tomcat

负载均衡器:nginx–192.168.80.10

应用服务器1:tomcat1–192.168.80.70:8080

应用服务器2:tomcat2–192.168.80.80:8080

​ tomcat3–192.168.80.80:8081

mysql数据库:192.168.80.50

在这里插入图片描述

要求部署两台后端Tomcat服务器

为了进行测试,搭建两个内容不同的网站

Tomcat部署与网站搭建步骤

Tomcat部署应用服务器1

关闭firewalId防火墙

[root@70 ~]# systemctl stop firewalld
[root@70 ~]# setenforce 0
setenforce: SELinux is disabled

安装JDK,配置JAVA环境

[root@70 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[root@70 ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

[root@70 ~]# source /etc/profile

安装配置Tomcat1

[root@70 ~]# cd /opt
[root@70 opt]# tar zxvf apache-tomcat-9.0.16.tar.gz
[root@70 opt]# mv /opt/apache-tomcat-9.0.16/ /usr/local/tomcat
[root@70 opt]# /usr/local/tomcat/bin/shutdown.sh 
[root@70 opt]# /usr/local/tomcat/bin/startup.sh

创建/tomcat/webapp目录,修改server.xml,将网站文件目录更改到/tomcat/webapp/路径下

[root@70 opt]# mkdir /usr/local/tomcat/webapps/test

/tomcat/webapp/下建立测试页面index.jsp,并进行测试

[root@70 opt]# vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   #指定为 test1 页面
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>
[root@70 opt]# vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true">
	</Context>
</Host>
[root@70 opt]# /usr/local/tomcat/bin/shutdown.sh 
[root@70 opt]# /usr/local/tomcat/bin/startup.sh
Tomcat部署应用服务器2

关闭firewalId防火墙

[root@80 ~]# systemctl stop firewalld
[root@80 ~]# setenforce 0
setenforce: SELinux is disabled

安装JDK,配置JAVA环境

[root@80 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
[root@80 ~]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

[root@80 ~]# source /etc/profile
tomcat安装
[root@80 opt]# tar zxvf apache-tomcat-9.0.16.tar.gz
[root@80 opt]# mkdir /usr/local/tomcat
[root@80 opt]# mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
[root@80 opt]# cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

配置 tomcat 环境变量

[root@80 opt]# vim /etc/profile.d/tomcat.sh

在这里插入图片描述

[root@80 opt]# source /etc/profile.d/tomcat.sh

修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号

[root@80 opt]# vim /usr/local/tomcat/tomcat2/conf/server.xml

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

修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量

[root@80 opt]# vim /usr/local/tomcat/tomcat1/bin/startup.sh 

[root@80 opt]# vim /usr/local/tomcat/tomcat1/bin/shutdown.sh

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

[root@80 opt]# vim /usr/local/tomcat/tomcat2/bin/startup.sh 
[root@80 opt]# vim /usr/local/tomcat/tomcat2/bin/shutdown.sh

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

启动各 tomcat 中的 /bin/startup.sh

[root@80 opt]# /usr/local/tomcat/tomcat1/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat/tomcat1
Using CATALINA_HOME:   /usr/local/tomcat/tomcat1
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat1/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/tomcat1/bin/bootstrap.jar:/usr/local/tomcat/tomcat1/bin/tomcat-juli.jar
Tomcat started.
[root@80 opt]# /usr/local/tomcat/tomcat2/bin/startup.sh 
Using CATALINA_BASE:   /usr/local/tomcat/tomcat2
Using CATALINA_HOME:   /usr/local/tomcat/tomcat2
Using CATALINA_TMPDIR: /usr/local/tomcat/tomcat2/temp
Using JRE_HOME:        /usr/local/jdk1.8.0_91/jre
Using CLASSPATH:       /usr/local/tomcat/tomcat2/bin/bootstrap.jar:/usr/local/tomcat/tomcat2/bin/tomcat-juli.jar
Tomcat started.
[root@80 opt]# netstat -anpt |grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      57351/java          
tcp6       0      0 127.0.0.1:8006          :::*                    LISTEN      57410/java          
tcp6       0      0 :::8009                 :::*                    LISTEN      57351/java          
tcp6       0      0 :::8010                 :::*                    LISTEN      57410/java          
tcp6       0      0 :::8080                 :::*                    LISTEN      57351/java          
tcp6       0      0 :::8081                 :::*                    LISTEN      57410/java          

Tomcat1和Tomcat2 server 配置

创建/tomcat1/webapp目录,修改server.xml,将网站文件目录更改到/tomcat1/webapp/路径下

[root@80 opt]# mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test

/tomcat1/webapp/下建立测试页面index.jsp,并进行测试

[root@80 opt]# vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   
</head>
<body>
<% out.println("动态页面 1,http://www.test1.com");%>
</body>
</html>
[root@80 opt]# vim /usr/local/tomcat/tomcat1/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/tomcat1/webapps/test" path="" reloadable="true">
	</Context>
</Host>
[root@80 opt]# /usr/local/tomcat/tomcat1/bin/shutdown.sh 
[root@80 opt]# /usr/local/tomcat/tomcat1/bin/startup.sh

/tomcat2/webapp/下建立测试页面index.jsp,并进行测试

[root@80 opt]# vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test1 page</title>   
</head>
<body>
<% out.println("动态页面 2,http://www.test2.com");%>
</body>
</html>
[root@80 opt]# vim /usr/local/tomcat/tomcat2/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/tomcat2/webapps/test" path="" reloadable="true">
	</Context>
</Host>
[root@80 opt]# /usr/local/tomcat/tomcat2/bin/shutdown.sh 
[root@80 opt]# /usr/local/tomcat/tomcat2/bin/startup.sh

五、部署Nginx 负载均衡器

[root@ux ~]# systemctl stop firewalld
[root@ux ~]# setenforce 0
setenforce: SELinux is disabled
[root@ux ~]# yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
[root@ux ~]# useradd -M -s /sbin/nologin nginx
[root@ux ~]# cd /opt
[root@ux opt]# tar zxvf nginx-1.12.2.tar.gz -C /opt/
[root@ux opt]# cd nginx-1.12.2/
[root@ux opt]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-file-aio \                          #启用文件修改支持
> --with-http_stub_status_module \           #启用状态统计
> --with-http_gzip_static_module \			 #启用 gzip静态压缩
> --with-http_flv_module \					 #启用 flv模块,提供对 flv 视频的伪流支持
> --with-http_ssl_module \					 #启用 SSL模块,提供SSL加密功能
> --with-stream								 #启用 stream模块,提供4层调度
[root@ux opt]# make && make install
[root@ux opt]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@ux opt]# vim /lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

[root@ux opt]# chmod 754 /lib/systemd/system/nginx.service
[root@ux opt]# systemctl start nginx.service
[root@ux opt]# systemctl enable nginx.service

六、配置Nginx动静分离

Nginx server 配置

[root@ux opt]# echo '<html><body><h1>这是静态页面</h1></body></html>' > /usr/local/nginx/html/index.html
[root@ux opt]# mkdir /usr/local/nginx/html/img
[root@ux opt]# cp /root/game.jpg /usr/local/nginx/html/img
[root@ux opt]# vim /usr/local/nginx/conf/nginx.conf

......
http {
......
	#gzip on;
	
	#配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大
	upstream tomcat_server {
		server 192.168.80.70:8080 weight=1;
		server 192.168.80.80:8080 weight=1;
		server 192.168.80.80:8081 weight=1;
	}
	
	server {
		listen 80;
		server_name www.kgc.com;
	
		charset utf-8;
	
		#access_log logs/host.access.log main;
		
		#配置Nginx处理动态页面请求,将 .jsp文件请求转发到Tomcat 服务器处理
		location ~ .*\.jsp$ {
			proxy_pass http://tomcat_server;
#设置后端的Web服务器可以获取远程客户端的真实IP
##设定后端的Web服务器接收到的请求访问的主机名(域名或IP、端口),默认HOST的值为proxy_pass指令设置的主机名。如果反向代理服务器不重写该请求头的话,那么后端真实服务器在处理时会认为所有的请求都来在反向代理服务器,如果后端有防攻击策略的话,那么机器就被封掉了。
			proxy_set_header HOST $host;
##把$remote_addr赋值给X-Real-IP,来获取源IP
			proxy_set_header X-Real-IP $remote_addr;
##在nginx 作为代理服务器时,设置的IP列表,会把经过的机器ip,代理机器ip都记录下来
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		}
		
		#配置Nginx处理静态图片请求
		location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ {
			root /usr/local/nginx/html/img;
			expires 10d;
		}
		
		location / {
			root html;
			index index.html index.htm;
		}
......
	}
......
}

测试效果

测试静态页面效果

浏览器访问 http://192.168.80.10/

在这里插入图片描述

浏览器访问 http://192.168.80.10/game.jpg
在这里插入图片描述

测试负载均衡效果,不断刷新浏览器测试
浏览器访问 http://192.168.80.10/index.jsp
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动控制节水灌溉技术的高低代表着农业现代化的发展状况,灌溉系统自动化水平较低是制约我国高效农业发展的主要原因。本文就此问题研究了单片机控制的滴灌节水灌溉系统,该系统可对不同土壤的湿度进行监控,并按照作物对土壤湿度的要求进行适时、适量灌水,其核心是单片机和PC机构成的控制部分,主要对土壤湿度与灌水量之间的关系、灌溉控制技术及设备系统的硬件、软件编程各个部分进行了深入的研究。 单片机控制部分采用上下位机的形式。下位机硬件部分选用AT89C51单片机为核心,主要由土壤湿度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。上位机选用586型以上PC机,通过MAX232芯片实现同下位机的电平转换功能,上下位机之间通过串行通信方式进行数据的双向传输,软件选用VB高级编程语言以建立友好的人机界面。系统主要具有以下功能:可在PC机提供的人机对话界面上设置作物要求的土壤湿度相关参数;单片机可将土壤湿度传感器检测到的土壤湿度模拟量转换成数字量,显示于LED显示器上,同时单片机可采用串行通信方式将此湿度值传输到PC机上;PC机通过其内设程序计算出所需的灌水量和灌水时间,且显示于界面上,并将有关的灌水信息反馈给单片机,若需灌水,则单片机系统启动鸣音报警,发出灌水信号,并经放大驱动设备,开启电磁阀进行倒计时定时灌水,若不需灌水,即PC机上显示的灌水量和灌水时间均为0,系统不进行灌水。
智慧农业是一种结合了现代信息技术,包括物联网、大数据、云计算等,对农业生产过程进行智能化管理和监控的新模式。它通过各种传感器和设备采集农业生产中的关键数据,如大气、土壤和水质参数,以及生物生长状态等,实现远程诊断和精准调控。智慧农业的核心价值在于提高农业生产效率,保障食品安全,实现资源的可持续利用,并为农业产业的转型升级提供支持。 智慧农业的实现依赖于多个子系统,包括但不限于设施蔬菜精细化种植管理系统、农业技术资料库、数据采集系统、防伪防串货系统、食品安全与质量追溯系统、应急追溯系统、灾情疫情防控系统、农业工作管理系统、远程诊断系统、监控中心、环境监测系统、智能环境控制系统等。这些系统共同构成了一个综合的信息管理和服务平台,使得农业生产者能够基于数据做出更加科学的决策。 数据采集是智慧农业的基础。通过手工录入、传感器自动采集、移动端录入、条码/RFID扫描录入、拍照录入以及GPS和遥感技术等多种方式,智慧农业系统能够全面收集农业生产过程中的各种数据。这些数据不仅包括环境参数,还涵盖了生长状态、加工保存、检验检疫等环节,为农业生产提供了全面的数据支持。 智慧农业的应用前景广阔,它不仅能够提升农业生产的管理水平,还能够通过各种应用系统,如库房管理、无公害监控、物资管理、成本控制等,为农业生产者提供全面的服务。此外,智慧农业还能够支持政府监管,通过发病报告、投入品报告、死亡报告等,加强农业产品的安全管理和质量控制。 面对智慧农业的建设和发展,存在一些挑战,如投资成本高、生产过程标准化难度大、数据采集和监测的技术难题等。为了克服这些挑战,需要政府、企业和相关机构的共同努力,通过政策支持、技术创新和教育培训等手段,推动智慧农业的健康发展。智慧农业的建设需要明确建设目的,选择合适的系统模块,并制定合理的设备布署方案,以实现农业生产的智能化、精准化和高效化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值