我们先来一个最简单的,体验一下
一、首先你需要有一个域名这不用说了,其他的就是修改配置文件,具体修改的地方如下
upstream lbs { server 172.23.46.157:8889; server 172.23.46.157:9801; }
server { listen 80; server_name ng-load-balancing.dbc655.top; location / { proxy_pass http://lbs; proxy_redirect default; } }
Nginx常见的负载均衡策略
- 节点轮询(默认)
- 简介:每个请求按顺序分配到不同的后端服务器
- 场景:会造成可靠性低和负载分配不均衡,适合静态文件服务器
- weight 权重配置
- 简介:weight和访问比率成正比,数字越大,分配得到的流量越高
- 场景:服务器性能差异大的情况使用
upstream lbs { server 172.23.46.157:8889 weight=5; server 172.23.46.157:9801 weight=10; }
ip_hash(固定分发)
- 简介:根据请求按访问ip的hash结果分配,这样每个用户就可以固定访问一个后端服务器
- 场景:服务器业务分区、业务缓存、Session需要单点的情况
小例子
upstream lbs { ip_hash; server 192.168.159.133:8080; server 192.168.159.133:8081; }
- upstream还可以为每个节点设置状态值
- down 表示当前的server暂时不参与负载
- server 192.168.159.133:8080 down;
- down 表示当前的server暂时不参与负载
- backup 其它所有的非backup机器down的时候,会请求backup机器,这台机器压力会最轻,配置也会相对低
- server 192.168.159.133:8080 backup;
Nginx探测后端节点可用性和配置实操
如果某个应用挂了,请求不应该继续分发过去
- max_fails 允许请求失败的次数,默认为1.当超过最大次数时就不会请求
- fail_timeout : max_fails次失败后,暂停的时间,默认:fail_timeout为10s
- 参数解释
- max_fails=N 设定Nginx与后端节点通信的尝试失败的次数。
- 在fail_timeout参数定义的时间内,如果失败的次数达到此值,Nginx就这个节点不可用。
- 在下一个fail_timeout时间段到来前,服务器不会再被尝试。
- 失败的尝试次数默认是1,如果设为0就会停止统计尝试次数,认为服务器是一直可用的。
- 具体什么是nginx认为的失败呢
- 可以通过指令proxy_next_upstream来配置什么是失败的尝试。
- 注意默认配置时,http_404状态不被认为是失败的尝试。
配置代码
upstream lbs { server 172.23.46.157:8889 max_fails=2 fail_timeout=60s; server 172.23.46.157:9801 max_fails=2 fail_timeout=60s; }
server { listen 80; server_name ng-load-balancing.dbc655.top; location / { proxy_pass http://lbs; proxy_redirect default; proxy_next_upstream error timeout http_500 http_503 http_404; }
重点的代码就是:max_fails=2 fail_timeout=60s
、proxy_next_upstream error timeout http_500 http_503 http_404
其中的意思就是,如果在60s内出现了两次宕机,那么不会再负载过去这台服务器,会直接宕机它!直到下一个周期开始,才会继续调用。
本文作者为DBC,转载请注明。