Nginx实战教程大神必经之路5:Nginx 负载均衡

本文详细介绍了Nginx的负载均衡功能,包括热备、轮询、加权轮询和ip_hash策略。通过Nginx的负载均衡,可以有效地分发用户请求,确保服务器的高可用性和效率。例如,ip_hash策略能确保同一客户端的请求始终路由到同一服务器,避免了某些场景下的效率问题。
摘要由CSDN通过智能技术生成

1.1 什么是负载均衡

  负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行。
  我们在日常生活中经常免不了要去一些比较拥挤的地方,比如地铁站、火车站、电影院、银行等。无论是买票,还是排队入场,这些场所一般都会设置多个服务点或者入口的。如果没有人引导的话,大多数情况下,最近的入口会挤满人。而哪些距离较远的服务点或者入口就宽松很多。这种情况下,就会大大浪费资源,因为如果可以把这些排队的人很好的分散到各个入口的话会大大缩短排队时间。其实,网站的建设也是一样的。为了提升网站的服务能力,很多网站采用集群部署,就像话剧院有多个入口一样。这时候,就需要一个协调者,来均衡的分配这些用户的请求,可以让用户的可以均匀的分派到不同的服务器上。

在这里插入图片描述




 

1.2 Nginx 实现负载均衡

  Nginx 的负载均衡功能依赖于 ngx_http_upstream_module模块,upstream 模块应该放于 http 模块内。Nginx 负载均衡策略主要有 热备、轮询、加权轮询、最少连接数以及 IP Hash。我们先来看看 upstream 怎么用。

http {
	upstream myserver { 
		server  http://47.103.4.205:3333;
		server  http://47.103.4.206:3333;
	}
	
	server {
		location / {         
		 	proxy_pass  myserver;    
		}   
	}
}

1.2.1 热备

  如果有 2 台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。即有 A、B 两台服务器,正常情况都是 A 在工作,当 A 猝死,B 开始工作。

upstream myserver { 
	server  http://47.103.4.205:3333;
	// 备用需要加 backup
	server  http://47.103.4.206:3333 backup;
}

 

1.2.2 轮询

  Nginx 默认就是轮询其权重都默认为 1,服务器处理请求就转圈来。即有 A、B、C 三台服务器,轮询状态 ABCABCABC 转圈工作。

upstream myserver { 
	server  http://47.103.4.205:3333;
	server  http://47.103.4.206:3333;
	server  http://47.103.4.207:3333;
}

1.2.3 加权轮询

  跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置则变为轮询。即有 A、B 两台服务器,A 的权重是 1,B 的权重是 2,则 A 工作一次,B 工作两次,ABBABB。

upstream myserver { 
	server  http://47.103.4.205:3333  weight=1;
	server  http://47.103.4.206:3333  weight=2;
}

1.2.4 ip_hash

  Nginx 会对客户端请求的 ip 进行 hash 操作,然后根据 hash 结果将同一个客户端 ip 的请求分发给同一台服务器进行处理。采用这种方式的原因是,当你服务端的一个特定 url 路径被同一个用户连续访问时,如果负载均衡策略还是轮询的话,那该用户的多次访问会被打到各台服务器上,这显然并不高效(会建立多次http链接等问题)。甚至考虑一种极端情况,用户需要分片上传文件到服务器下,然后再由服务器将分片合并,这时如果用户的请求到达了不同的服务器,那么分片将存储于不同的服务器目录中,导致无法将分片合并。采用 Nginx 提供的 ip_hash 策略。既能满足每个用户请求到同一台服务器,又能满足不同用户之间负载均衡。

upstream myserver { 
	server  http://47.103.4.205:3333;
	server  http://47.103.4.206:3333;
	ip_hash;
}

1.2.5 参数

down:表示当前的 server 暂时不参与负载均衡。
backup:预留的备份机。当其他所有的非 backup 机出现故障或者忙的时,才会请求 backup 机,因此这台机器的压力最轻。
max_fails:允许请求失败的次数,默认为 1。当超过最大次数时,返回 proxy_next_upstream 模块定义的错误。
fail_timeout:在经历了 max_fails 次失败后,暂停服务的时间。max_fails 可以和 fail_timeout 一起使用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyondwild

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值