Nginx从入门到入土(四):基于Nginx负载均衡策略

news2024/9/20 17:04:21

软负载和硬负载的概念前文提起过,那接下来我们便讲讲什么是负载均衡。

前言

Nginx负载均衡解决的是高并发的问题。

定义:

负载均衡(Load Balancing)是一种技术策略,它旨在将工作负载(如网络流量、计算任务等)均匀地分配多个操作单元(如服务器、计算机、网络链接、磁盘驱动器或其他资源)上,以优化资源的使用效率、最大化吞吐量、最小化响应时间,并防止任何单个资源的过载

由上图可见,比如突然来了十个任务,全部交由一个服务节点来做可能会崩溃,如果摊开去做,就会变得轻松。

负载均衡在带来诸多好处的同时也会引入一些与服务器集群相关的问题

 1.分布式Session一致性问题,例如会话丢失、数据不同步以及会话亲和性问题等等。我们可以使用Spring-session或者redis Token(常见)替代解决

2.分布式任务调度重复执行:在分布式系统中由于各种原因会出现任务被多次执行的问题,可以使用某某shell-job分布式任务调度平台解决。

3.分布式日志收集问题 elk+kafka日志收集

负载均衡策略内容

前三个重点掌握,后两个了解

1.轮询(默认) 每个请求按时间顺序注意分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2.指定权重  指定轮询几率,weight和访问率成正比,用于服务端性能不均的情况。

3.IP绑定  ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

4.fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5.url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到一个后端服务器,后端服务器为缓存时比较有效。

Nginx作为负载均衡器,提供了对上游服务器(处理真实业务逻辑的服务器)的负载均衡、故障转移、失败重试、容错以及健康检查等机制。当某个上游服务器发生故障或不可用时,Nginx能够自动将其从服务池中移除,并将流量转移到其他健康的上游服务器,从而确保应用的持续可用性和稳定性。

轮询机制

1.准备工作,先将服务器的端口打开

这个端口是匹配下文用到的server下的监听端口

具体步骤见上文(三)

2.打开nginx.conf,加上下列配置

解释: 

(一)

upstream backServer{
    server 127.0.0.1:8071;
    server 127.0.0.1:8072;
}
  • upstream:这是一个Nginx配置块,用于定义一组上游服务器,即后端服务器。这些服务器可以是同一台机器上的不同服务,也可以是不同机器上的服务。

  • backServer:这是自定义的上游服务器组的名称。在Nginx的其他配置部分,可以通过这个名称来引用这个服务器组。

  • server:这个指令用于指定上游服务器组中的一个服务器地址和端口。在这个例子中,定义了两个服务器:

    • 127.0.0.1:8071:这是本机上的一个服务,监听在端口8071。
    • 127.0.0.1:8072:这是本机上的另一个服务,监听在端口8072。

当Nginx接收到匹配的请求时,它将根据配置的负载均衡策略(如轮询、最少连接等)将请求转发到backServer组中的服务器。如果其中一个服务器发生故障或无法响应,Nginx会尝试将请求转发到其他可用的服务器。

(二)

这一步,连接上你自定义的上游服务器组 

3.开启本地8071,8072端口两个服务

用的还是前文(一)中的例子,我们要用同一个程序,执行两个服务,操作如下

小编用的是21版的,其他版本请自行搜索

点击箭头所指

编辑配置  

在配置窗口里找到左上角加号,添加SpringBoot配置 

在右边具体配置里这么操作,名称自定义 

点击确定后你会发现有两个配置

 

 

4.具体操作 

我们现在有两个配置,我们例如用8071配置启动,那么需要做到端口号和8071匹配,配置完了启动了,修改yml文件里的端口号,使之与第8072匹配,再启动。这么做是减少再新建一个程序,当然,新建也可以,两个程序同时运行。

控制台两个一起运行。

操作无误的话,输入www.boyatop.cn:8079,会访问到两个中的一个,点击刷新会访问到另一个

权重配置 

上面我们看过了轮询,那么权重是怎么一回事呢,其实就是通过为Nginx中的上游服务器分配不同的权重,以控制它们各自接收流量的比例,实现基于服务器性能的负载均衡

配置里面新加了weight

实操就是当你访问www.boyatop.cn:8079的时候会出现两下 8071,一下8072.概率比是2:1。

ip绑定

