nginx通过upstream实现负载均衡
随着业务和用户不断增加,单台服务器无法满足业务需求,产生服务器集群的场景。为了能充分利用服务器集群,最理想的方式就是整个集群的利用率都很平均且稳定在理想值范围内。
负载均衡(Load Balance)就是为了满足能够均衡的利用整个服务器集群从而产生的一种算法 ,常见的实现策略有:随机、轮询、哈希、一致性哈希和加权。
nginx目前比较常用的模块有:
1. 轮询
定义:依次把客户端请求分配到不同的服务器中
配置示例:
upstream zhangQ {
server ip1:port1;
server ip2:port2;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://zhangQ;
}
}
2. 最少连接
定义:把客户端请求分配到连接数最少的服务器中
如果每台服务器处理业务的时间都一样,那么此策略与轮询差不多。
如果每台服务器处理业务的时间不一样,那么采用轮询算法会导致业务逻辑处理较慢的服务器压力越来越大负载较高,这样的业务场景,把客户端请求分配到连接数较少的服务器能达到更好的负载效果。
配置示例:
upstream zhangQ {
least_conn; #实际就是比轮询多这一行
server ip1:port1;
server ip2:port2;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://zhangQ;
}
}
3. ip_hash
定义:把访问的客户端的ip利用hash算法计算为一个数值,同一个数值会落到相同的服务器。
涉及到负载均衡基本上都会设计到session的保持,但使用ip_hash就不需要关注这个问题。
配置示例:
upstream zhangQ {
ip_hash; #实际就是比轮询多这一行
server ip1:port1;
server ip2:port2;
}
server {
listen ;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://zhangQ;
}
}
4. weight
定义:权重实际就是加权轮询,根据加权值会优先分配到权重高的服务器
服务器基本都是配置不一,高配置服务器通常都会比低配置服务器赋予较高的权重值。
配置示例:
upstream zhangQ {
server ip1:port1 weight=3; #加上weight
server ip2:port2 weight=1;
}
server {
listen ;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://zhangQ;
}
}
如果按照如上配置,就是每4次客户端请求,会有3次落在ip1上,1次落在ip2上。
附上upstream中常用的几个属性配置:
| 名称 | 定义 | 示例 |
| fail_timeout | 可以理解为熔断时间,经过这个配置的时间如果服务器没响应则失败 | fail_timeout=2s |
| max_fails | 最大失败数,默认值是1,当超过最大次数时,返回proxy_next_upstream模块定义的错误. | max_fails=2 |
| down | 有此标记的服务器不参与负载 | |
| backup | 当所有非backup服务器忙或者down的时候会请求这台服务器 |
nginx通过upstream实现负载均衡的更多相关文章
- Nginx配置upstream实现负载均衡
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- 【upstream】Nginx配置upstream实现负载均衡
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- Nginx配置upstream实现负载均衡及keepalived实现nginx高可用
(原文链接:http://www.studyshare.cn/blog-front//blog/details/1159/0 ) 一.准备工作 1.准备两个项目,发布到不同的服务器上,此处使用2个虚拟 ...
- Nginx配置upstream实现负载均衡1
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- Nginx使用upstream实现负载均衡
如果Nginx没有仅仅只能代理一台服务器的话,那它也不可能像今天这么火,Nginx可以配置代理多台服务器,当一台服务器宕机之后,仍能保持系统可用.具体配置过程如下: 1. 在http节点下,添加ups ...
- [转帖]nginx upstream模块--负载均衡
nginx upstream模块--负载均衡 https://www.cnblogs.com/linjiqin/p/5494783.html Module ngx_http_upstream_modu ...
- Nginx反向代理,负载均衡,redis session共享,keepalived高可用
相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此 ...
- Nginx 服务器 之Nginx与tomcat实现负载均衡
本文讲解我们如何使用Nginx做反向带服务器,实现nginx与tomcat服务器集群做负载均衡. 一.nginx与tomcat实现负载均衡 1.在/usr/local/ngnix/conf 创建 ...
- Nginx代理功能与负载均衡详解
序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细. Nginx代理服务的 ...
随机推荐
- web images
ps切图时,我们保存时会要求选择文件格式. 一般来说,如果图像的色彩丰富,没有透明度的要求,则选择为jpeg格式: 如果图像色彩不丰富,我们就选择为png-8的格式,注意:ps中要选择无杂边,无仿色 ...
- 使用WdatePicker日期组件时,选择日期后,执行某个方法
WdatePicker({onpicked:function(){alert(123);},dateFmt:'yyyy年MM月dd日',maxDate:'%y-%M-%d'}) 1.onpicked: ...
- 解决SQL server2005数据库死锁的经验心得
前段时间提到的"sql server 2005 死锁解决探索",死锁严重,平均每天会发生一次死锁,在解决和处理SQL server2005死锁中查了很多资料和想了很多办法,后来我们 ...
- 【Leetcode】【Medium】Sqrt(x)
Implement int sqrt(int x). Compute and return the square root of x. 解题思路1,o(log(n)): 像这种从初始遍历查找匹配的任务 ...
- QT控件大小的方法
http://blog.csdn.net/liang19890820/article/details/51986284
- yii2.0查询关联数据以及widgets小部件
怎样去查询关联数据呢,接下来整理一个简单的代码:
- 2017U-Mail邮件营销平台新邮件模板功能
据U-Mail调查表明,企业用户中普遍最关心群发邮件会不会被列入垃圾箱?的确,哪怕你最用功,一旦邮件进了垃圾箱,意味着全盘尽废.业界知名服务商U-Mail一直想用户之所想,急用户之所急,十几年如一日, ...
- 一些jar包的作用
发项目的过程中,经常需要用到一写jar包,现在对其中的一写jar的作用,做下总结,也算是避免少引或者多引jar包吧,欢迎大家补充.谢谢. 1.apache的一写jar commons-collecti ...
- 显示锁(ReentranLock)
1. Lock接口:定义了一组抽象的加锁操作,提供了一种无条件的.可轮询的.定时的以及可中断的锁获取操作,所有的加锁和解锁的方法都是显示的. 2. ReentrantLock锁:实现了Lock接口,并 ...
- Ajax三级联动操作的js代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...