Nginx-负载均衡与动静分离

负载均衡

负载均衡基本使用

1 配置上游服务器

upstream myserver { #是server外层
  server  ip1:8080;
  server  ip1:8080;       
}

2 配置代理

server {
 location  / {         
    proxy_pass  http://myserver;#请求转向myserver 定义的服务器列表  注意这个http不能丢       
    
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }

负载均衡的策略

轮询

1 轮询
默认的权重都是1,则访问顺序为ABABAB

upstream myserver { 
  server  ip1:8080;
  server  ip1:8080;       
}

2 加权轮询 则访问顺序为ABBABB

upstream myserver { 
    server  ip1 weight=1;
    server  ip2 weight=2;
}

3 热备
当我们第一台服务器能够正常提供服务的时候,服务器2是不会参与服务的,当我们的服务1 有问题了则会切换至服务器2

upstream myserver { 
  server  ip1:8080;
  server  ip2:8080; backup;  #热备     
}

4 复杂轮询

upstream myserver { 
  server ip1:8080 weight=2 max_fails=1 fail_timeout=10; #这里的fail_timeout有两层意思,第一层意思是在10s内允许的失败菜蔬为1 第二层意思是 当10内失败过一次服务器暂停服务10s后继续服务。
  server ip2:8080 weight=1 max_fails=3 fail_timeout=20;  
  server ip3:8080 backup; #热备 
  server ip4:8080 down;
}

upstream myserver { 
  server ip1:8080 max_fails=1 fail_timeout=10;
  server ip1:8080 max_fails=1 fail_timeout=10;  
}
  • down:表示当前的server暂时不参与负载均衡,该状态一般会对需要停机维护的服务器进行设置。
  • backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails:表示在 fail_timeout 时间内最多允许的失败次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout:经历了max_fails次失败后,暂停服务的时间,默认为 10 秒。max_fails可以和fail_timeout一起使用。
  • weight:默认为1。weight越大,负载的权重就越大。
IP HASH

nginx会让相同的客户端ip请求相同的服务器。如果是有状态的服务则应该采用ip_hash 比如登录功能,在第一台服务器记录了登录的状态,第二次邀请求同一台服务器才能读取到这个登录态。当然了会有其它的方式来解决这些问题,这里不做讨论。
1 普通hash

upstream myserver { 
  ip_hash ;
  server  ip1:8080 ;
  server  ip2:8080 ;
}

2 复杂hash

upstream myserver { 
  ip_hash ;
  server ip1:8080 weight=2 max_fails=3 fail_timeout=20;
  server ip2:8080 weight=1 max_fails=3 fail_timeout=20;
}

对于该策略需要注意以下几点:

  • 在 nginx1.3.1 版本之前,该策略中不能指定 weight 属性。
  • 该策略不能与 backup 同时使用。
  • 此策略适合有状态服务,比如 session。
  • 当有服务器宕机,必须手动指定 down 属性,否则请求仍是会落到该服务器。

3 least_conn
把请求转发给连接数最少的服务器。

upstream myserver { 
  least_conn ;
  server ip1:8080 weight=2 max_fails=3 fail_timeout=20;
  server ip2 weight=1 max_fails=3 fail_timeout=20;  
  server ip3:8080 backup; #热备 
  server ip4:8080 down;    
}

动静分离

upstream static.liyong.com{ #两台静态资源服务器,两台静态资源要一致
    server ip1:80;
    server ip2:80;
}

upstream dynamic.liyong.com{ #两台动态资源服务器
    server ip3:8081;
    server ip4:8082;
}

server {
    listen 80;
    server_name localhost;
    
    location ~* .*(css|js|html|images).+ {
        proxy_pass http://static.liyong.com;
    }
    location / {
        proxy_pass http://dynamic.liyong.com;
    }
}

静态资源服务器:

location / { #可以只用一个/拦截所有的请求根据目录来分类 也可以再分类
     root statics;
 }

你可能感兴趣的:(Nginx,学习笔记,nginx,负载均衡,运维,动静分离,upstream)