zoukankan      html  css  js  c++  java
  • Nginx作为负载均衡器upstream

    Nginx中与proxy模块结合使用的模块中,最常用的当属upstream模块。upstream模块可定义一个新的上下文,它包含了一组upstream服务器,这些服务器可能被赋予了不同的权重、不同的类型甚至可以基于维护等原因被标记为down。

    upstream模块常用的指令有:

    ip_hash:基于客户端IP地址完成请求的分发,它可以保证来自于同一个客户端的请求始终被转发至同一个upstream服务器,实现会话保持;

    keepalive:每个worker进程为发送到upstream服务器的连接所缓存的个数;

    least_conn:最少连接调度算法;

    server:定义一个upstream服务器的地址,还可包括一系列可选参数,如:

           weight:权重;

           max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定;

           fail_timeout:等待请求的目标服务器发送响应的时长;

           backup:用于fallback的目的,所有服务均故障时才启动此服务器;

           down:手动标记其不再处理任何请求;

    upstream backend {
        server backend1.example.com       weight=5;
        server backend2.example.com:8080;
        server unix:/tmp/backend3;
    
        server backup1.example.com:8080   backup;
        server backup2.example.com:8080   backup;
    }
    
    server {
        location / {
            proxy_pass http://backend;
        }
    }

    测试环境

    nginx:192.168.2.168

    httpd1:192.168.2.169

    httpd2:192.168.2.170

    nginx配置http中定义:

        upstream webservice {
    
            server 192.168.2.169 weight=1 max_fails=2 fail_timeout=5s;
    
            server 192.168.2.170 weight=1 max_fails=2 fail_timeout=5s;
    
            server 127.0.0.1:8080 backup;
    
    }

    server中定义

            location ~* ^/bbs/ {
    
              proxy_pass http://webservice;
    
              proxy_set_header X-Real-IP $remote_addr;
    
            }

    另外定义back server:

        server {
    
            listen 8080;
    
            server_name 127.0.0.1;
    
            root /web/errorpages;
    
            index index.html;
    
        }

    负载负载均衡:

     

    upstream模块的负载均衡算法主要有三种,轮调(round-robin)、ip哈希(ip_hash)和最少连接(least_conn)三种。

    注意:ip_hash被使用时,back server不能使用,wegiht失效

    测试中,停掉httpd1,nginx自动检查server健康状况,只负载到httd2,再次停掉httd2,会负载到back server;

    使用ip_hash算法:

        upstream webservice {
            ip_hash;
            server 192.168.2.169 weight=1 max_fails=2 fail_timeout=5s;
            server 192.168.2.170 weight=1 max_fails=2 fail_timeout=5s;
        }

    测试时只会负载到httpd2

     此外,upstream模块也能为非http类的应用实现负载均衡,如下面的示例定义了nginx为memcached服务实现负载均衡之目的。

        upstream memcachesrvs {
            server 172.16.100.6:11211;
            server 172.16.100.7:11211;
        }
        
        server {
            location / {
            set $memcached_key "$uri?$args";
            memcached_pass memcachesrvs;
            error_page 404 = @fallback;
            }
        
            location @fallback {
                    proxy_pass http://127.0.0.1:8080;
            }
        }
  • 相关阅读:
    CODE[VS] 1018 单词接龙
    Linux提示BOOT空间不足问题
    CODE[VS] 1017 乘积最大
    关于printf输出结果的一些问题
    CODE[VS] 1220 数字三角形
    redux
    Promise面试题
    学习Promise笔记
    js 事件委托 事件代理
    前端通信、跨域
  • 原文地址:https://www.cnblogs.com/jjzd/p/6696646.html
Copyright © 2011-2022 走看看