IP哈希(ip_hash)主要用于确保来自同一客户端的请求在整个会话中能够被定向到同一台服务器。

  1. 工作原理:当请求到达负载均衡器时,ip_hash模块会根据客户端的IP地址计算一个哈希值。然后,这个哈希值用来确定哪个后端服务器应该处理该请求。由于哈希算法的一致性,同一个IP地址在会话期间通常会映射到同一台服务器。

  2. 会话保持:这种方法可以看作是一种会话保持机制,对于需要保持用户会话状态的应用(如购物车、用户登录信息等)非常有用,因为它确保了用户的状态信息不会因为请求被分发到不同服务器而丢失。

  3. 优点

    • 简单易实现:相较于其他会话保持技术,ip_hash实现起来较为简单。
    • 无需额外存储:不需要在负载均衡器上存储会话信息。
  4. 缺点

    • IP地址变化:如果客户端的IP地址发生变化(如使用动态IP),会话可能会被重置到不同的服务器。
    • 负载不均:如果某些IP地址被哈希到同一台服务器,可能会导致后端服务器之间的负载不均。
  5. 适用场景:适用于那些对客户端IP地址相对固定,且需要保持会话状态的应用场景。

ip_hash在配置文件中的配置很简单:

 

故障转移

当Nginx配置了负载均衡,并且某个上游服务器(转发地址)发生宕机或无法访问时,Nginx默认会自动将流量故障转移到下一个可用的上游服务器。集群的目的是确保服务器端的高可用性,当发生故障时,故障转移机制会立即将流量切换到下一台健康的服务器,以保障服务的连续性和可靠性。

  1. 自动故障转移:Nginx的负载均衡配置中,如果某个上游服务器无法响应请求(如连接超时或服务器错误响应),Nginx会自动尝试将请求转发到其他健康的上游服务器。

  2. 立即切换:在检测到服务器故障时,Nginx会尽快将流量切换到其他服务器。但是,“立即”并不意味着没有延迟,实际上可能会有短暂的延迟,尤其是在配置了健康检查间隔或失败重试次数的情况下。

  3. 健康检查:为了实现故障转移,通常需要配置健康检查。Nginx可以通过第三方模块或内置功能(如ngx_http_upstream_hc_module)来定期检查上游服务器的健康状态。

  4. 故障转移策略:Nginx的故障转移策略可能包括最大失败次数(max_fails)和失败时间间隔(fail_timeout)的设置,这些参数会影响故障检测和转移的速度。

  5. 高可用性:集群的目的是提高系统的整体可用性,不仅仅是在故障发生时的故障转移,还包括负载均衡、冗余部署等策略。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react之jsx基础(2)高频使用场景

文章目录 1. **组件定义**2. **条件渲染**3. **列表渲染**4. **事件处理**5. **嵌套组件**6. **表单处理**7. **样式应用**8. **处理子组件** 在 React 中,JSX 的使用是非常广泛和高频的。以下是一些常见的高频使用场景及其示例,帮助你更好地理解 JSX 的…

Python基于flask框架的智能停车场车位系统 数据可视化分析系统fyfc81

目录 技术栈和环境说明解决的思路具体实现截图系统设计python语言django框架介绍flask框架介绍性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示技术路线操作可行性详细视频演示源码获取 技术栈和环境说明 结合用户的使用需求&…

我在高职教STM32——准备HAL库工程模板(2)

新学期已开始,又要给学生上 STM32 嵌入式课程了。这课上了多年了,一直用的都是标准库来开发,已经驾轻就熟了。人就是这样,有了自己熟悉的舒适圈,就很难做出改变,老师上课也是如此,排斥新课和不熟悉的内容。显然,STM32 的开发,HAL 库已是主流,自己其实也在使用,只不过…

基于SpringBoot+Vue的商场停车场管理系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的…

MeterSphere技术分享:UI自动化测试的必要性与解决方案

UI自动化测试体系的建设价值遵循测试金字塔模型,该模型建议测试人员在不同层次上编写和执行测试。UI测试需要编写和设计测试脚本、执行完整的应用程序,并模拟用户与应用程序交互,因此UI测试的测试速度相对较慢。但是UI测试的业务覆盖很高&…

【STL】stack,deque,queue 基础,应用与操作

