• nginx 负载均衡


    upstream 配置

    在http模块
    upstream app {

    server 192.168.0.250:8081 weight=5;
    server www.cn;
    server unix:/tmp/app;

    server w1.cn:8082 backup;
    server w2.cn:8083 backup;

    }

    server配置参数

    指令

    含义

    down

    当前的server暂时不参与负载均衡

    backup

    预留的备份服务器(一旦其它的服务器均宕机没有存活的了,该标记的机器就会接收请求)

    max_fails

    设置在fail_timeout时间内尝试对一个服务器连接的最大次数,如果超过这个次数,那么就会标记为down,即允许请求失败的次数

    fail_timeout

    某个server连接失败了max_fails次,则nginx会认为该server不工作了

    同时,在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。过了fail_timeout会再次检查服务是否恢复。默认:fail_timeout为10s,max_fails为1次

    max_conns

    限制最大的接收的连接数

    nginx负载均衡配置实例
    分别监听8081,8082,8083
    code1,code2,code3下分别有

    index.php

    <?php
    echo "<pre>";
    print_r($_SERVER);
    ?>

    code1.conf

    server {
                    listen       8081;
                    server_name  192.168.0.250:8081;
                    root    /mnt/hgfs/www/web/code1;
                    autoindex on;
    
                    access_log  /mnt/hgfs/www/log/w1.access.log  main;
    
                    location / {
                                    index   index.php;
                                    autoindex on;
                                    autoindex_exact_size off;
                                    autoindex_localtime on;
                    }
                    error_log /mnt/hgfs/www/log/w1_err.log info;
                    error_page  404              /404.html;
    
                    error_page   500 502 503 504  /50x.html;
                    location = /50x.html {
                                    root   html;
                    }
    
                    location ~ .php$ {
                                    fastcgi_pass   127.0.0.1:9000;
                                    fastcgi_index  index.php;
                                    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                                    include        fastcgi_params;
                    }
     }

    nginx.conf里部分

     http里

    upstream code{
              server 192.168.0.250:8081;
              server 192.168.0.250:8082;
              server 192.168.0.250:8083;
              server 192.168.0.251;
            }
    server {
            listen       80;
            server_name    192.168.0.250 ;
            access_log  logs/host.access.log  main;
            location / {
                    proxy_pass http://code;
                }
    }

    注意输出的 http_host都是code
    [HTTP_HOST] => code
    [SERVER_NAME] => 192.168.0.250:8083
    [SERVER_PORT] => 8083
    [SERVER_ADDR] => 192.168.0.250

    默认的方式是轮询
    阻止8082 的 如果用同一进程启动的,用端口关掉模拟
    iptables -I INPUT -p tcp --dport 8082 -j DROP
    开启
    iptables -I INPUT -p tcp --dport 8082 -j ACCEPT
    这种在从8081到8082切换后有延迟相应
    下面这种没有
    或者关闭 192.168.0.251上的机器上Nginx进程

    #演示
    upstream code{
              server 192.168.0.250:8081 down;
              server 192.168.0.250:8082 down;
              server 192.168.0.251 max_fails=1 fail_timeout=10s;
              server 192.168.0.250:8083 backup;
            }

    停掉 server 192.168.0.251
    server 192.168.0.250:8083 立即开始服务
    此时立即开启 192.168.0.251 如果还没到10s,访问的还是 192.168.0.250:8083
    到10s后 检测到 192.168.0.251服务恢复,192.168.0.250:8083 转变为backup状态 不在提供服务,由192.168.0.251提供服务

     调度算法

    轮询

    按时间顺序逐一分配到不同的后端服务器

    加权轮询

    weight值越大,分配到的访问几率越高

    ip_hash

    每个请求按照固定的ip的hash结果分配,这样来自同一ip的固定访问到一个后端服务器,确保客户端均匀地连接所有服务器,键值基于C类地址

    url_hash

    按照访问的url的hash结果分配请求,是每个url定向到同一个后端服务器

    least_conn

    最少连接数,哪个机器连接数少就分发哪个机器

    hash关键数值

    hash自定义key

    #ip_hash 不支持backup等
    upstream code{
              ip_hash;
              server 192.168.0.250:8081 ;
              server 192.168.0.250:8082 ;
              server 192.168.0.251;
             # server 192.168.0.250:8083 backup;
            }

    url_hash
    Syntax:hash key [consistent];
    Default:--
    Context:upstream;
    This directive appeared in version 1.7.2

    upstream code{
              hash $request_uri;
              server 192.168.0.250:8081 ;
              server 192.168.0.250:8082 ;
              server 192.168.0.251;
             
            }
    
            
            server {
                    listen       80;
                    server_name    192.168.0.250 ;
                    #root    /mnt/hgfs/www/web/thread/process_thread_study/swoole;
    
                    access_log  logs/host.access.log  main;
    
                    location / {
                            proxy_pass http://code;
                    }
            }
    
            include ./hosts/*.conf;

    同一url访问到的机器是一致的

    http://192.168.0.250/ 访问到的始终是同一台 比如 192.168.0.251
    http://192.168.0.250/index1.php 访问到的始终是同一台 比如 192.168.0.250:8081

    keepalive
    保持活动连接 ,nginx服务器将会为每一个worker进程保持同上游服务器的连接
    连接缓存在nginx需要同上游服务器持续保持一定数量的连接时非常有用
    如果上游服务器通过http进行对话,那么nginx将会使用http/1.1协议的持久连接机制维护这些打开的连接
    upstream apache {
    server 127.0.0.1:8080;
    keepalive 32;
    }
    location / {
    proxy_http_version 1.1;
    proxy_set_header Connection "";
    proxy_pass http://apache;
    }
    初始的时候nginx仅需为每个worker打开32个tcp连接,然后通过不发送close的connection头保持这些连接的打开

    FastCGI上游服务器
    upstream fastcgis{
      server 10.88.1.10:9000;
      server 10.88.1.20:9000;
      server 10.88.1.30:9000;
    }
    location / {
      fastcgi_pass fastcgis;
    }

  • 相关阅读:
    K8S+Docker容器化云高可用集群实战1.1云计算平台解读
    K8S+Docker容器化云高可用集群实战
    K8S+Docker容器化云高可用集群实战1.2云原生解读
    K8S+Docker容器化云高可用集群实战1.1云计算平台解读去
    C#中枚举与字符串、整数之间转换
    如何控制某个字段不参与导出
    底层存储协议介绍
    ErrorContext JDBC Driver,client=10.0.31.109ERROR: out of memory DETAIL: Failed on request of size 262144 优化数据库配置
    MySQL索引覆盖 回表查询
    work_mem setting is too low set work_mem="500MB"
  • 原文地址:https://www.cnblogs.com/HKUI/p/9278745.html
Copyright © 2020-2023  润新知