四、Nginx实现负载均衡的7种方式_胖太乙的博客-程序员宅基地_nginx支持哪些负载均衡方式

技术标签: Nginx  nginx  负载均衡  运维  

Nginx实现负载均衡的几种方式

1、轮询(Round Robin 默认)

请求在服务器之间均匀分布,并考虑服务器权重。默认情况下使用此方法

upstream backend {
    
   # 没有为循环指定负载平衡方法
   server backend1.example.com;
   server backend2.example.com;
}

Nginx 轮询

2、 服务器权重

默认情况下,Nginx 使用 Round Robin 方法根据权重在组中的服务器之间分配请求。该指令的 weight 参数设置服务器的权重;默认是1:

upstream backend {
    
    server backend1.example.com weight=5;
    server backend2.example.com;
    server 192.0.0.1 backup;
}

Nginx 加权轮询
在这个例子中,backend1.example.com有 weight 5;其他两台服务器有默认权重(1),但有 IP 地址的那台192.0.0.1被标记为 backup 服务器,除非其他两台服务器都不可用,否则不会接收请求。上述这种权重配置,每当有6请求,5个会发送到 backend1.example.com ,1个会发送到 backend2.example.com

3、最少连接(Least Connections )

请求被发送到活动连接数最少的服务器,其次考虑服务器权重:

upstream backend {
    
    least_conn;
    server backend1.example.com;
    server backend2.example.com;
}

4、IP Hash

请求发送到的服务器由客户端 IP 地址确定。在这种情况下,要么使用 IPv4 地址的前三个八位字节,要么使用整个 IPv6 地址来计算哈希值。该方法保证来自同一地址的请求到达同一服务器,除非它不可用。

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

如果其中一台服务器需要暂时从负载平衡轮换中移除,则可以使用down参数对其进行标记,以保留客户端 IP 地址的当前散列。由该服务器处理的请求会自动发送到组中的下一个服务器:

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

Nginx iphash

5、通用哈希

通用哈希- 请求发送到的服务器由用户定义的键确定,该键可以是文本字符串、变量或组合。例如,密钥可以是成对的源 IP 地址和端口,或 URI,如本例所示:

upstream backend {
    
    hash $request_uri consistent;
    server backend1.example.com;
    server backend2.example.com;
}

该指令的可选参数一致hash启用 ketama 一致性哈希负载平衡。请求根据用户定义的散列键值均匀分布在所有上游服务器上。如果将上游服务器添加到上游组或从上游组中删除,则仅重新映射少数键,从而在负载平衡缓存服务器或其他累积状态的应用程序的情况下最大限度地减少缓存未命中。

6、最短时间(Least Time)

最少的时间(Nginx Plus) - 对于每个请求,Nginx选择具有最低平均延迟和最低数量的活动连接,其中,最低平均延迟是根据以下哪一个参数计算得出的,以最短时间指令为准:

  • header:从服务器接收第一个字节的时间
  • last_byte:从服务器接收完整响应的时间
  • last_byte inflight:考虑到不完整的请求,从服务器接收完整响应的时间
upstream backend {
    
    least_time header;
    server backend1.example.com;
    server backend2.example.com;
}

7、Random

每个请求都将传递到随机选择的服务器。如果指定了两个参数,Nginx首先会考虑服务器权重随机选择两台服务器,然后使用指定的方法选择其中一台服务器:

  • least_conn:活动连接的最少数量
  • least_time=header(NGINX Plus):从服务器接收响应标头的最短平均时间( $upstream_header_time)
  • least_time=last_byte(NGINX Plus):从服务器接收完整响应的最小平均时间( $upstream_header_time)
upstream backend {
    
    random two least_time=last_byte;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    server backend4.example.com;
}

的随机负载平衡方法应被用于在多个负载平衡器传递请求到相同组的后端分布式环境。对于负载均衡器可以查看所有请求的环境,请使用其他负载均衡方法,例如循环、最少连接和最少时间。

注意:当配置除 Round Robin 之外的任何方法时,将相应的指令(hash、ip_hash、least_conn、least_time、 或random)放在块中server指令列表的上方upstream {}。

注: Nginx Plus 是ngxin的商业版。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IT_rookie_newbie/article/details/120628312

智能推荐

Python字符与字节新编_luck738的博客-程序员宅基地

字符字符是一个信息单位,简单来讲就是一个字母、数字、标点符号、汉字等。字符的最佳定义是Unicode字符:(文章转载自乐字节)它是一个全球化的标准,能表示世界上所有语言的字符。Unicode字符的标识(码位)是以4~6个十六进制数字表示的,并且加前缀U+。字节字节是计算机信息计量单位,一个字节代表八个比特,存储的数值范围为0~255。字节跳动(ByteDance)互联网公司的字节就是这个字节。字节是机器的,字符是人类的。把人类字符转换为机器字节时使用的算法叫做编码,反之叫做解码。算法不同

上交大 2011 二次方程计算器_dixiang1123的博客-程序员宅基地

