Nginx-七层负载均衡集群

nginx

特点
    1. 功能强大,性能卓越,运行稳定。
    1. 配置简单灵活。
    1. 能够自动剔除工作不正常的后端服务器。
    1. 上传文件使用异步模式。

      client—nginx—web1 web2 web3 lvs同步请求 DR client -->dr—web1

    1. 支持多种分配策略,可以分配权重,分配方式灵活。
优势
  • nginx复制用户请求,在后端服务器出现问题时。nginx会再复制一份请求发给另一台后端服务器。 lvs则在这种情况,只能用户重新发请求

  • 缺点

    • 流量会经过nginx,nginx成为瓶颈
  • 生产架构

请添加图片描述
nginx负载均衡算法

  • 1.round robin(默认)

    • 轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式。 适用于后台机器性能一致的情况。 挂掉的机器可以自动从服务列表中剔除。
  • 2.weight

    • 根据权重来分发请求到不同的机器中,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

    • 例如:

      例如:  
      upstream bakend {    
      server 192.168.0.14 weight=10;    
      server 192.168.0.15 weight=10;    
      }  
      
  • 3.IP_hash

    • 根据请求者ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。

    • 例如:

      例如:
      upstream bakend {    
      ip_hash;    
      server 192.168.0.14:88;    
      server 192.168.0.15:80;    
      }   
      
      
  • 4.url_hash(第三方)

    • 根据请求的url的hash值将请求分到不同的机器中,当后台服务器为缓存的时候效率高。

    • 需要额外安装 nginx的upstream_hash模块

      • wget http://wiki.nginx.org/images/7/78/Nginx_upstream_hash-0.3.tar.gz
    • 在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法 复制代码

      upstream backend {    
      server squid1:3128;    
      server squid2:3128;    
      hash $request_uri;    
      hash_method crc32;    
      }  
      
  • 5.fair(第三方)

    • 根据后台响应时间来分发请求,响应时间短的分发的请求多。

    • 例如:

      upstream backend {    
      server server1;    
      server server2;    
      fair;    
      }  
      
  • 每个设备的状态设置为:

    • 1.down 表示单前的server暂时不参与负载
    • 2.weight 默认为1.weight越大,负载的权重就越大。
    • 3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
    • 4.fail_timeout:max_fails次失败后,暂停的时间。
    • 5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
    • nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
    • client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
    • client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
    • location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡
  • 7层负载均衡语法示例

    • 通过location对不同的请求进行进行负载均衡,因为通过http协议,所以称作7层

    • location  / {
      
      }
      location ~ \.html${
      proxy_pass ...
      }
      location ~ \.php${
      proxy_pass ...
      }
      location ~ \.(jpg|png|css|js)${
      proxy_pass ...
      }     
      
  • 环境

    • client:client
    • nginx:nginx
    • apache:web1
    • apache:web2
  • 案例

    • 1.关闭防火墙和selinux(略)

    • 2.域名解析

    • 3.同步时间(实验环境略)

      • 计划任务执行如下命令
      • ntpdate 时间服务器地址
    • 4.准备web1页面

    • 5.配置nginx(192.168.145.16)

      • yum install -y epel-release

      • 如果用的是之前的环境( yum remove haproxy -y)

      • yum install -y nginx

      • vim /etc/nginx/ngxin.conf

        • 注意IP地址

        • http {
            upstream  html {
          	 server web1:80;
          	 server web2:80;
            }
            server {
          
            location / {
          	proxy_pass   http://html;
            }
           }
          }
          
          
    • 6.测试负载均衡

      • 访问nginx服务器。能交替的看到web1和web2
    • 7.动静分离(略)

      • 1 增加一个upstream php server web3

      • 2.增加一个location ~ .php {}

      • 3.示例

        •     upstream html {
                  server web1:80;
                  server web2:80;
                  }
              upstream php {
                  server web3:80;
                  server web4:80;
                  }
          server {
                  location / {
                   proxy_pass http://html;
                  }
                  location ~ \.php$ {
                   proxy_pass http://php;
                  }
          }
          
          http {
             
          
              upstream html {
                  server 192.168.145.136:80;
                  server 192.168.145.137:80;
                  }
          
              upstream php {
                  server 192.168.145.145:80;
                  server 192.168.145.155:80;
                  }
          
              server {
                  listen       80;
                  listen       [::]:80;
                  server_name  _;
                  root         /usr/share/nginx/html;
          
                  location / {
                  proxy_pass   http://html;
                  }
                  location ~ \.php$ {
                   proxy_pass http://php;
                  }
              }
          
          
      • 4.客户端测试:

        [root@client ~]# elinks --dump http://192.168.145.16/index.html
           web11111
        [root@client ~]# elinks --dump http://192.168.145.16/index.html
           web22222
        [root@client ~]# elinks --dump http://192.168.145.16/index.php
           php111111
        [root@client ~]# elinks --dump http://192.168.145.16/index.php
           php2222222
        
        
  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值