当前位置: 首页 > news >正文

nginx-负载均衡

nginx-负载均衡

  • 前言
  • 一、负载均衡的分类
  • 二、配置负载均衡
  • 三、负载均衡算法
    • 1. 轮询
    • 2. 加权轮询
    • 3. 最小连接数
    • 4. ip hash
    • 5. 基于url的hash算法
    • 6. least_time
    • 7. random
  • 四、服务器状态配置
    • 1. bakcup配置
    • 2. down配置
    • 3. Health checks 健康检查
      • Passive Health Checks
      • Active Health Checks


前言

反向代理:nginx 作为客户端和后端服务器之间的中间层,客户端直接访问 nginx,Nginx 再将请求转发给后端服务器(客户端不知道实际处理请求的服务器)。
负载均衡池:由多台后端服务器组成的集群,nginx 按规则将请求分配到这些服务器

nginx通过将客户端请求分发到后端多台服务器,将流量 “均匀分配” 到多台服务器,避免单台服务器过载,实现流量均衡、提高系统可用性和扩展性


一、负载均衡的分类

三层负载均衡 在路由器上做负载均衡,到达某个ip地址有多条路由可以走,一般在机房的路由器上实现。 路由器里配置ospf协议支持,等价路由

四层负载均衡 传输层实现,根据ip地址和端口号做转发,支持tcp和udp协议(nginx支持)

七层负载均衡 应用层实现,基于http协议实现 (nginx支持)

从解封装和建立连接角度出发,3层效率 --》4层 --》7层


二、配置负载均衡

在负载均衡器上加载upstream配置

# http块中添加
http {upstream myweb1 {#ip_hash;#least_conn;#server 192.168.168.136 weight=3;server 192.168.168.136;	server 192.168.168.137;}server {# server块中添加location / {#root   html;#index  index.html index.htm;# 转发给负载均衡器proxy_pass http://myweb1;}}
}

验证:刷新nginx配置后到浏览器中访问会有轮转效果


三、负载均衡算法

nginx商业网站:HTTP Load Balancing | NGINX Documentation
nginx开源网站:Using nginx as HTTP load balancer

Load balancing methods
http块中添加

1. 轮询

round-robin :默认 —>简称 rr

upstream myweb1 {server 192.168.168.136;server 192.168.168.137;
}

2. 加权轮询

默认权重值为weight=1,数值越大获得的流量越多

upstream myweb1 {server 192.168.168.136 weight=3;server 192.168.168.137;
}

3. 最小连接数

least-connected: 基于7层的http协议或者4层,先3次握手,建立连接

upstream myweb1 {least_conn;server 192.168.168.136;server 192.168.168.137;
}

4. ip hash

基于客户机的ip地址,计算一个hash值,如果hash值一样就一直转发到固定的后端的web服务器。 适合于需要保持session会话信息持久性的场景,购物网站等

upstream myweb1 {ip_hash;server 192.168.168.136;server 192.168.168.137;
}

5. 基于url的hash算法

根据请求 URL 的哈希值分配服务器(同一 URL 始终由同一服务器处理)。适合缓存静态资源(需安装第三方模块 ngx_http_upstream_hash_module)

upstream backend {hash $request_uri consistent;server backend1.example.com;server backend2.example.com;
}

6. least_time

在这里插入图片描述

7. random

在这里插入图片描述


四、服务器状态配置

1. bakcup配置

http {upstream backend {server backend1.example.com weight=5;server backend2.example.com;server 192.0.0.1 backup;  # 处于备份状态,前面的服务器挂了,不能用了,才能获得流量。}
}

2. down配置

upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com down;  # 直接表示这台服务器挂了,不分配流量
}

3. Health checks 健康检查

问题:
1.谁检查谁?
负载均衡器检查后端的真实的web服务器是否在运行网站
2.检查什么?
检查后端的web服务器的网站是否运行

3.如何进行监控检查的呢?

Passive Health Checks

被动检测 --》默认支持
在这里插入图片描述

LB向web服务器发起请求报文,但是web服务器没有响应,因此LB才知道web服务器出问题。

fail_timeout 设置必须多次尝试失败才能将服务器标记为不可用的时间,以及将服务器标记为不可用的时间(默认为10秒)
max_fails 设置在fail_timeout服务器标记为不可用的时间内必须发生的失败尝试次数(默认为1次尝试)
backup 备份:当其他的服务器都不提供服务的时候,再启用这台服务器提供服务 --》备胎
slow_start 慢启动 down 将上游的服务器标识为不可用,不会再发送任何的请求给这台服务器

在这里插入图片描述

Active Health Checks

主动检查:
LB服务器不管有没有web请求,定期去检查web服务器里的网站是否运行,主动去了解情况。

NGINX Plus 是nginx的商业插件(软件),需要购买的

在这里插入图片描述

http://www.xdnf.cn/news/1369819.html

相关文章:

  • C++工程实战入门笔记4-函数(一)
  • WeakAuras Lua Script ICC (BarneyICC) Simplified Chinese [Mini]
  • 深入了解linux系统—— 线程互斥
  • ArcGIS学习-11 实战-商场选址
  • 洛谷 P12332 题解
  • 如何利用ArcGIS探究环境与生态因子对水体、土壤、大气污染物等影响实践技术
  • pytorch_grad_cam 库学习笔记—— Ablation-CAM 算法的基类 AblationCAM 和 AblationLayer
  • 如何避免频繁切换npm源
  • pytorch-利用letnet5框架深度学习手写数字识别
  • Vue2(七):配置脚手架、render函数、ref属性、props配置项、mixin(混入)、插件、scoped样式
  • 深入解析交换机端口安全:Sticky MAC的工作原理与应用实践
  • 机器视觉学习-day03-灰度化实验-二值化和自适应二值化
  • 【C++】智能指针底层原理:引用计数与资源管理机制
  • 深度学习篇---LeNet-5网络结构
  • 病理软件Cellprofiler使用教程
  • vue2 和 vue3 生命周期的区别
  • 一篇文章拆解Java主流垃圾回收器及其调优方法。
  • LeetCode-22day:多维动态规划
  • 代码随想录Day62:图论(Floyd 算法精讲、A * 算法精讲、最短路算法总结、图论总结)
  • vue2和vue3的对比
  • TensorFlow 深度学习:使用 feature_column 训练心脏病分类模型
  • Day3--HOT100--42. 接雨水,3. 无重复字符的最长子串,438. 找到字符串中所有字母异位词
  • CentOS 7 服务器初始化:从 0 到 1 的安全高效配置指南
  • 肌肉力量训练
  • 木马免杀工具使用
  • 产品经理操作手册(3)——产品需求文档
  • 全链路营销增长引擎闭门会北京站开启倒计时,解码营销破局之道
  • 构建生产级 RAG 系统:从数据处理到智能体(Agent)的全流程深度解析
  • 书生大模型InternLM2:从2.6T数据到200K上下文的开源模型王者
  • word批量修改交叉引用颜色