Nginx实现负载均衡


#关于Nginx的负载均衡

nginx能实现负载均衡,什么是负载均衡呢?就是说应用部署在不同的服务器上,但是通过统一的域名进入,nginx则对请求进行分发,将请求分发到不同的服务器上去处理,这样就可以有效的减轻了单台服务器的压力。
在上面这两种情况下,nginx服务器的作用都只是作为分发服务器,真正的内容,我们可以放在其他的服务器上,这样来,还能起到一层安全隔壁的作用,nginx作为隔离层。
在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。

#Nginx负载均衡策略

负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:

upstream lvs-server {
    server 192.168.1.14:2838;
    server 192.168.1.15:2838;
}

在upstream模块配置完成后,要让反向代理指向服务器列表:

location / {
			proxy_pass   http://lvs-server;  
}

这就是最基本的负载均衡实例,但这不足以满足实际需求;
nginx的负载均衡策略可以划分为两大类:内置策略和扩展策略。内置策略包含轮询、加权和ip_hash、least_conn,在默认情况下这四种策略会编译进nginx内核,只需在nginx配置中指明参数即可。扩展策略有很多,如fair、url_hash等,默认不编译进nginx内核。

策略描述
轮询默认方式
weight权重方式
ip_hash依据ip分配方式
least_conn最少连接方式
fair(扩展)响应时间方式
url_hash(扩展)依据URL分配方式
1、轮询(默认)

轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上;
有如下参数:

参数描述
fail_timeout与max_fails结合使用。
max_fails设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了
fail_time服务器会被认为停机的时间长度,默认为10s。
backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
down标记服务器永久停机了。
upstream lvs-server {
    server 192.168.1.14:2838;
    server 192.168.1.15:2838;
}

注意:

  • 在轮询中,如果服务器down掉了,会自动剔除该服务器。
  • 缺省配置就是轮询策略。
  • 此策略适合服务器配置相当,无状态且短平快的服务使用。
2、权重(weight)

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,将性能好的分配权重高来发挥服务器最大性能。

upstream lvs-server {
    server 192.168.1.14:2838 weight=3;
    server 192.168.1.15:2838 weight=7;
}

权重越高,被访问的概率越大,如上例,分别是30%,70%。
注意:

  • 权重越高分配到需要处理的请求越多。
  • 此策略可以与least_conn和ip_hash结合使用。
  • 此策略比较适合服务器的硬件配置差别比较大的情况。
3、ip_hash

指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。

upstream lvs-server {
	ip_hash;
    server 192.168.1.14:2838 weight=3;
    server 192.168.1.15:2838 weight=7;
}

注意:

  • 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
  • ip_hash不能与backup同时使用。
  • 此策略适合有状态服务,比如session。
  • 当有服务器需要剔除,必须手动down掉。
4、最少连接(least_conn)

把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

upstream lvs-server {
	least_conn;
    server 192.168.1.14:2838 weight=3;
    server 192.168.1.15:2838 weight=7;
}
5、fair (扩展策略)

按照服务器端的响应时间来分配请求,响应时间短的优先分配。

upstream lvs-server {
    server 192.168.1.14:2838 weight=3;
    server 192.168.1.15:2838 weight=7;
    fair;
}
6、url_hash(扩展策略)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。

upstream lvs-server {
	hash $request_uri; 
    server 192.168.1.14:2838 weight=3;
    server 192.168.1.15:2838 weight=7;
}

#配置简单实例

worker_processes  1;

events {
    worker_connections  1024;
}

http {
	upstream lvsserver {
    	server 192.168.1.14:2838 weight=3;
    	server 192.168.1.15:2838 weight=7;
	}

   server {
       listen       80;
       server_name  test.com;

       location / {
        proxy_pass http://lvsserver;
      }
    }
}

#参考

Nginx服务器之负载均衡策略


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值