Nginx集群负载均衡配置完整流程

news2024/10/12 18:20:56

今天,良哥带你来做一个nginx集群的负载均衡配置的完整流程。

一、准备工作

本次搭建的操作系统环境是win11,linux可配置类同。

1)首先,下载nginx。

下载地址为:http://nginx.org/en/download.html
良哥下载的是:1.24.0 版本
在这里插入图片描述

2)建立工作目录

下载到硬盘后解压三份,目录存放如下:
在这里插入图片描述
其中master为主节点,负责代理分发请求。slave1、slave2负荷提供应用服务(读者可根据需要将其更换为tomcat或java后端服务)。

二、配置集群

1)配置从机

①修改默认主页
为了查看配置效果,我们首先需要将两个nginx从机的默认主页修改一下。
进入slave1的html目录,使用文本编辑器打开index.html
在这里插入图片描述
添加一行内容,如下:
在这里插入图片描述

slave2类同,添加的内容为:

I am server: slave-2

②修改nginx.conf配置文件
进入slave1的conf目录,用记事本打开nginx.conf文件
在这里插入图片描述
将侦听端口改为:8081
在这里插入图片描述

slave2类同,

端口设置为:8082

2)配置主机

进入master主机目录,用记事本打开配置文件
在这里插入图片描述
在http节点中添加配置:

    ## 4.1)七层负载均衡(节点列表配置)
    upstream backend {
		##least_conn;
		server 127.0.0.1:8081;
		server 127.0.0.1:8082;
	}

在http的server节点中添加配置:

    ## 4.2)七层负载均衡(代理配置)
	location / {
		proxy_pass http://backend;
	}

在这里插入图片描述

三、验证效果

将三个nginx服务启起来。
打开浏览器,在地址栏输入 http:localhost 回车。
1)浏览器页面显示内容为 I am server: slave-1,说明请求被分发到了slave1的服务端上去了,如下:
在这里插入图片描述
2)刷新页面,浏览器内容显示 I am server: slave-2,说明请求被分发到了slave2的服务端去了,如下:
在这里插入图片描述
重复刷新,页面内容会在上述两个中切换!说明请求已经被轮询分发到不同的后端节点了。

四、扩展知识

1)四层负载均衡配置

四层负载均衡数据包是在底层就进行了分发,而七层负载均衡数据包则在最顶端进行分发。因此,四层负载均衡的效率比七层负载均衡的要高;但是,四层负载均衡不能识别域名只能配置IP+端口模式进行访问,而七层负载均衡配置域名访问的。
具体配置如下:
(注意:stream模块的位置,要在http模块上方,同时proxy_pass的书写方式也有不同。)
在这里插入图片描述

2)nginx的负载均衡策略

负载均衡策略包括三种:轮询(默认策略)、ip_hash(ip哈希策略)、least_conn(最少连接策略);配置在upstream节点中,如下:
在这里插入图片描述

1.轮询(默认)
每个请求按照请求时间顺序分配到不同的后端服务器,如果后端服务器挂了,则自动剔除。
此策略还可以设置:权重,指定轮询的频率,weight和访问率成正比,用于后端服务器性能不均匀的情况。

2.ip_hash
客户端ip地址被用作hash key来判断客户端请求应该发送到哪个服务器,这种方法保证了来自相同客户端的请求总是发送到相同服务器。

3.least_conn
最少连接策略,nginx会尽量不让负载繁忙的应用服务器上负载过多的请求,相反的,会把新的请求发送到比较不繁忙的服务器。

配置示例如下:

http {
	upstream serverlist{
        ip_hash;
        ##least_conn;
        ## 屏蔽上述两个参数即采用默认的策略:轮询
        server www.address1.com weight=3;// 或者ip+端口 , 不需要加入http/https前缀
        server www.address2.com weight=2;
        server www.address3.com; // 默认 weight=1
    }
    server {
        listen 80;
        location / {
            proxy_pass http://serverlist;
        }
    }
}

3)故障下线、备份服务、访问失败等配置

1.down
假如有一台主机是出了故障,或者下线了,要暂时移出,那可以把它标为down,表示请求是会略过这台主机的。

upstream serverlist{
        server www.address1.com; // 或者ip+端口 , 不需要加入http/https前缀
        server www.address2.com down;
}

2.backup
backup是指备份的机器,相对于备份的机器来说,其他的机器就相当于主要服务器,只要当主要服务器不可用的时候,才会用到备用服务器。

upstream serverlist{
        server www.address1.com; // 或者ip+端口 , 不需要加入http/https前缀
        server www.address2.com backup;
}

3.max_fails和fail_timeout
默认情况下,max_fails的值为1,表示的是请求失败的次数,请求1次失败就换到下台主机。另外还有一个参数是fail_timeout,表示的是请求失败的超时时间,在设定的时间内没有成功,那作为失败处理。

upstream serverlist{
        server www.address1.com max_fails=2; // 或者ip+端口 , 不需要加入http/https前缀
        server www.address2.com backup;
}

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

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

相关文章

浅谈余压监控系统在住宅小区的应用方案

【摘要】: 本文分析了火灾发生时人员伤亡的主要原因——烟雾,并针对该原因提供切实可靠的系统应用解决方案,并通过具体案例,从设计依据、产品选型、系统组网、现场安装等方式介绍余压监控系统,希望可以在火灾发生时较大…

如何使用前端绘图库(D3.js、Chart.js等)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

紫光同创FPGA实现PCIE测速试验,提供PDS工程和Linux QT上位机源码和技术支持