题目:输入关于x的二次方程表达式(系数为整数),输出两个解(由小到大输出,保留两位小数);如果无解,则输出“No Solution”。思路:先确定等号位置,分成左右两个字符串,从中分别提取系数,再综合。然后求解。提取系数的过程如图:过程:介绍两个函数:atoi()函数可以识别"+""-"号,并正确转化成int。string str="-2980";string s...

只重写equals()但不重写hashCode会有什么后果?_1024276449的博客-程序员宅基地_不重写hashcode有什么影响

只重写equals()但不重写hashCode会有什么后果?1.如果判断两个数如果hashCode相同则equals不一定相同,反而equals相同则hashCode则一定相同。2.那么我们只重写equals()但不重写hashCode会有什么后果?如果我们不将我们重写equals方法的类放到HashSet等散列表中时则不会有什么影响,但如果放到我们的散列表中时我们的散列表则会优先比较HashCode所以可能会产生错误。...

Struts2中的设计模式_7潜伏7的博客-程序员宅基地_struts2设计模式

设计模式(Design pattern)是经过程序员反复实践后形成的一套代码设计经验的总结。设计模式随着编程语言的发展,也由最初的“编程惯例”逐步发展成为被反复使用、并为绝大多数程序员所知晓的、完善的理论体系。我们使用设计模式(Design pattern)的初衷,是使代码的重用度提高、让代码能够更容易被别人理解以及保证代码的可靠性。毫无疑问,在程序中使用设计模式无论是对于程序员自身还是对于应用程

Assemble UVALive - 3971 组装电脑_Nicolas Lee的博客-程序员宅基地

Recently your team noticed that the computer you use to practice for programming contests is notgood enough anymore. Therefore, you decide to buy a new computer. To make the ideal computer ...

ubuntu 16.06 编译 vlc for android_qq_15361657的博客-程序员宅基地

1、https://www.ubuntu.com/download      下载 ubuntu16.042、vmware workstation配置虚拟机3、下载android studio,下载sdk ndk4、配置sdk,ndk5、配置bash.profile6、git7、sh compile.sh

随便推点

cf 1154G Minimum Possible LCM_二分抄代码的博客-程序员宅基地

...这题关键在他的a[i]<=1e7那么我们知道lcm(a,b)=a*b/gcd(a,b);那么我们只要枚举每一个因数d,不管他是不是gcd然后找出能被这个d整除的最小的两个数字a,b那么对于这个因数d,tmp=a*b/d,ans=min(ans,tmp)由于我们枚举了1-1e7所有的质因子,所以就算a*b/d不是lcm,但之后总会枚举到a*b/gcd(a,b)而使...

java excel 加密_Java 加密/解密Excel_丸子里里的博客-程序员宅基地

概述设置excel文件保护时,通常可选择对整个工作簿进行加密保护,打开文件时需要输入密码;或者对指定工作表进行加密,即设置表格内容只读,无法对工作表进行编辑。另外,也可以对工作表特定区域设置保护,即设置指定区域可编辑或者隐藏数据公式,保护数据信息来源。无需设置文档保护时,可撤销密码保护,即解密文档。下面,将通过java程序演示以上加密、解密方法的实现。示例大纲1. Excel工作簿1.1 加密工作...

Spring Cloud 核心组件 Dubbo-Nacos_m0_37567301的博客-程序员宅基地

Spring Cloud 核心组件 Dubbo-Nacos作者:DecaMinCow博客:http://blog.csdn.net/m0_37567301邮箱:decamincow#gmail.com (#->@)Dubbo 介绍阿里研发的 RPC 框架注册中心为 nacos 的 dubbo 示例1. Provider依赖文件<dependency> <groupId>com.alibaba.cloud</groupId> &l

android接收list对象数组,Android - ToDoList(定制ArrayAdapter)_席佳益的博客-程序员宅基地

ToDoList(定制ArrayAdapter)本文地址:http://blog.csdn.net/caroline_wendy/article/details/21401907前置项目参见:http://blog.csdn.net/caroline_wendy/article/details/21330733环境: Android Studio 0.5.1ArrayAdapter使用泛型(模...

STS on Eclipse 3.6_咔啡的博客-程序员宅基地

EngineeringChristian DupuisJuly 01, 2010Last week the Eclipse Foundation released the much anticipated next version of Eclipse. You can download Eclipse 3.6 aka Helios from SpringSource’s member distribution page. Also check out the New & Noteworthy

js读取服务器html文件,【未解决】js中将html内容保存到服务器上的本地的html文件..._Arsd的博客-程序员宅基地

【背景】之前已经实现了:网页中,点击某个按钮,可以调用到js获得到KindEditor的html的内容:function submitGoodsContent(){var kindeditor = window.editor;// 取得HTML内容html = kindeditor.html();console.log(html);}商品名:在此输入新产品的介绍内容提交当前页面现在希望实现,不仅仅...

推荐文章

热门文章

相关标签