stack 1.stack相关介绍 stack(栈) 栈是一种后进先出(LIFO, Last In First Out)的数据结构,意味着最后插入的数据最先被移除。C 中的栈是通过容器适配器实现的,底层默认使用 deque(双端队列&am…

数字电子技术-数值比较器

目录 数值比较器 1、1位二进制数值比较器 多位数值比较器 4位数值比较器74LS85(TTL型) 74LS85数值比较器的使用说明 数值比较器 Digital Comparator,又称数字比较器,用以对两个数字的大小或是否相等进行比较的逻辑电路。 1、1位二进制数值比较器 A和B只能取值…

硬盘数据恢复必备:4 款强大硬盘数据恢复软件推荐!

在数字化的时代,我们的生活和工作越来越离不开电脑,而硬盘作为重要的数据存储设备,一旦出现数据丢失的情况,往往会给我们带来极大的困扰。别担心,今天就为大家推荐四款强大的硬盘数据恢复软件,帮助你轻松找…

六西格玛绿带培训多少钱?从授“鱼”到授“渔”

六西格玛作为一种全球公认的质量管理方法,其影响力日益扩大,而六西格玛绿带培训作为这一体系中的关键环节,更是吸引了众多希望在职场上脱颖而出的专业人士。本文,深圳天行健企业管理咨询公司将从多个维度深入探讨“六西格玛绿带培…

巴菲特的长期投资策略:新投资者实现财务自由的启示

在投资界,沃伦巴菲特的名字几乎无人不晓。作为伯克希尔哈撒韦公司的董事长和首席执行官,巴菲特以其卓越的投资智慧和长期价值增长策略,成为了全球投资者的偶像。巴菲特的成功不仅仅是因为他的财富,更在于他对投资的深刻理解和对财…

Linux嵌入式驱动开发指南(速记版)---Linux基础篇

第一章 Ubuntu系统入门 1.1 Linux磁盘管理 1.1.1 Linux磁盘管理基本概念 关键词: Linux 磁盘管理 挂载点 /etc/fstab文件 分区 ls /dev/sd* 联系描述: Linux 磁盘管理体系通过“挂载点”概念替代了 Windows 中的“分区”概念,将硬盘部分以文…

如何保养净水器

俗话说,“三分用,七分养”,这句话道出了家电这类消费品使用寿命的秘诀。家电的长久运行并不仅仅依赖于其出厂时的品质,更与我们日常的维护保养息息相关。虽然行业标准或制造商通常会规定家电的推荐使用年限,但在许多家…

【计算机网络】传输层协议UDP

目录 一、端口号1.1 端口号范围划分1.2 认识知名端口号 二、UDP协议2.1 UDP协议端格式2.2 UDP的特点2.3 UDP的缓冲区2.4 UDP使用注意事项2.5 基于UDP的应用层协议 一、端口号 传输层协议负责数据的传输,从发送端到接收端。端口号标识一个主机上进行通信的不同的应用…

Go语言的io输入输出流

Go语言的输入输出流不如其他语言那么直观,由于是通过实现接口方法的隐式继承所以比较抽象,今天具体介绍一下go语言的输入输出流。 go语言输入输出在io库中,使用Reader接口,如下: type Reader interface {Read(p []by…

windows下用cmake编译腾讯云的对象存储COS的XML C++SDK

首先在腾讯云官网上下载sdk,网址及官方说明文档如下: 对象存储 快速入门-SDK 文档-文档中心-腾讯云 我下载解压之后的路径如下图: 下载完后就要编译了。 1.下载VS,我的开发环境是 visual studio 2019 2. 下载CMake&#xff…

UNRAID系统忘记密码解决办法

前言 unraid系统自己通过命令修改密码以后,怎么也进不去了。 这次带来如何重置密码 操作

1-2.Jetpack 之 Navigation 跳转编码模板

一、Navigation 1、Navigation 概述 Navigation 是 Jetpack 中的一个重要成员,它主要是结合导航图(Navigation Graph)来控制和简化 Fragment 之间的导航,即往哪里走,该怎么走 2、Navigate 引入 在模块级 build.gra…

《关节机械臂:智能仓库的高效助手》

关节机械臂作为一种高度精密的机器设备,在现代制造工厂的智能仓库系统中发挥着至关重要的作用。其设计初衷便是精准地模拟人类手臂在订单拣选操作中的各种运动,以实现高效、准确的物流作业。 这些多功能的机器人由多个关节巧妙组合而成,通常拥…

人工智能【AI】:未来的驱动力

在21世纪,人工智能(AI)已经成为推动技术进步和创新的关键力量。AI不仅仅是科幻小说中的概念,它已经渗透到我们日常生活的方方面面,从智能手机的语音助手到复杂的医疗诊断系统,AI的应用无处不在。 人工智能…