• Nginx负载均衡详解


    负载均衡

    负载均衡可以将请求前端的请求分担到后端多个节点上,提升系统的响应和处理能力。

    负载均衡是扩展应用程序并提高其性能和冗余的绝佳方法。Nginx是一种流行的Web服务器软件,可以配置为简单但功能强大的负载均衡器,以提高服务器资源的可用性和效率。在负载平衡配置中,nginx充当在多个单独服务器上工作的分布式Web应用程序的单个入口点。

    对于CentOS安装nginxn,用户可以在/etc/nginx/conf.d/下找到其主机配置文件,加载了任何.conf类型的虚拟主机文件。

     

    Nginx负载均衡策略

    负载均衡的策略可以大致分为两大类:内置策略 和扩展策略
    内置策略:一般会直接编译进Nginx内核,常用的有轮询、加权轮询、最少连接平衡和ip_hash策略。在默认情况下内置策略会编译进nginx内核,只需在nginx配置中指明参数即可。
    扩展策略:fair、url hash、Sticky策略等,默认不编译进nginx内核。

    Nginx配置方法与配置模板

    1.编辑配置文档:load-balancer.conf

    sudo vi /etc/nginx/conf.d/load-balancer.conf

    2.在load-balancer.conf中,您需要定义以下两个段:上游服务器

    #定义要包含在负载均衡方案中的服务器。
    #最好使用服务器的私有IP以获得更好的性能和安全性。
    http {
         upstream backend {
         server 10.1.0.101;
         server 10.1.0.102;
         server 10.1.0.103;
       }
       #该服务器接受到端口80的所有流量并将其传递给上游。
       #请注意,上游名称和proxy_pass需要匹配。
    server {     
            listen 80;
            location / {
             proxy_pass http://backend;       }
       }
    }    

     3.然后保存文件,退出编辑器并再次重新启动nginx。

    sudo systemctl restart nginx

    内置策略

    (1)轮序策略
    该策略就是服务器将每个前端请求按顺序(时间顺序和排列次序)逐一分配到不同的后端服务器节点。如果后端服务器出现问题,即down掉,那么就会被自动剔除。
    http {
    # ... 省略其它配置
    upstream s_siat{
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
    }
    # ... 省略其它配置
    }

    (2)加权轮询策略
    该策略在基本的轮询策略基础上考虑各后端服务器节点接受请求的权重,指定各后端服务器节点被轮询到的机率,主要应用于后端服务器节点性能不均的情况。
    例如:通过直接配置weight来设置访问机率,weight的大小和访问比率成正比。下面三个服务器(如果不配置weight,则默认配置为weight=1),第一个的权重是1,第二个的权重是3,第三个的权重是2,那么这三个后端服务器被访问的比率是1:3:2,即server172.31.3.82:9171被访问的机率最高,server172.31.3.82:9171次之,server172.31.3.82:9170访问的机率最小。

    http {
    # ... 省略其它配置
    upstream s_siat{
    server 172.31.3.82:9170;
    server 172.31.3.82:9171 weight=3;
    server 172.31.3.82:9173 weight=2;
    }
    # ... 省略其它配置
    }


    (3)ip_hash策略

       该策略是将前端的访问IP进行hash操作,然后根据hash结果将请求分配到不同的后端服务器节点。这样会使得每个前端访问IP会固定访问一个后端服务器节点,好处是前端用户的session只在一个后端服务器节点上,不必考虑一个session存在多台服务器节点出现session贡献问题。
    例如:因为weight是内置,所以可以直接和其他策略配合使用。本策略使用的是ip_hash策略,需要在配置upstream中添加ip_hash一行。
    http {
    # ... 省略其它配置
    upstream s_siat{
    ip_hash;
    server 172.31.3.82:9170;
    server 172.31.3.82:9171 weight=3;
    server 172.31.3.82:9173 weight=2;
    }
    # ... 省略其它配置
    }
    或者
    http {
    # ... 省略其它配置
    upstream s_siat{
    ip_hash;
    server 172.31.3.82:9170;
    server 172.31.3.82:9171;
    server 172.31.3.82:9173;
    }
    # ... 省略其它配置
    }
    两者都是ip_hash策略。只是对应服务器被访问的机率有所改变。
    注意:ip_hash模块和后面的Sticky模块不能够同时使用。


    (4)最少连接(least_conn)
    基于最少连接的负载平衡是另一种简单的方法。顾名思义,此方法将请求定向到当时具有最少活动连接的服务器。对于请求有时可能需要更长时间才能完成的应用程序,它比循环法更有效。
    http {
    # ... 省略其它配置
    upstream s_siat {
    least_conn;
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
    }
    # ... 省略其它配置
    }

    扩展策略

    (1)url_hash策略
    该策略将前端请求的url地址进行hash操作,根据hash结果将请求定向到同一后端服务器节点上,后台服务器为缓存是比较有效。一般url_hash需要配合缓冲命中来使用。
    http {
    # ... 省略其它配置
    upstream s_siat {
    server 192.168.0.100:8080;
    server 192.168.0.101:8080;
    hash $request_uri;
    hash_method crc32;
    }
    # ... 省略其它配置
    }

    (2)fair策略

    该策略请求转发到负载最小的后端服务器节点上。Nginx通过后端服务器节点对响应时间来判断负载情况,响应时间最短的节点负载就相对较轻,Nginx就会将前端请求转发到此后端服务器节点上。
    http {
    # ... 省略其它配置
    upstream s_siat{
    server 172.31.3.82:9170;
    server 172.31.3.82:9171;
    server 172.31.3.82:9173;
    fair;
    # ... 省略其它配置
    }

    (3)Sticky策略
    该策略在多台服务器的环境下,为了确保一个客户端只和一台服务器通讯,它会保持长连接,并在结束会话后再次选择一个服务器,保证了压力均衡。
    http {
    # ... 省略其它配置

    upstream s_siat{
    sticky;
    server 172.31.3.82:9170;
    server 172.31.3.82:9171;
    server 172.31.3.82:9173;
    # ... 省略其它配置
    }
    注意:如果浏览器不支持cookie,那么sticky不生效,毕竟整个模块是给予cookie实现。Sticky模块和ip_hash模块不能够同时使用。

    upstream中的其他配置

    在需要使用负载均衡的server中增加 :

    proxy_passhttp://backserver/; 

    upstreambackserver{ 

    ip_hash; 

    server127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载) 

    server127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大) 

    server127.0.0.1:6060 max_fails=3 fail_timeout=30s;(max_fails允许请求失败的次数默认为1,此处允许失败的次数为3。每次失败后暂停的时间为30s) 

    server127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器)

    keepalive16;(连接到nginx负载均衡器的最大)

    server{

       location / {  #(进行url重定向或进行新的代理)

           proxy_pass http://backend;

       }

    1.down表示单前的server暂时不参与负载

    2.weight默认为1.weight越大,负载的权重就越大。

    3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误

    4.fail_timeout:max_fails次失败后,暂停的时间。

    5.backup:其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

    6. keepalive:连接数(keepalive的值)指定了每个工作进程中保留的持续连接到nginx负载均衡器缓存的最大值。如果超过这个设置值的闲置进程想链接到nginx负载均衡器组,最先连接的将被关闭。

    7. location对URL进行匹配.可以进行重定向或者进行新的代理负载均衡

    注:nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

    l client_body_in_file_only设置为On可以讲clientpost过来的数据记录到文件中用来做debug

    l client_body_temp_path设置记录文件的目录 可以设置最多3层目录

    refer

    如何使用nginx配置负载均衡

    Nginx的几种负载均衡策略

  • 相关阅读:
    netCore3.1项目搭建过程记录-省的每次都傻乎乎的不知道应该先干啥
    探究 position-sticky 失效问题
    协议的设计一般采用结构体进行数据打包,在协议设计的结构体中能不能使用指针 ?
    ROS pluginlib
    ROS NodeHandle命令空间问题
    ROS 常见命令
    ROS ros::spin() 和 ros::spineOnce区别
    PPM图像文件格式
    Qtcreator for visual studio版本调试问题
    Install Typora For Linux
  • 原文地址:https://www.cnblogs.com/-wenli/p/11688306.html
Copyright © 2020-2023  润新知