共计 2756 个字符,预计需要花费 7 分钟才能阅读完成。
负载均衡技术是在多个应用实例之间的通用技术,用于优化资源利用,增大吞吐量,减少延迟,和确保故障容忍配置。
很可能使用 Nginx 作为一个高效的 HTTP 负载均衡器分发请求到不同的应用服务器,改善 web 应用性能,扩展性和可靠性。
1、负载均衡方式
Nginx 支持下面的负载均衡策略
round-robin 对应用服务器的请求以轮询方式
least-connected 下一个请求分配到拥有最少活跃连接数的服务器。
ip-hash 一个 hash 函数,用于决定哪一个服务器处理下一个请求,基于客户端的 IP 地址。
2、默认的负载均衡配置
最简单的 nginx 负载均衡看起来就像这样
http {
upstreammyapp {
serversrv1.example.com;
serversrv2.example.com;
serversrv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp
}
}
}
上面的例子中,有三个相同应用实例运行在 srv1-srv3. 当负载均衡方法没有指定的时候,默认使用 round-robin。所有的请求被代理到 myapp 服务器组,nginx 应用 HTTP 负载均衡方法分发请求。
在 nginx 中实现的反向代理包括对 HTTP,HTTPS,FastCGI,uwsgi,SCGI 和 memcached 的负载均衡。
想要配置 HTTPS 的负载均衡,只需要使用 https 作为协议。
当配置 FastCGI,uwsgi,SCGI 或 memcached 的负载均衡的时候,使用 fastcgi_pass,uwsgi_pass,scgi_pass 和 memcached_pass 指令。
3、最少连接负载均衡
另一个负载均衡方式是 least-connected。least-connected 控制应用的负载使用相对公平的方式当请求需要长时间才能完成的时候。
使用 least-connected 负载均衡方式,nginx 将不会在负载很忙的服务器上增加请求,而是分发新的请求到不忙的服务器上面。
least-connected 负载均衡方式在 nginx 中,当 least conn 指令用于服务器组配置部分时被激活 upstream myapp1 {
least_conn;
serversrv1.example.com;
serversrv2.example.com;
serversrv3.example.com;
}
4、会话保持
请记住一点是使用 round-robin 或 least-connected 方式,后来的客户端请求都有可能分发到不同的服务器上。不能保证同一个客户端一直指向同一个服务器。
如果需要绑定客户端到特定的应用服务器,也就是让客户端的回话,粘住,持久的,一直选择特定的一个服务器。可以选择使用 ip-hash 负载均衡方式。
使用 ip-hash,客户端的 IP 地址用作 hash key,决定哪一个服务器被选中来处理客户端的请求。这个方式确保相同客户端的请求一直定向到相同的服务器,除非这个服务器不可用了。
想配置 IP-hash 负载方式,只需要添加 ip_hash 指令在服务器组配置里面。
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
5、权重负载均衡
使用服务器的权重来影响 nginx 的负载均衡算法也是有可能的。
在上面的例子中,服务器权重都没有配置,也就意味着所有知道的服务器都被同等对待对于特定的负载均衡算法来说。
使用 round-robin 的话,这也意味着服务器之间会分发相同的请求数量。
当 weight 参数加在指定服务器上的时候,weight 也被看做负载均衡决定的部分。
upstream myapp1 {
serversrv1.example.com weight=3;
serversrv2.example.com;
serversrv3.example.com;
}
使用这种配置的话,每 5 个新的请求到来,3 个请求会分发给 srv1,一个给 srv2,一个给 srv3。
在较新版本的 nginx 中使用 weight 在 ip-hash 和 least-connected 负载均衡方式也是可以的。
6、健康检查
在 nginx 实现反向代理的时候,也可以实现健康状态检查,如果服务器响应错误了,nginx 会把这个服务器标记为 faild,然后试着避免挑选这个服务器处理后面的请求。
max_fails 指令设置了在 fail_timeout 中尝试访问服务器的最大失败次数,默认 max_fails 设为 1. 当设为 0 的时候,这个服务器将不会进行健康检查。fail_timeoutcanshu 定义了多长时间之内这个服务器被标记为失败。在 fail_timeout 间隔后,随着服务器的失败,ngixn 会尝试平缓的使用客户端请求探测服务器,如果探测成功了,那么这个服务器被标记为活着的。
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 的下载地址 :请点这里
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-12/125789.htm