共计 2673 个字符,预计需要花费 7 分钟才能阅读完成。
原文 http://nginx.org/en/docs/http/load_balancing.html
本文依照自己的理解翻译
在多个应用程序间提供负载均衡是一种常用的提高资源利用率的技术,提高服务器的吞吐量,减少延迟,确保应用程序容错。Nginx 可以做为一个高效的 http 负载均衡器来将负载分发到多个应用程序上以提高性能,它也是一种可靠地,可伸缩的 web 应用程序服务器。
负载均衡的类别
轮询 - 应用程序轮流来响应请求
最少连接 - 请求被分配到活动连接最少的服务器上
ip-hash - 通过一个 hash 函数决定哪个服务器来响应用户的请求(依据客户端的请求 ip)
下面是最简单的负载均衡的配置
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
上面这个配置中 3 个相同的应用程序的服务器 srv1-srv3,默认的负载均衡方式是轮询,所用的请求通过反向代理给了 myapp1 组,nginx 通过负载均衡来分发这些请求到三个服务
上。
在 nginx 中 HTTP, HTTPS, FastCGI, uwsgi, SCGI, and memcached. 的负载均衡都是通过反向代理实现的。
要配置 https 的负载均衡只需要将 http 协议改 https 就可以了,其他配置不变。
要实现 FastCGI, uwsgi, SCGI, or memcached 的负载均衡可以分别使用 fastcgi_pass, uwsgi_pass, scgi_pass, and memcached_pass 指令。
另一种负载均衡方式是 least-connected,在“请求需要更长的时间来完成”的场景下采用 least-connected 方式可以更公平的将负载分配到多个机器上面。使用 least-connected,nginx 不会将请求分发到繁忙的机器上面,而且将新的请求分发的较清闲的机器上面。
可以在 upstream {} 模块中配置 least_conn; 指令来激活 least-connected 负载模式。
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
轮询和 least-connected 这两种负载均衡方式会将新的请求分发到不同的机器上,很难保证每个客户端会固定访问某一个服务器。
如果需要某个客户端只访问访问固定的一个服务器可以通过 ip-hash 负载均衡方式实现。
使用 ip-hash 时,客户端的 ip 作为一个散列的 Key 来决定服务器组中哪个服务器来响应请求,这种方式可以保证每个客户端每次访问的都是同一个服务器。
客户通过 ip_hash 指令来配置 ip_hash 负载均衡方式
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
权重的负载均衡方式,在轮询的基础上为每个服务器配置权重可以保证某个服务器尽可能处理多的请求
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
上面的配置中,如果有 5 个请求,有 3 个会分配到 serv1 上,有 1 个会分配到 srv2 上,有一个会分配到 srv3 上。如果不指定 weight,默认是平的的。
负载均衡包含服务器的健康检查,如果某个请求被分配到了一个服务器上,服务器无法响应,那么 nginx 会标记它失败了,在短时间内,nginx 是不会将之后的请求分配给标记失败的服务器。max_fails 指令可以设置最大失败次数,默认是 1,需要先设置了 fail_timeout 才行。fail_timeout 指定响应时间超过多少秒就将服务器标记为失败。服务器标记失败后,nginx 会使用几个客户端请求优雅地探测服务器,如果探测成功,则服务器标记成功。
更多的负载均衡指令:proxy_next_upstream,backup,down, andkeepalive.
————————————– 分割线 ————————————–
CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm
使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm
搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm
CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm
CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm
CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm
Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm
Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm
————————————– 分割线 ————————————–
Nginx 的详细介绍 :请点这里
Nginx 的下载地址 :请点这里