Nginx实现简单负载均衡

   |   2 minute read   |   Using 743 words

这里主要用到upstream这个指令,该指令需要ngx_http_upstream_module模块的支持,这个模块主要用于定义一组供proxy_pass等指令使用的服务器

upstream语法为: upstream tagname { }

Nginx的负载均衡模式主要是以下几种:

1、轮询模式

按时间顺序逐一分配到不同的后端服务器,如后端服务器down掉能自动剔除。

upstream backend {
    server 192.168.1.100:9527;
    server 192.168.1.101:9527;
    server 192.168.1.102:9527;
}

2、Weight权重模式

指定轮询几率,weight越大权重越大,被分配到的几率也越大。

upstream backend {
    server 192.168.1.100:9527 weight=1;
    server 192.168.1.101:9527 weight=2;
    server 192.168.1.102:9527 weight=3;
}

3、IP_HASH模式

根据访问者ip的hash结果进行分配,这样可以保证同一访客始终访问固定的后端服务器,适合要求session共享的场景。

upstream backend {
    ip_hash;
    server 192.168.1.100:9527;
    server 192.168.1.101:9527;
    server 192.168.1.102:9527;
}

另外两种模式是URL_HASH模式和FAIR模式,不过这两种都是第三方模式。一般上面前两种模式就能满足我们大部分需求了

我们可以为服务器组里的每台服务器其定义相关状态,除了上面用到的weight,还包括以下几个状态:
down : 表示该服务器部参与负载;
weight : 默认为1,值越大负载的权重就越大;
max_fails : 允许请求失败的最大次数,超过最大次数时返回prox_next_upstream模块定义的错误;
fail_timeout : max_fails次失败后,暂停的时间;
backup : 其它所有非backup机器down或者忙的时候,分配backup机器,实际使用并不是要主server完全down掉才分配backup,而是主server无法完成请求,比如相关文件在主server没找到但主server并没有down掉时也会分配到backup机器。

Nginx支持同时设置多组负载均衡,用来给不同的server使用。

在http块内定义好以上的某种或某几种模式以后就可以在需要的server块内进行使用了:

server {

	#######other directives######
	
	location / {
		proxy_pass http://backend;
	}
}


comments powered by Disqus