Nginx负载均衡

DBC 1.7K 0

我们先来一个最简单的,体验一下

一、首先你需要有一个域名这不用说了,其他的就是修改配置文件,具体修改的地方如下

Nginx负载均衡插图

upstream lbs {
   server 172.23.46.157:8889;
   server 172.23.46.157:9801;
}

Nginx负载均衡插图2

	    server {
        listen       80;
        server_name  	ng-load-balancing.dbc655.top;
        location / {
          proxy_pass http://lbs;
          proxy_redirect default;
        }
	}
温馨提示

到了这里,我们就成功了,第一个是设置负载均衡的服务,相信看起来也很简单,第二个就是转发的路径相关了。下面我们测试一下,发送两次请求,我们可以看到两次结果的不一样。Nginx负载均衡插图4
Nginx负载均衡插图6
博主这里图省事,第一个服务是直连服务的,第二个服务值通过网关需要传token的,所以会不成功,很简单吧![aru_42]
我们这里的负载均衡策略是默认的轮询策略

Nginx常见的负载均衡策略

  • 节点轮询(默认)
    • 简介:每个请求按顺序分配到不同的后端服务器
    • 场景:会造成可靠性低和负载分配不均衡,适合静态文件服务器
  • weight 权重配置
    • 简介:weight和访问比率成正比,数字越大,分配得到的流量越高
    • 场景:服务器性能差异大的情况使用
upstream lbs {
   server 172.23.46.157:8889 weight=5;
   server 172.23.46.157:9801 weight=10;
}

Nginx负载均衡插图8

温馨提示

效果就是9801会跑两次,然后才到8889跑一次,相信很清晰![aru_42]

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;
  • 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=60sproxy_next_upstream error timeout http_500 http_503 http_404

其中的意思就是,如果在60s内出现了两次宕机,那么不会再负载过去这台服务器,会直接宕机它!直到下一个周期开始,才会继续调用。

发表评论 取消回复
表情 图片 链接 代码

分享