07. Nginx进阶-Nginx负载均衡
简介
负载均衡
什么是负载均衡?
负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行。
Nginx负载均衡
什么是Nginx负载均衡?
Nginx负载均衡可以大大提升系统的吞吐率、请求性能、容灾性能。
工作原理
web服务器直接面向用户时,往往要承载大量并发请求。
单台服务器难以负荷,此时使用多天web服务器组成集群,前端使用Nginx负载均衡将请求分散到后端web服务器集群中。
示意图

应用
主机规划
| 主机名称 | 主机地址 | 主机功能 |
|---|---|---|
| master-1 | 192.168.131.129 | 负载均衡主机 |
| master-2 | 192.168.131.130 | web主机1 |
| master-3 | 192.168.131.131 | web主机2 |
环境准备
安装Nginx
三台主机一同安装Nginx服务
- 配置yum仓库
cat > /etc/yum.repos.d/nginx.repo << 'EOF'
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF
- 安装Nginx
yum list | grep nginx
yum -y install nginx
nginx -v
配置web主机
- 配置web站点
地址:192.168.131.130、192.168.131.131
路径:/etc/nginx/conf.d/default.conf
server {listen 80;server_name wang.mingqu.com;charset utf-8;location / {root /www/wangmingqu/;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}
- 配置web页面
地址:192.168.131.130、192.168.131.131
路径:/www/wangmingqu/index.html
#主机:192.168.131.130、192.168.131.131
mkdir -p /www/wangmingqu/#主机:192.168.131.130
echo "王茗渠测试页面,主机IP:192.168.131.130" > /www/wangmingqu/index.html#主机:192.168.131.131
echo "王茗渠测试页面,主机IP:192.168.131.131" > /www/wangmingqu/index.html
注意:生成环境中两台web主机的资源内容需要保持一致,此处是为了演示负载均衡分配到了两台机器上
- 启动web服务
systemctl stop firewalld
setenforce 0
nginx -t
systemctl start nginx
curl -iv wang.mingqu.com
简单应用
配置负载均衡
地址:192.168.131.129
路径:/etc/nginx/conf.d/wangmingqu.conf
upstream web {server 192.168.131.130;server 192.168.131.131;
}server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {proxy_pass http://web; } }
检查配置
nginx -t
systemctl reload nginx
验证负载均衡


配置参数
upstream
语法:upstream name {…}
作用:定义一个负载均衡主机组
适用范围:http
server
语法:server url|host;
作用:定义负载均衡主机组中的主机
适用范围:upstream
proxy_pass
语法:proxy_pass http://name;
作用:引用定义的负载均衡主机组,将客户端请求转发至upstream服务池。
适用范围:location
后端状态
- weight
语法:server url|host weight=数值;
作用:指定负载均衡主机组中的主机权重,将客户端请求优先发送到该主机。
适用范围:upstream
- down
语法:server url|host down;
作用:指定当前主机暂时不参与负载均衡。
适用范围:upstream
- backup
语法:server url|host backup;
作用:指定负载均衡主机组中的某个主机为备份主机。
适用范围:upstream
- max_fails
语法:server url|host max_fails=数值;
作用:允许请求失败的次数
适用范围:upstream
- fail_timeout
语法:server url|host max_fails=数值 fail_timeout=时间s;
作用:经过max_fails失败后,服务暂停时间,单位秒“s”
适用范围:upstream
- max_conns
语法:server url|host max_conns=数值;
作用:限制最大的请求连接数。
适用范围:upstream
算法详解
轮询算法
- 简介
按时间顺序逐一分配到不同的后端服务器(默认算法),简称rr。
不考虑实际负载或配置,平均分配客户端请求。
- 应用
upstream web {server 192.168.131.130;server 192.168.131.131;
}server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {proxy_pass http://web; } }
权重算法
- 简介
权重算法,设置的weight值越大,请求访问到该机器的概率越高。又称为加权轮询,简称wrr。
- 应用
upstream web {server 192.168.131.130 weight=10;server 192.168.131.131;
}server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {proxy_pass http://web; } }
IP哈希算法
- 简介
每个请求按访问IP的hash结果分配。
这样来自同一IP的固定客户端访问同一个后端服务器。
注意:不能和weight一起使用。
- 应用
upstream web {ip_hash;server 192.168.131.130;server 192.168.131.131;
}server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {proxy_pass http://web; } }
URL哈希算法
- 简介
每个请求按访问URL的hash结果分配。
每个相同的URL定向到同一个后端服务器。
- 应用
upstream web {hash $request_uri;server 192.168.131.130;server 192.168.131.131;
}server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {proxy_pass http://web; } }
最少连接数算法
- 简介
最少连接数算法,哪台机器的链接数少就分发到这台机器上,简称lc。
- 应用
upstream web {least_conn;server 192.168.131.130;server 192.168.131.131;
}server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {proxy_pass http://web; } }
加权最少连接数算法
- 简介
加权最少连接数算法,就是weight和least_conn两个算法的集合,简称wlc。
- 应用
upstream web {least_conn;server 192.168.131.130 weight=5;server 192.168.131.131;
}server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {proxy_pass http://web; } }
七层负载&四层负载
七层负载
七层负载均衡简介
什么是Nginx七层负载均衡?
七层负载均衡是在应用层,可以完成很多应用方面的协议请求。
比如http应用的负载均衡,可以实现http信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等等的规则。
所以在应用层的服务里面,可以做的内容就更多,Nginx是一个典型的七层负载均衡。
七层负载均衡应用场景
可以将请求分发到不同的服务上,并且可以根据请求信息进行灵活的代理转发;
由于请求会通过负载均衡服务器,负载均衡服务器会过滤一些请求(例如:DOS攻击)避免所有请求信息都打到服务器上,保障了服务器的稳定运行。
处于网络分层的最上层,需要对数据进行解析,与客户端建立连接,效率比较低。
配置web主机
- 配置web站点
地址:192.168.131.130、192.168.131.131
路径:/etc/nginx/conf.d/default.conf
server {listen 80;server_name wang.mingqu.com;charset utf-8;location / {root /www/wangmingqu/;index index.html index.htm;}error_page 500 502 503 504 /50x.html;location = /50x.html {root /usr/share/nginx/html;}}
- 配置web页面
地址:192.168.131.130、192.168.131.131
路径:/www/wangmingqu/index.html
#主机:192.168.131.130、192.168.131.131
mkdir -p /www/wangmingqu/#主机:192.168.131.130
echo "王茗渠测试页面,主机IP:192.168.131.130" > /www/wangmingqu/index.html#主机:192.168.131.131
echo "王茗渠测试页面,主机IP:192.168.131.131" > /www/wangmingqu/index.html
注意:生成环境中两台web主机的资源内容需要保持一致,此处是为了演示负载均衡分配到了两台机器上
- 启动web服务
systemctl stop firewalld
setenforce 0
nginx -t
systemctl start nginx
curl -iv wang.mingqu.com
配置负载均衡
地址:192.168.131.129
路径:/etc/nginx/conf.d/wangmingqu.conf
upstream web {server 192.168.131.130;server 192.168.131.131;
}server {listen 80;server_name wang.wangmingqu.com;charset utf-8;location / {proxy_pass http://web; } }
检查配置
nginx -t
systemctl reload nginx
验证负载均衡


四层负载
四层负载均衡简介
什么是Nginx四层负载均衡?
四层负载均衡是基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,他的组装在四层的基础之上,无论四层还是七层都是指的OSI网络模型。
四层负载均衡应用场景
- 四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;如:nginx就无法保证自己的服务高可用,需要依赖LVS或者keepalive。
- 如:tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。
四层负载均衡总结
- 四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53;
- 四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号)
- 四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同时的使用)
- 四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;
- 通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡;
添加四层负载模块
查看四层负载均衡模块
/usr/local/nginx/sbin/nginx -V 2>&1 | grep stream
安装四层负载均衡模块
cd /usr/local/nginx/conf/
./configure --prefix=/usr/local/nginx \
--user=nginx --group=nginx \
--with-http_realip_module \
--with-http_v2_module \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-stream \
--with-stream_ssl_module \
--with-http_sub_module \
--with-http_random_index_module
创建配置文件
mkdir -p /usr/local/nginx/conf/conf.stream/
主配置文件
路径:/usr/local/nginx/conf/nginx.conf
主机地址:192.168.131.129
user nginx;
worker_processes auto;error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;events {worker_connections 1024;
}include /usr/local/nginx/conf/conf.stream/*.conf;http {include /etc/nginx/mime.types;default_type application/octet-stream;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 /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /usr/local/nginx/conf/conf.d/*.conf;
}
子配置文件
路径:/usr/local/nginx/conf/conf.d/stream.conf
主机地址:192.168.131.129
stream {upstream web_test_01 {server 192.168.131.130:22;}upstream web_test_02 {server 192.168.131.131:22;}server {listen 8081;proxy_connect_timeout 1s;proxy_timeout 3s;proxy_pass web_test_01;}server {listen 8082;proxy_connect_timeout 1s;proxy_timeout 3s;proxy_pass web_test_02;}
}
验证四层负载
- 检查配置文件
/usr/local/nginx/sbin/nginx -t
systemctl reload nginx
- 验证四层负载
ssh -p 8081 root@192.168.131.129
ssh -p 8082 root@192.168.131.129


相关文章:
07. Nginx进阶-Nginx负载均衡
简介 负载均衡 什么是负载均衡? 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行。 Nginx负载均衡 什么是Nginx负载均衡? Nginx负载均衡可以大…...
windows/linux下其他位置调用指定nodejs脚本报错Error: Cannot find module ‘esm’
问题: 有一个nodejs脚本名为html2word,同目录下还有它对应的package.json,正常在html2word所在目录下执行脚本没问题,但是在其他目录执行时报错:Error: Cannot find module ‘esm’ 原因: 在其他位置执行node脚本时…...
2024-03-05 linux 分区老显示满,Use 100%,原因是SquashFS 是一种只读文件系统,它在创建时就已经被填满,所有空间都被使用。
一、这两天一直纠结一个问题,无论怎么修改,linux 分区老显示满,Use 100%,全部沾满。如下图的oem分区。 二、导致出现上面的原因是:SquashFS文件系统里的空间利用率总是显示为100%。 三、SDK里面也说明SquashFS文件系统…...
蓝桥杯倒计时 41天 - KMP 算法
KMP算法 KMP算法是一种字符串匹配算法,用于匹配模式串P在文本串S中出现的所有位置。 例如S“ababac,P“aba”,那么出现的所有位置是13。 在初学KMP时,我们只需要记住和学会使用模板即可,对其原理只需简单理解ÿ…...
《汇编语言》- 读书笔记 - 第13章-int 指令
《汇编语言》- 读书笔记 - 第13章-int 指令 13.1 int 指令13.2 编写供应用程序调用的中断例程中断例程:求一 word 型数据的平方主程序中断处理程序执行效果 中断例程:将一个全是字母,以0结尾的字符串,转化为大写主程序中断处理程序…...
深入了解 Golang 条件语句:if、else、else if 和嵌套 if 的实用示例
条件语句 用于根据不同的条件执行不同的操作。Go中的条件可以是真或假。Go支持数学中常见的比较运算符: 小于 < 小于等于 < 大于 > 大于等于 > 等于 不等于 ! 此外,Go还支持常见的逻辑运算符: 逻辑与 && 逻辑或…...
大数据和机器学习在气象预报中的应用-张平文院士
报告链接:张平文院士 -- 大数据和机器学习在气象预报中的应用_哔哩哔哩_bilibili...
C#高级:Winform桌面开发中DataGridView的详解
一、每条数据增加一个按钮,点击输出对应实体 请先确保正确添加实体的名称和文本: private void button6_Click(object sender, EventArgs e) {//SQL查询到数据,存于list中List<InforMessage> list bll.QueryInforMessage();//含有字段…...
java八股文复习-----2024/03/05----基础---反射,动态代理。序列化
来源一 大彬八股文 来源二 2023 20W字八股文 2024秋招八股文 1.Java创建对象有几种方式? Java创建对象有以下几种方式: 用new语句创建对象。使用反射,使用Class.newInstance()创建对象。调用对象的clone()方法。运用反序列化手段&#x…...
【人工智能】Anthropic发布强大的Claude3对齐GPT-4,大模型杂谈个人感想
北京时间3月5日,人工智能创业公司Anthropic宣布,推出其突破性的Claude 3系列模型。Claude 3系列包含三个子模型,分别为Claude 3 Haiku、Claude 3 Sonnet和Claude 3 Opus,它们提供不同程度的智能、速度和成本选择,以满足…...
基于openKylin与RISC-V的MindSpore AI项目实践
项目目标: 在openKylin系统上安装和配置MindSpore框架。开发一个简单的图像分类模型,并在RISC-V平台上进行训练和推理。根据RISC-V的特性,对MindSpore框架进行必要的优化。 目录 项目目标: 训练模型 编写训练代码,设…...
【牛客】VL64 时钟切换
描述 题目描述: 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频,现在要设计一个切换电路,sel选择时候进行切换,要求没有毛刺。 信号示意图: 波形示意图: 输入描述: clk0 clk1为时…...
Java设计模式——桥连模式
桥接模式简单来说就是通过将抽象部分和具体部分分离,使它们可以独立地变化。如果你的一个类存在多个变化维度(如抽象和具体的实现)。若使用继承来处理这些变化,将会导致类层次结构的急剧增加,难以管理和维护。并且&…...
数据结构与算法:堆排序和TOP-K问题
朋友们大家好,本节内容来到堆的应用:堆排序和topk问题 堆排序 1.堆排序的实现1.1排序 2.TOP-K问题3.向上调整建堆与向下调整建堆3.1对比两种方法的时间复杂度 我们在c语言中已经见到过几种排序,冒泡排序,快速排序(qsor…...
【NR 定位】3GPP NR Positioning 5G定位标准解读(三)
目录 前言 5 NG-RAN UE定位架构 5.1 架构 5.2 UE定位操作 5.3 NG-RAN定位操作 5.3.1 通用NG-RAN定位操作 5.3.2 OTDOA定位支持 5.3.3 广播辅助信息支持 5.3.4 NR RAT相关定位支持 5.4 NG-RAN中与UE定位相关的元素功能描述 5.4.1 用户设备(UE) …...
文件操作与IO(3) 文件内容的读写——数据流
目录 一、流的概念 二、字节流代码演示 1、InputStream read方法 第一个没有参数的版本: 第二个带有byte数组的版本: 第三个版本 搭配Scanner的使用 2、OutputStream write方法 第一个版本: 第二个写入整个数组版本: …...
《PyTorch深度学习实践》第十一讲卷积神经网络进阶
一、 1、卷积核超参数选择困难,自动找到卷积的最佳组合。 2、1x1卷积核,不同通道的信息融合。使用1x1卷积核虽然参数量增加了,但是能够显著的降低计算量(operations) 3、Inception Moudel由4个分支组成,要分清哪些是在Init里定义…...
Ansible的playbook的编写和解析
目录 什么是playbook Ansible 的脚本 --- playbook 剧本 实例部署(使用playbook安装启动httpd服务) 1.编写一个.yaml文件 在主机下载安装http,将配置文件复制到opt目录下 运行playbook 在192.168.17.77主机上查看httpd服务是否成功开启…...
[环境配置]ssh连接报错“kex_exchange_identification: read: Connection reset by peer”
已经被VScode ssh毒死好几次了,都是执行命令意外中断,然后又VSCode里连不上、本机Terminal也连不上了。。。 重启远程服务器,VSCode可以连上了, 系统ssh还是不行,报错“kex_exchange_identification: read: Connecti…...
Mybatis-Plus——04,自动填充时间(新注解)
自动填充(新注解) 一、数据库添加两个字段二、实体类字段属性上增加注解三、编写填充器四、查看结果4.1 插入结果4.2 修改结果 五、同步修改5.1实体类属性改成 INSERT_UPDATE5.2 在填充器的方法这里加上 updateTime5.3 查看结果————————创作不易…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
