• 四、nginx负载均衡[轮询]


    一、负载均衡

    解释:负载均衡分为两部分(应用集群和负载均衡器)。应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理并返回响应的数据。负载均衡器:将用户访问的请求根据对应的负载均衡算法,分发到集群中的一台服务器进行处理。

    图示:
    在这里插入图片描述

    好处:解决服务器的高并发压力,提高应用程序的处理性能。提供故障转移,实现高可用。通过添加或减少服务器数量,增强网站的可扩展性。在负载均衡器上进行过滤,可以提高系统的安全性

    二、负载均衡算法

    参数:

    状态概述
    down当前的server暂时不参与负载均衡
    backup预留的备份服务器
    max_fails允许请求失败的次数
    fail_timeout经过max_fails失败后, 服务暂停时间
    max_conns限制最大的接收连接数

    例子:

    upstream gao{
    	server 127.0.0.1:12346 down;#表示这台服务器不参与负载均衡
    	server 127.0.0.1:12347 backup;#当作备份服务器,也就是其它不能使用时其才会被使用
    	server 127.0.0.1:12348 max_conns=1000;#表示这台服务器同时活动连接的最大数量是1000
    	server 127.0.0.1:12349 max_fails=3 fail_timeout=15;(这两个参数配合使用)#当这台服务器服务失败3次后将暂停15秒才再做尝试
    	server 127.0.0.1:12350;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.轮询

    解释:默认的均衡算法就是轮询,当请求来时,每个服务器都会处理一次,挨个进行,这个适合,服务器配置想近的情况下使用。(推荐使用的算法

    # 定义一组服务器与均衡算法(默认就是轮询)
    upstream gao{
    	server 127.0.0.1:12346;
    	server 127.0.0.1:12347;
    }
    server{
    	listen 12346;
            location /{
    		default_type text/plain;
    		return 200 12346;
            }
    }
    server{
    	listen 12347;
    	location /{
                    default_type text/plain;
                    return 200 12347;
            }
    }
    # 负载均衡服务器
    server {
    	listen 8083;
    	location /{
    		proxy_pass http://gao;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    2.权重

    解释:用来设置服务器的权重,默认为1,权重越大被分配到请求的几率越大,此策略比较适合服务器的硬件配置差别比较大的情况(推荐使用的算法

    # 定义一组服务器与均衡算法
    upstream gao{
    	server 127.0.0.1:12346 weight=8;
    	server 127.0.0.1:12347 weight=2;
    }
    server{
    	listen 12346;
            location /{
    		default_type text/plain;
    		return 200 12346;
            }
    }
    server{
    	listen 12347;
    	location /{
                    default_type text/plain;
                    return 200 12347;
            }
    }
    # 负载均衡服务器
    server {
    	listen 8083;
    	location /{
    		proxy_pass http://gao;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    3.ip_hash

    解释:当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上(也就是同一个ip发出的所有请求根据哈希计算后,只会让固定的一台服务器处理)。优点:这种方法适合session在服务器上的情况(如果用户请求不停由多个服务器处理可能会session状态不保存)
    缺点:很可能造成流量倾斜,而且设置后端服务器权重等方法将不起作用

    # 定义一组服务器与均衡算法
    upstream gao{
    	ip_hash;
    	server 127.0.0.1:12346;
    	server 127.0.0.1:12347;
    }
    server{
    	listen 12346;
            location /{
    		default_type text/plain;
    		return 200 12346;
            }
    }
    server{
    	listen 12347;
    	location /{
                    default_type text/plain;
                    return 200 12347;
            }
    }
    # 负载均衡服务器
    server {
    	listen 8083;
    	location /{
    		proxy_pass http://gao;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    4.least_conn

    解释:最少连接,把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。(可以使用weight

    # 定义一组服务器与均衡算法
    upstream gao{
    	least_conn;
    	server 127.0.0.1:12346 weight=2;
    	server 127.0.0.1:12347 weight=1;
    }
    server{
    	listen 12346;
            location /{
    		default_type text/plain;
    		return 200 12346;
            }
    }
    server{
    	listen 12347;
    	location /{
                    default_type text/plain;
                    return 200 12347;
            }
    }
    # 负载均衡服务器
    server {
    	listen 8083;
    	location /{
    		proxy_pass http://gao;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    5.url_hash

    解释:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。

    # 定义一组服务器与均衡算法
    upstream gao{
    	hash $request_uri;
    	server 127.0.0.1:12346;
    	server 127.0.0.1:12347;
    }
    server{
    	listen 12346;
            location /{
    		default_type text/plain;
    		return 200 12346;
            }
    }
    server{
    	listen 12347;
    	location /{
                    default_type text/plain;
                    return 200 12347;
            }
    }
    # 负载均衡服务器
    server {
    	listen 8083;
    	location /{
    		proxy_pass http://gao;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    6.fair

    解释:fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。那么如何使用第三方模块的fair负载均衡策略(需要自行安装)

    # 定义一组服务器与均衡算法
    upstream gao{
    	fair;
    	server 127.0.0.1:12346;
    	server 127.0.0.1:12347;
    }
    server{
    	listen 12346;
            location /{
    		default_type text/plain;
    		return 200 12346;
            }
    }
    server{
    	listen 12347;
    	location /{
                    default_type text/plain;
                    return 200 12347;
            }
    }
    # 负载均衡服务器
    server {
    	listen 8083;
    	location /{
    		proxy_pass http://gao;
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    Linux 常用命令
    事务提交之后再执行某些操作 → 你有哪些实现方式?
    Linux Day13 ---信号量
    面试算法8:和大于或等于k的最短子数组
    Linux - Shell、Console和Terminal的区别
    微服务架构 | 架构演进
    【前端每日基础】day43——同步异步
    芯片安全(security)
    Github优秀项目-使用Python基于Wav2Lip的AI主播
    【Netty】nio阻塞&非阻塞&Selector
  • 原文地址:https://blog.csdn.net/weixin_46765649/article/details/128064454