目录 1、前言免责声明 2、我这里已有的 GT 高速接口解决方案3、设计思路框架PCIE硬件设计PCIE IP核添加和配置驱动文件和驱动安装QT上位机和源码 4、PDS工程详解5、上板调试验证并演示6、福利:工程代码的获取 紫光同创FPGA实现PCIE测速试验,提供PDS工程和…

spring 提前编译:AOT

文章目录 AOT概述GraalvmNative Image演示Native Image构建过程GraalVM安装(1)下载GraalVM 安装C的编译环境 Native Image构建 AOT概述 JIT与AOT的区别 JIT和AOT 这个名词是指两种不同的编译方式,这两种编译方式的主要区别在于是否在“运行时…

vue源码笔记之——响应系统

vue是一种声明式范式编程,使用vue者只需要告诉其想要什么结果,无需关心具体实现(vue内部做了,底层是利用命令式范式) 1. reactive为什么只能操作对象,对于基本数据类型,需要用ref? …

Nginx 代理

目录 正向代理 反向代理 负载均衡 负载均衡的工作原理 优势和好处 算法和策略 应用领域 Nginx 的反向代理 应用场景 在网络通信中,代理服务器扮演着重要的角色,其中正向代理和反向代理是两种常见的代理服务器模式。它们在网络安全、性能优化和…

vue3后台管理系统之pinia及持久化集成使用

安装依赖 pnpm i pinia 在src目录下创建store 创建大仓库 //仓库大仓库 import { createPinia } from pinia //创建大仓库 const pinia createPinia() //对外暴露:入口文件需要安装仓库 export default pinia 全局注册pinia 配置用户仓库pinia管理数据 // 创建用…

JavaSE入门---认识Java数组

文章目录 一. 数组的基本概念1.1 为什么要使用数组?1.2 什么是数组?1.3 数组的使用 二. 数组是引用类型三. 数组的应用场景四. 数组中的常用方法五. 二维数组 一. 数组的基本概念 1.1 为什么要使用数组? 想象这样的一个场景:期末…

混淆技术研究笔记(七)Ant扩展介绍

ant 扩展官方文档:https://ant.apache.org/manual/develop.html Writing Your Own Task 编写你自己的任务 1. 创建一个XXTask类 创建一个Java类继承org.apache.tools.ant.Task ,实际上不继承也可以,定义一个 execute() 方法就可以&#xf…

【python】制作一个windows端自动化工具!

作为一名自动化工程师,这一章,带大家来看看我是如何制作一个windows端的自动化工具,本章节内容我会从基础的环境配置、基础模块介绍、框架设计、实际运用等方面来讲解,对于想要未来从事该行业的人来说,希望这篇文章能给…

公司重要文件防泄密

公司重要文件防泄密是企业管理中一项非常重要的任务,今天分享几个可以防止公司重要文件泄密的方式: 1、建立完善的文件管理制度 企业应该制定严格的文件管理制度,包括文件分类、加密、访问权限的管理等。确保每个员工都了解文件管理制度并严…

【力扣1528】重新排列字符串

👑专栏内容:力扣刷题⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、题目描述二、题目分析1、Java代码2、C代码 一、题目描述 给你一个字符串 s 和一个长度相同的整数数组 indices。 请你…

GLIP DetCLIP

1 GLIP: 十分钟解读GLIP:Grounded Language-Image Pre-training - 知乎 Grounded Language-Image Pre-training(GLIP)论文笔记 - 知乎 GLIP的主要贡献如下: 将phrase grounding和目标检测任务统一,将image和text pr…

Docker 快速入门体验

Docker 是什么? Docker 是一个开源项目,它能够自动化部署应用程序,通过所谓的容器来实现。这些容器允许开发者将自己的应用以及依赖打包到一个可移植的容器中,然后发布到任何流行的 Linux 或 Windows 机器上也可以实现虚拟化。Do…

Linux系统中配置系统

在Linux系统中配置系统设置->网络设置代理的详细教程如下: 首先,确保您已经安装了NetworkManager和nmtui。在终端中输入以下命令: sudo apt-get update sudo apt-get install network-manager nmtui 打开系统设置。在桌面上点击“设置”…

文件和命令的查找与处理

1.命令查找 which which 接命令 2.文件查找 find 按文件名字查找 准确查找 find / -name "hosts" 粗略查找 find / -name "ho*ts" 扩展名查找 find / -name "*.txt" 按文件类型查找 find / -type f 文件查找 find / -ty…

哈夫曼树实现哈夫曼编码(C++)

题目要求:根据哈夫曼编码的原理,编写一个程序,在用户输入结点权值的基础上求赫夫曼编码,并能把给定的编码进行译码。 (1)初始化:从键盘输入一字符串(或读入一文件)&…

【微服务】spring webflux使用详解

目录 一、webflux介绍 1.1 什么是webflux 1.2 什么是响应式编程 1.3 webflux特点 二、Java9中响应式编程 2.1 定义事件流源 2.2 实现订阅者 三、Spring Webflux介绍 四、Reactor 介绍 五、Reactor 常用API操作 5.1 Flux 创建流操作API 5.2 Flux响应流的订阅 5.3 Fl…

PHP WAP餐厅点餐系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP餐厅点餐系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 PHP WAP餐厅点餐系统 代码 https://download.csdn.net/download/qq_41221322/88440001 二、…

Kubeadm部署k8s集群 kuboard

目录 主机准备 主机配置 修改主机名(三个节点分别执行) 配置hosts(所有节点) 关闭防火墙、selinux、swap、dnsmasq(所有节点) 安装依赖包(所有节点) 系统参数设置(所有节点) 时间同步(所有节点) 配…