暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

nginx集群系列(三):nginx集群中的负载均衡实现方式【六种负载方式的实现】

巴韭特锁螺丝 2025-01-24
70

一、需求背景

    Nginx集群模式已经创建,需要配置负载均衡,使用户的请求被分配到俩台服务器访问。

    Master:192.168.1.137:80

    Slave:192.168.1.138:80

    统一负载访问入口:192.168.1.137:88



基础配置如下:

    user  root root;
    worker_processes 1;
    worker_rlimit_nofile 65535;




    error_log   data/nginx/logs/error.log  warn;






    events {
        worker_connections  1024;
    }


    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        upstream fz {
            ip_hash;
            fair;
            server 192.168.1.137:80 weight=1;
            server 192.168.1.138:80 weight=4;
        }
            server {
                listen 88;
                server_name  localhost;
                location {
                    proxy_pass http://fz;         
                    proxy_set_header Host $host;         
                }
            }


        keepalive_timeout  65;
        client_max_body_size 100M;
        client_body_buffer_size 1M;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;


        include data/nginx/conf/*.conf;


        proxy_connect_timeout       600;
        proxy_send_timeout          600;
        proxy_read_timeout          600;
        send_timeout                600;


    }


    核心配置参数如下:

          upstream fz {
              ip_hash;
              fair;
              server 192.168.1.137:80 weight=1;
              server 192.168.1.138:80 weight=4;
          }
                server {
                    listen 88;
                    server_name  localhost;
                    location {
                        proxy_pass http://fz;         
                        proxy_set_header Host $host;         
                    }

        通过调整该配置中的upstream模块配置,实现各种不同方式的负载。

        二、默认RR(round-robin)简单轮询

             upstream fz {
                  server 192.168.1.137:80;
                  server 192.168.1.138:80;
              }

              每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

          三、权重负载

                upstream fz {
                    server 192.168.1.137:80 weight=1;
                    server 192.168.1.138:80 weight=4;
                }


                表示用户每访问5次,其中有4次访问到Server 192.168.1.138:80有1次访问到 Server 192.168.1.137:80。

                该方式指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

            四、IP-Hash负载

                上面俩种方式:程序如果采用了session保存数据,则会导致会话丢失,用户重新登陆等问题,故需要一个客户只访问一个服务器。

                 upstream fz {
                      ip_hash;
                      server 192.168.1.137:80 weight=1;
                      server 192.168.1.138:80 weight=4;
                  }


                  该方式实现了一个客户端IP,访问到一个服务端,会话Session不会因为刷新而改变

              五、Fair(第三方)负载均衡

              1、下载fair

                  官方下载地址:https://github.com/gnosek/nginx-upstream-fair

                  上传到//usr/local/目录下,并解压。

               2、编译添加该模块

                  因该服务器已经安装过nginx,故需要新增编译该模块。

                  首先使用nginx -V查看当前已经编译的模块,在后面新增该参数。

                  --add-module=/usr/local/nginx-upstream-fair-master  

                  进入nginx的编译目录,执行以下命令:

                ./configure --prefix=/usr/local/Yinling/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-http_random_index_module --with-http_gzip_static_module   --add-module=/usr/local/nginx-upstream-fair-master

                 3、处理编译过程中的报错

                报错信息如下:

                  ngx_http_upstream_srv_conf_t’没有名为‘default_port’的成员”

                   报错解决方法为

                    sed -ri "s/default_port/no_port/g" /usr/local/nginx-upstream-fair-master/ngx_http_upstream_fair_module.c

                    4、编译后的nginx替换原Nginx

                      cp nginx usr/local/nginx/sbin/

                      5、配置fair负载

                           upstream fz {
                                fair;
                                server 192.168.1.137:80;
                                server 192.168.1.138:80;
                            }


                            按响应时间来分配请求,响应时间短的优先分配,动态调整服务器的权重

                        五、URL_Hash负载

                              upstream fz {
                                  hash $request_uri consistent;
                                  server 192.168.1.137:80;
                                  server 192.168.1.138:80;
                              }


                              nginx 1.7.2版本后,已经集成了url hash功能,可直接使用,不需要再安装三方模块。

                              url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取

                              Consistent表示使用一致性hash算法。

                          六、least_conn调度负载

                               upstream fz {
                                    least_conn;
                                    server 192.168.1.137:80;
                                    server 192.168.1.138:80;
                                }


                            least_conn调度算法:调度至客户端连接数最小的节点服务器。

                            假设∶

                            192.168.1.137:80节点有10个连接、192.168.1.138:80节点有5连接,此时新的连接进入会分发给b节点。


                            文章转载自巴韭特锁螺丝,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论