07. Nginx进阶-Nginx负载均衡

简介

负载均衡

什么是负载均衡?

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行。

Nginx负载均衡

什么是Nginx负载均衡?

Nginx负载均衡可以大大提升系统的吞吐率、请求性能、容灾性能。

工作原理

web服务器直接面向用户时,往往要承载大量并发请求。
单台服务器难以负荷,此时使用多天web服务器组成集群,前端使用Nginx负载均衡将请求分散到后端web服务器集群中。

示意图

应用

主机规划

主机名称主机地址主机功能
master-1192.168.131.129负载均衡主机
master-2192.168.131.130web主机1
master-3192.168.131.131web主机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

验证负载均衡

image.png
image.png

配置参数

upstream

语法:upstream name {…}
作用:定义一个负载均衡主机组
适用范围:http

server

语法:server url|host;
作用:定义负载均衡主机组中的主机
适用范围:upstream

proxy_pass

语法:proxy_pass http://name;
作用:引用定义的负载均衡主机组,将客户端请求转发至upstream服务池。
适用范围:location

后端状态

  1. weight

语法:server url|host weight=数值;
作用:指定负载均衡主机组中的主机权重,将客户端请求优先发送到该主机。
适用范围:upstream

  1. down

语法:server url|host down;
作用:指定当前主机暂时不参与负载均衡。
适用范围:upstream

  1. backup

语法:server url|host backup;
作用:指定负载均衡主机组中的某个主机为备份主机。
适用范围:upstream

  1. max_fails

语法:server url|host max_fails=数值;
作用:允许请求失败的次数
适用范围:upstream

  1. fail_timeout

语法:server url|host max_fails=数值 fail_timeout=时间s;
作用:经过max_fails失败后,服务暂停时间,单位秒“s”
适用范围:upstream

  1. max_conns

语法:server url|host max_conns=数值;
作用:限制最大的请求连接数。
适用范围:upstream

算法详解

轮询算法

  1. 简介

按时间顺序逐一分配到不同的后端服务器(默认算法),简称rr。
不考虑实际负载或配置,平均分配客户端请求。

  1. 应用
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; }  }

权重算法

  1. 简介

权重算法,设置的weight值越大,请求访问到该机器的概率越高。又称为加权轮询,简称wrr。

  1. 应用
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哈希算法

  1. 简介

每个请求按访问IP的hash结果分配。
这样来自同一IP的固定客户端访问同一个后端服务器。
注意:不能和weight一起使用。

  1. 应用
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哈希算法

  1. 简介

每个请求按访问URL的hash结果分配。
每个相同的URL定向到同一个后端服务器。

  1. 应用
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; }  }

最少连接数算法

  1. 简介

最少连接数算法,哪台机器的链接数少就分发到这台机器上,简称lc。

  1. 应用
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; }  }

加权最少连接数算法

  1. 简介

加权最少连接数算法,就是weight和least_conn两个算法的集合,简称wlc。

  1. 应用
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

验证负载均衡

image.png
image.png

四层负载

四层负载均衡简介

什么是Nginx四层负载均衡?

四层负载均衡是基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,他的组装在四层的基础之上,无论四层还是七层都是指的OSI网络模型。

四层负载均衡应用场景
  1. 四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;如:nginx就无法保证自己的服务高可用,需要依赖LVS或者keepalive。
  2. 如:tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。
四层负载均衡总结
  1. 四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53;
  2. 四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号)
  3. 四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同时的使用)
  4. 四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;
  5. 通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡;

添加四层负载模块

查看四层负载均衡模块
/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;}
}

验证四层负载

  1. 检查配置文件
/usr/local/nginx/sbin/nginx -t
systemctl reload nginx
  1. 验证四层负载
ssh -p 8081 root@192.168.131.129
ssh -p 8082 root@192.168.131.129

image.png
image.png

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习算法的基本原理

深度学习是一种机器学习方法&#xff0c;其核心是通过构建深层神经网络来学习数据的表示和特征&#xff0c;以解决各种复杂的任务。以下是深度学习算法的基本原理&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎…

Vue.js中的diff算法:让虚拟DOM更高效

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【Docker】Windows11操作系统下安装、使用Docker保姆级教程

【Docker】Windows11操作系统下安装、使用Docker保姆级教程 大家好 我是寸铁&#x1f44a; 总结了一篇【Docker】Windows11操作系统下安装、使用Docker保姆级教程的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 什么是 Docker&#xff1f; Docker 是一个开源平台&…

「MySQL」基本操作类型

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;数据库 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 数据库的操作 创建、显示数据库 使用 create 创建一个数据库 create database goods;然后可以用 show databases 来查看已经创建的数…

【NR 定位】3GPP NR Positioning 5G定位标准解读(五)

前言 3GPP 标准网址&#xff1a;Directory Listing /ftp/ 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;一&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位标准解读&#xff08;二&#xff09;-CSDN博客 【NR 定位】3GPP NR Positioning 5G定位…

RT-DETR算法优化改进:下采样创新篇 | 新颖的下采样ADown | YOLOv9

💡💡💡本文独家改进:新颖的下采样ADown来自于YOLOv9,助力RT-DETR,将ADown添加在backbone和head处,提供多个yaml改进方法 💡💡💡在多个私有数据集和公开数据集VisDrone2019、PASCAL VOC实现涨点 RT-DETR魔术师专栏介绍: https://blog.csdn.net/m0_63774211/c…

Vscode连接外部虚拟环境

