Nginx 的 HttpUpstreamModule 提供对后端(backend)server的简单负载均衡。一个最简单的 upstream 写法例如以下:

upstream backend {server backend1.example.com;server backend2.example.com;server.backend3.example.com;
}server {location / {proxy_pass http://backend;}
}

1、后端server

通过 upstream 能够设定后端server,指定的方式能够是 IP 地址与port、域名、UNIX 套接字(socket)。当中假设域名能够被解析为多个地址。则这些地址都作为 backend。

以下举例说明:

upstream backend {server blog.csdn.net/poechant;server 145.223.156.89:8090;server unix:/tmp/backend3;
}

第一个 backend 是用域名指定的。第二个 backend 是用 IP 和port号指定的。

第三个 backend 是用 UNIX 套接字指定的。

2、负载均衡策略

Nginx 提供轮询(round robin)、用户 IP 哈希(client IP)和指定权重 3 种方式。

默认情况下,Nginx 会为你提供轮询作为负载均衡策略。

可是这并不一定可以让你惬意。比方,某一时段内的一连串訪问都是由同一个用户 Michael 发起的,那么第一次 Michael 的请求可能是 backend2,而下一次是 backend3。然后是 backend1、backend2、backend3…… 在大多数应用场景中,这样并不高效。当然。也正因如此,Nginx 为你提供了一个依照 Michael、Jason、David 等等这些乱七八糟的用户的 IP 来 hash 的方式,这样每一个 client 的訪问请求都会被甩给同一个后端server。详细的使用方式例如以下:

upstream backend {ip_hash;server backend1.example.com;server backend2.example.com;server.backend3.example.com;
}

这种策略中,用于进行 hash 运算的 key,是 client 的 C 类 IP 地址(C 类 IP 地址就是范围在 192.0.0.0 到 223.255.255.255 之间,前三段号码表示子网。第四段号码为本地主机的 IP 地址类别)。

这种方式保证一个 client 每次请求都将到达同一个 backend。

当然,假设所 hash 到的 backend 当前不可用。则请求会被转移到其它 backend。

再介绍一个和 ip_hash 配合使用的keyword:down。

当某个一个 server 临时性的宕机(down)时,你能够使用“down”来标示出来。而且这样被标示的 server 就不会接受请求去处理。

详细例如以下:

upstream backend {server blog.csdn.net/poechant down;server 145.223.156.89:8090;server unix:/tmp/backend3;
}

还能够使用指定权重(weight)的方式。例如以下:

upstream backend {server backend1.example.com;server 123.321.123.321:456 weight=4;
}

默认情况下 weight 为 1,对于上面的样例,第一个 server 的权重取默认值 1,第二个是 4。所以相当于第一个 server 接收 20% 的请求,第二接收 80% 的。要注意的是 weight 与 ip_hash 是不能同一时候使用的,原因非常easy,他们是不同且彼此冲突的策略。

3、重试策略

能够为每一个 backend 指定最大的重试次数,和重试时间间隔。

所使用的keyword是 max_fails 和 fail_timeout。例如以下所看到的:

upstream backend {server backend1.example.com weight=5;server 54.244.56.3:8081 max_fails=3 fail_timeout=30s;
}

在上例中,最大失败次数为 3,也就是最多进行 3 次尝试,且超时时间为 30秒。max_fails 的默认值为 1。fail_timeout 的默认值是 10s。传输失败的情形,由 proxy_next_upstream 或 fastcgi_next_upstream 指定。并且能够使用 proxy_connect_timeout 和 proxy_read_timeout 控制 upstream 响应时间。

有一种情况须要注意,就是 upstream 中仅仅有一个 server 时。max_fails 和 fail_timeout 參数可能不会起作用。

导致的问题就是 nginx 仅仅会尝试一次 upstream 请求,假设失败这个请求就被抛弃了 : ( ……解决办法。比較取巧。就是在 upstream 中将你这个可怜的唯一 server 多写几次,例如以下:

upstream backend {server backend.example.com max_fails fail_timeout=30s;server backend.example.com max_fails fail_timeout=30s;server backend.example.com max_fails fail_timeout=30s;
}

4、备机策略

从 Nginx 的 0.6.7 版本号開始。能够使用“backup”keyword。当全部的非备机(non-backup)都宕机(down)或者繁忙(busy)的时候。就仅仅使用由 backup 标注的备机。必需要注意的是,backup 不能和 ip_hash keyword一起使用。

举比例如以下:

upstream backend {server backend1.example.com;server backend2.example.com backup;server backend3.example.com;
}

Nginx 负载均衡配置和策略相关推荐

  1. Nginx负载均衡配置和健康检查

    Nginx负载均衡配置和健康检查 注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. nginx的强大之处不必要我细说,当初第一次接触ngin ...

  2. nginx负载均衡配置-windows

    http://www.2cto.com/os/201302/191589.html nginx负载均衡配置-windows 虽然说windows上的nginx在官方文档中提到"仅作为测试&q ...

  3. Nginx负载均衡配置实例

    五.Nginx负载均衡配置实例 实现效果:访问 www.123.com/edu/a.html的时候,将请求平均分配到8080和8081端口. 准备工作: 1)准备两台Tomcat服务器(端口号为808 ...

  4. Tomcat集群快速入门:Nginx负载均衡配置,常用策略,场景及特点

    Nginx负载均衡的配置,常用策略,场景,以及特点,放到这里是需要更细化的讲解,毕竟一期还没有做集群,而我们这一期做集群的时候,很多点要单独拿出来深入讲解,第一个轮询,默认的一个配置,简单也好理解,第 ...

  5. Nginx负载均衡配置策略

    转自:http://www.freeoa.net/osuport/cluster/nginx-load-equilibrium-configuration-strategy_1652.html Ngi ...

  6. nginx - 负载均衡配置-负载均衡策略

    目录 知识点1:网站流量分析指标 什么是pv? 什么是uv? 什么是IP? 知识点2:正向代理和反向代理 知识点3:负载均衡实验 什么是负载均衡? IP地址规划: 实验拓扑图 知识点4:负载均衡策略 ...

  7. NGINX负载均衡配置解析

    课程目标 掌握什么是负载均衡及负载均衡的作用和意义. 了解lvs负载均衡的三种模式. 了解lvs-DR负载均衡部署方法. 掌握nginx实现负载均衡的方法. 掌握lvs+nginx负载均衡拓扑结构. ...

  8. Nginx负载均衡配置教程-Linux

    引言 别问,问就是工作需要.让我把写的一个服务用Nginx负载均衡一下. 正好记录一下. 1. 准备 确保你的Nginx已经安装完毕,且可以正常使用.如果还没安装,请看这个链接:https://blo ...

  9. Nginx负载均衡配置实例详解

    负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦. 负载均衡 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可 ...

最新文章

  1. 最大流问题模板-java-蓝桥杯-算法训练-网络流裸题
  2. 前沿观察 | Gartner:2020年数据与分析领域的十大技术趋势
  3. 布局文件中fill_parent、match_parent和wrap_content有什么区别?
  4. 告诉你你也学不会!中台灵感 SuperCell 的管理之道!
  5. Objective C中@protected等关键字概述
  6. 对软件测试的认识你了解多少
  7. mysql5.6.25密码_安装压缩版mysql5.6.25/ 5.7.14
  8. web通讯录之登录注册界面
  9. 华为(英国)招聘CPU/GPU架构及系统软件工程师
  10. 苹果全线支持支付宝,放不下的中国战场
  11. Repeater OnItemCommand 失效
  12. 上传文件时服务器返回错误信息,上传文件时的错误提示
  13. 基于Matlab深度学习的驾驶员疲劳检测系统
  14. 《C专家编程》之 内存泄漏
  15. python字体类型arial_python 更改字体_更改字体名称而不更改默认字体python
  16. 阿里云主机配置HTTPS
  17. HDU-1556题解
  18. 从玩具到工具,OPPO新一代智能眼镜Air Glass正式发布
  19. 心疼果粉,10V、4A,荣耀Magic2超级快充充电头正式曝光厉害了
  20. rsyslog 定义格式

热门文章

  1. springboot项目文档源码_基于SpringBoot和Vue的企业级中后台项目(附源码)
  2. ab plc软件_回收拆机拆厂二手机械设备回收PLC自动化物资回收【研发吧】
  3. 机器人学习--智能移动机器人的有关技术演讲(浙大-熊蓉教授-2021年)
  4. Spring Boot 上传文件(spring boot upload file)
  5. 毕业论文 | 基于脉冲耦合神经网络(PCNN)的图像特征提取:论文及源代码及参考文献
  6. JavaScript/VBScript脚本程序调试(Wscript篇)
  7. sh密码登录mysql_Shell下实现免密码快速登陆MySQL数据库的方法
  8. python吧_Python | 初识Python程序设计
  9. VSCode远程开发
  10. 数据挖掘:分享两个Pandas使用小陷阱