nginx的upstream目前支持4种方式的分配:
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream tomcats {
server 10.1.1.107:88 weight=10;
server 10.1.1.132:80 weight=10;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream tomcats {
ip_hash;
server 10.1.1.107:88;
server 10.1.1.132:80;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
nginx的upstream目前支持4种方式的分配:
1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream tomcats {
server 10.1.1.107:88 weight=10;
server 10.1.1.132:80 weight=10;
}
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream tomcats {
ip_hash;
server 10.1.1.107:88;
server 10.1.1.132:80;
}
4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
轮询调度
轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
在系统实现时,我们引入了一个额外条件,当服务器的权值为零时,表示该服务器不可用而不被调度。这样做的目的是将服务器切出服务(如屏蔽服务器故障和系统维护),同时与其他加权算法保持一致。所以,算法要作相应的改动,它的算法流程如下:
轮叫调度算法流程
假设有一组服务器S = {S0, S1, …, Sn-1},一个指示变量i表示上一次选择的
服务器,W(Si)表示服务器Si的权值。变量i被初始化为n-1,其中n > 0。
j = i;
do {
j = (j + 1) mod n;
if (W(Sj) > 0) {
i = j;
return Si;
}
} while (j != i);
return NULL;
轮叫调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮叫调度算法容易导致服务器间的负载不平衡。
虽然Round-Robin DNS方法也是以轮叫调度的方式将一个域名解析到多个IP地址,但轮叫DNS方法的调度粒度是基于每个域名服务器的,域名服务器对域名解析的缓存会妨碍轮叫解析域名生效,这会导致服务器间负载的严重不平衡。这里,IPVS轮叫调度算法的粒度是基于每个连接的,同一用户的不同连接都会被调度到不同的服务器上,所以这种细粒度的轮叫调度要比DNS的轮叫调度优越很多。
加权轮询调度
轮叫调度(Round Robin Scheduling)算法就是以轮叫的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。
在系统实现时,我们引入了一个额外条件,当服务器的权值为零时,表示该服务器不可用而不被调度。这样做的目的是将服务器切出服务(如屏蔽服务器故障和系统维护),同时与其他加权算法保持一致。所以,算法要作相应的改动,它的算法流程如下:
加权轮叫调度算法流程
假设有一组服务器S = {S0, S1, …, Sn-1},W(Si)表示服务器Si的权值,一个
指示变量i表示上一次选择的服务器,指示变量cw表示当前调度的权值,max(S)
表示集合S中所有服务器的最大权值,gcd(S)表示集合S中所有服务器权值的最大
公约数。变量i初始化为-1,cw初始化为零。
while (true) {
i = (i + 1) mod n;
if (i == 0) {
cw = cw - gcd(S);
if (cw <= 0) {
cw = max(S);
if (cw == 0)
return NULL;
}
}
if (W(Si) >= cw)
return Si;
}
轮叫调度算法假设所有服务器处理性能均相同,不管服务器的当前连接数和响应速度。该算法相对简单,不适用于服务器组中处理性能不一的情况,而且当请求服务时间变化比较大时,轮叫调度算法容易导致服务器间的负载不平衡。
虽然Round-Robin DNS方法也是以轮叫调度的方式将一个域名解析到多个IP地址,但轮叫DNS方法的调度粒度是基于每个域名服务器的,域名服务器对域名解析的缓存会妨碍轮叫解析域名生效,这会导致服务器间负载的严重不平衡。这里,IPVS轮叫调度算法的粒度是基于每个连接的,同一用户的不同连接都会被调度到不同的服务器上,所以这种细粒度的轮叫调度要比DNS的轮叫调度优越很多。
相关推荐
目前有许多不同的负载均衡技术用以满足不同的应用需求,如软/硬件负载均衡、本地/全局负载均衡、更高网络层负载均衡,以及链路聚合技术。 我们使用的是软负载均衡器Nginx,而农行用的是F5硬负载均衡器,这里...
流媒体服务器(Streaming Media Server 简写MS)集群系统能够用相对较为廉价的方式提供较强的可扩展性和良好的吞吐性能,然而要使系统资源得到充分利用却面临着许多技术上的挑战,负载均衡技术就是其中之一。...
3.2、弘积负载均衡 3.2.1、配置节点(类似F5 poolmembers) 3.2.2、配置定义健康检查 延伸:不同poolmember采用不同健康检查(与F5类似) 目录 3.2.3、配置虚拟服务(类似F5 poolmembers) 3 3.2.4、...
天融信负载均衡配置手册
3、应用场景:公司基于VRRP的负载均衡出口链路配置 4、特点:Word文档提供了实验的详细过程,包括每一步骤的操作命令和截图,并给出了实验的topo文件(包括配置信息) 5、适用人群:网络系统的建设与运维 6、使用...
网络负载均衡,英文名称为Network Load Balance,简称NLB。 当日常工作业务量较大、网络负荷过重时,我们就需要将业务进行负载,来保障服务器的高可用性,高稳定性。负载均衡可以对服务器的运行状况进行监控,及时...
基于动态反馈的负载均衡算法基于动态反馈的负载均衡算法基于动态反馈的负载均衡算法基于动态反馈的负载均衡算法
负载均衡A10考试题库
SAP 应用服务负载均衡的实现SAP 应用服务负载均衡的实现
需要负载均衡方案!商业的硬件如F5又太贵,你们又是创业型互联公司如何有效节约成本,节省不必要的浪费?同时实现商业硬件一样的高性能高可用的功能?有什么好的负载均衡可伸张可扩展的方案吗?答案是肯定的!有!...
探讨分布式网络服务器使用的负载均衡技术及负载分配的策略,并基于网络地址转换在FreeBSD上实现了负载均衡网关,应用于我们的Internet网络服务器上,将负载分给多个服务器分担,以解决Internet服务器面临的大量并发...
负载均衡(Load Balancing) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强 ...
负载均衡配置指导帮助设置防火墙负载均衡的操作,有一定的帮助。
MySQL Proxy 实现负载均衡测试 MySQL Proxy 实现负载均衡测试
apache2.2.4 负载均衡.txtapache2.2.4 负载均衡.txtapache2.2.4 负载均衡.txt随着访问量的不断提高,以及对响应速度的要求,进行负载均衡设置就显得非常必要了。公司的系统在最初设计的时候就已经考虑到了负载均衡的...
后端个别服务器网卡配置了NSG拒绝策略(例如443端口),但是负载均衡器的运行状况探测配置了其他端口(例如80端口)作为负载均衡器检查后端服务器的健康状态的判断
开箱即用,简单粗暴Elasticsearch天然支持分布式和集群,开箱即用,零配置,零改动。自动分片一个index默认5个primaryshard,那么我们创建一个document,他给我们分配到哪个shard...shard负载均衡假设我们有1个index,
本书详述了mysql负载均衡最佳实践方法
自动进行rabbitmq的多机调用,实现负载均衡,基于python3.6进行实现。