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


    今天,良哥带你来做一个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;
    	}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

    在这里插入图片描述

    三、验证效果

    将三个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;
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

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

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

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

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

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

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    JVM内存模型
    UDP与TCP报头介绍,三次握手与四次挥手详谈
    正则表达式兼容问题
    Debian中fping应用丢失之重新安装方法
    互融云农产品追溯系统:区块链存证技术实现双向可追溯
    【Qt开发流程】之HelloWorld程序
    基于开放共享的自主研发—MaxCompute 持续增强生态与开放性建设
    el-table滚动加载、懒加载(自定义指令)
    JAVA计算机毕业设计摄影摄区源码+系统+mysql数据库+lw文档
    华为云云耀云服务器L实例评测|了解配置和管理L型云服务器
  • 原文地址:https://blog.csdn.net/hualinger/article/details/133913902