如果vscode工程目录里面有一个超级大的虚拟环境文件夹&#xff0c;怎么说都不是一件优雅的事&#xff0c;因此我们希望这个虚拟环境在工程目录外部&#xff0c;我们开始&#xff1a; 1. 复制虚拟环境目录路径&#xff1a;E:\envs\test 2. 在vscode中打开文件夹&#xff0c;CT…

java面试(jvm)

JVM内存模型 细分Eden&#xff1a; java类加载过程&#xff1f;双亲委派机制&#xff1f;一个对象从加载到JVM&#xff0c;再到被GC清除过程&#xff1f; JAVA类加载器&#xff1a;AppClassLoader - ExtClassLoader - BootStrapClassLoader。每种类加载器都有他自己的加载目录…

计算机网络(2)-----数据链路层

目录 一.数据链路层的基本概念 二.数据链路层的功能概述 功能一:为网络层提供服务。无确认无连接服务&#xff0c;有确认无连接服务&#xff0c;有确认面向连接服务。 功能二:链路管理&#xff0c;即连接的建立、维持、释放(用于面向连接的服务)。 功能三:组帧 透明传输:…

喜讯!聚铭网络实力入选「网安新兴赛道厂商速查指南」11大细分赛道

近日&#xff0c;国内首家专业聚焦网络安全商业市场研究分析和加速服务的机构——斯元商业咨询正式发布2024「网安新兴赛道厂商速查指南Emerging Technology Vendor Index」。 聚铭网络凭借在网络安全领域的深厚技术积累、丰富的行业应用经验和良好的客户口碑&#xff0c;成功…

SkyWalking链路追踪上下文TraceContext的追踪身份traceId生成的实现原理剖析

结论先行 SkyWalking 通过字节码增强技术实现&#xff0c;结合依赖注入和控制反转思想&#xff0c;以SkyWalking方式将追踪身份traceId编织到链路追踪上下文TraceContext中。 是不是很有趣&#xff0c;很有意思&#xff01;&#xff01;&#xff01; 实现原理剖析 org.apache.…

B084-SpringCloud-Zuul Config

目录 zuul系统架构和zuul的作用zuul网关实现配置映射路径过滤器 Config概述云端管理本地配置 zuul zuul是分布式和集群后前端统一访问入口 系统架构和zuul的作用 zuul把自己注册进eureka&#xff0c;然后可通过前端传来的服务名发现和访问对应的服务集群 为了预防zuul单点故…

性能问题分析排查思路之机器(3)

本文是性能问题分析排查思路的展开内容之一&#xff0c;第2篇&#xff0c;主要分为日志1期&#xff0c;机器4期、环境2期共7篇系列文章&#xff0c;本期是第三篇&#xff0c;讲机器&#xff08;硬件&#xff09;的网络方面的排查方法和最佳实践。 主要内容如图所示&#xff1a…

Re61:读论文 PRP Get an A in Math: Progressive Rectification Prompting

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文名称&#xff1a;Get an A in Math: Progressive Rectification Prompting ArXiv网址&#xff1a;https://arxiv.org/abs/2312.06867 官方实现网站&#xff1a;PRP 官方代码&#xff1a;https://github.…

Linux学习:初识Linux

目录 1. 引子&#xff1a;1.1 简述&#xff1a;操作系统1.2 学习工具 2. Linux操作系统中的一些基础概念与指令2.1 简单指令2.2 ls指令与文件2.3 cd指令与目录2.4 文件目录的新建与删除指令2.5 补充指令1&#xff1a;2.6 文件编辑与拷贝剪切2.7 文件的查看2.8 时间相关指令2.9 …

【代码】Python3|无GUI环境中使用Seaborn作图的学习路线及代码(阴影折线图)

我有个需求是需要画图&#xff0c;让GPT帮我生成了一下学习计划。 学习路线依照GPT的来的&#xff0c;使用的Prompt工具是https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor。 文章目录 PrerequisiteMain Curriculum1.1 Seaborn介绍Seaborn基础保存图形为文件练习 1.2 单变量数…

day34贪心算法 part03

1005. K 次取反后最大化的数组和 简单 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&#xff0c;返回数…

【数据结构和算法初阶(C语言)】带环链表问题详解(快慢指针的烧脑应用)

目录 1.铺垫-----带环链表基本了解 2. 题目&#xff1a;环形链表 3.环形链表|| ​编辑 3.1题解1 3.2 题解2 4.总结 1.铺垫-----带环链表基本了解 环形链表题目启迪&#xff1a; 环形链表特点&#xff1a;遍历链表会出现一模一样的地址 2. 题目&#xff1a;环形链表 给…

C++输入输出(I\O)

我们知道C是由C语言发展而来的&#xff0c;几乎完全兼容C语言&#xff0c;换句话说&#xff0c;你可以在C里面编译C语言代码。如下图: C语言是面向过程的语言&#xff0c;C在C语言之上增加了面向对象以及泛型编程机制&#xff0c;因此C更适合中大型程序的开发&#xff0c;然而C…

Linux 设置快捷命令

以ll命令为例&#xff1a; 在 Linux 系统上&#xff0c;ll 命令通常不是一个独立的程序&#xff0c;而是 ls 命令的一个别名。 这个别名通常在用户的 shell 配置文件中定义&#xff0c;比如 .bashrc 或 .bash_aliases 文件中。 要在 Debian 上启用 ll 命令&#xff0c;你可以按…