Nginx之4中不同的负载均衡算法
2016-06-01 14:06
435 查看
Nginx的负载均衡支持4种算法,round-robin、least-connected、ip-hash、和weightd。
http {
upstream app1 {
server 10.10.10.1;
server 10.10.10.2;
}
server {
listen 80;
location / {
proxy_pass http://app1;
}
}
}
upstream app1用来指定一个服务器组,该组的名字是app1,包含两台服务器。在指定服务器组里面包含的服务器时以形式“server ip/domain:port”的形式指定,其中80端口可以忽略。然后在接收到请求时通过“proxy_pass http://app1”把对应的请求转发到组app1上。Nginx默认的负载均衡算法就是循环轮询,如上配置我们采用的就是循环轮询,其会把接收到的请求循环的分发给其包含的(当前可用的)服务器。使用如上配置时,Nginx会把第1个请求给10.10.10.1,把第2个请求给10.10.10.2,第3个请求给10.10.10.1,以此类推。
upstream app1 {
least_conn;
server 10.10.10.1;
server 10.10.10.2;
}
upstream app1 {
ip_hash;
server 10.10.10.1;
server 10.10.10.2;
}
upstream app1 {
server 10.10.10.1 weight=3;
server 10.10.10.2;
}
在如上配置时,Nginx接收到的请求中大概每4个请求中会有3个请求交给10.10.10.1服务器处理,有1个请求交给10.10.10.2处理。
除了这些指令外,Nginx负载还可以指定其它一些指令,比如
backup、down等,详情可参考: http://nginx.org/en/docs/http/ngx_http_upstream_module.html。
Nginx可指定的指令可参考: http://nginx.org/en/docs/http/ngx_http_proxy_module.html。
1、round-robin
round-robin的意思是循环轮询。Nginx最简单的负载均衡配置如下:http {
upstream app1 {
server 10.10.10.1;
server 10.10.10.2;
}
server {
listen 80;
location / {
proxy_pass http://app1;
}
}
}
upstream app1用来指定一个服务器组,该组的名字是app1,包含两台服务器。在指定服务器组里面包含的服务器时以形式“server ip/domain:port”的形式指定,其中80端口可以忽略。然后在接收到请求时通过“proxy_pass http://app1”把对应的请求转发到组app1上。Nginx默认的负载均衡算法就是循环轮询,如上配置我们采用的就是循环轮询,其会把接收到的请求循环的分发给其包含的(当前可用的)服务器。使用如上配置时,Nginx会把第1个请求给10.10.10.1,把第2个请求给10.10.10.2,第3个请求给10.10.10.1,以此类推。
2、least-connected
least-connected算法的中文翻译是最少连接,即每次都找连接数最少的服务器来转发请求。例如Nginx负载中有两台服务器,A和B,当Nginx接收到一个请求时,A正在处理的请求数是10,B正在处理的请求数是20,则Nginx会把当前请求交给A来处理。要启用最少连接负载算法只需要在定义服务器组时加上“least_conn”,如:upstream app1 {
least_conn;
server 10.10.10.1;
server 10.10.10.2;
}
3、ip-hash
ip-hash算法会根据请求的客户端IP地址来决定当前请求应该交给谁。使用ip-hash算法时Nginx会确保来自同一客户端的请求都分发到同一服务器。要使用ip-hash算法时只需要在定义服务器组时加上“ip-hash ”指令,如:upstream app1 {
ip_hash;
server 10.10.10.1;
server 10.10.10.2;
}
4、weighted
weighted算法也就是权重算法,会根据每个服务的权重来分发请求,权重大的请求相对会多分发一点,权重小的会少分发一点。这通常应用于多个服务器的性能不一致时。需要使用权重算法时只需要在定义服务器组时在服务器后面指定参数weight,如:upstream app1 {
server 10.10.10.1 weight=3;
server 10.10.10.2;
}
在如上配置时,Nginx接收到的请求中大概每4个请求中会有3个请求交给10.10.10.1服务器处理,有1个请求交给10.10.10.2处理。
除了这些指令外,Nginx负载还可以指定其它一些指令,比如
backup、down等,详情可参考: http://nginx.org/en/docs/http/ngx_http_upstream_module.html。
Nginx可指定的指令可参考: http://nginx.org/en/docs/http/ngx_http_proxy_module.html。
相关文章推荐
- 基于nginx+lua实现防火墙动态规则请求限制
- Nginx服务器防止被压力测试
- CentOS yum配置LNMP服务器(Nginx+PHP+MySQL)
- Keepalived+nginx造成流量异常
- Nginx 配置 多个VSFTP的loadbalance
- Nginx的SSL配置优化
- 配置Nginx实现负载均衡
- 了解nginx及其安装
- Nginx之proxy_store模块
- Nginx配置文件详细说明
- 网易视频云:用Nginx搭建flv,mp4,hls流媒体服务器
- Nginx 负载均衡 后端 监控检测 nginx_upstream_check_module 模块的使用
- nginx配合keepalive的方案(双主)
- 多个应用系统,只有一个域名如何开发,nginx
- Apache与Nginx的优缺点比较
- nginx编译和调试
- CodeIgniter 的nginx配置示例
- nginx设置重写规则
- Nginx负载均衡实践之一:基本实现
- Nginx+Lua 推荐两个开源项目