`
y806839048
  • 浏览: 1107535 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

合理使用nginxhash策略做更有意义的负载均衡

阅读更多

前言:

目前,许多的web应用,或者web接口,都会在服务器的入口处,使用一个服务器容器来监听端口,然后进行请求转发,例如nginx Apache等。
服务器容器对应整个web服务有着至关重要的作用,包括:可以很好的管理服务进程,进行代理,对请求的预处理,以及负载均衡。
今天要讨论的重点为在服务器集群中,合理使用nginx的hash策略做更有意义的负载均衡。
 

概要:

当我们的服务是由一台服务器支撑时,就丝毫不存在负载均衡的概念。只有当服务由多台服务器(也就是服务器集群)支撑时,才会使用到负载均衡。
负载均衡顾名思义,是一种策略,用于防止一台服务器过载,而其他服务器闲置情况发生的策略。通过该策略可以使得提供相同服务的服务器负载基本相同。说得直白一点,就是当客户端发起一个请求之后,负载均衡会通过预先设定好的策略将该请求转发给上游的一台服务器进行处理。
如图所示:
负载均衡是一个很成熟的技术,其中对后端服务器进行轮询;通过客户端请求IP进行hash;对后端服务器指定权重等,是较为常见的负载均衡策略。这里不再赘述。
对服务盲目的采用负载均衡策略,是不太合理的。负载均衡默认情况下是轮询策略,这在一些场景下并不高效。

更有意义的负载均衡:

今天讲解的重点是,两种常见的负载均衡hash策略,以及对应的使用场景。
1、ip_hash(通过客户端请求ip进行hash,再通过hash值选择后端server):
当你服务端的一个特定url路径会被同一个用户连续访问时,如果负载均衡策略还是轮询的话,那该用户的多次访问会被打到各台服务器上,这显然并不高效(会建立多次http链接等问题)。甚至考虑一种极端情况,用户需要分片上传文件到服务器下,然后再由服务器将分片合并,这时如果用户的请求到达了不同的服务器,那么分片将存储于不同的服务器目录中,导致无法将分片合并。所以,此类场景可以考虑采用nginx提供的ip_hash策略。既能满足每个用户请求到同一台服务器,又能满足不同用户之间负载均衡。
配置代码如下:
[plain] view plain copy
 
  1. upstream backend{  
  2.     ip_hash;  
  3.         server 192.168.128.1:8080 ;  
  4.         server 192.168.128.2:8080 ;  
  5.         server 192.168.128.3:8080 down;  
  6.         server 192.168.128.4:8080 down;  
  7. }  
  8. server {  
  9.         listen 8081;  
  10.         server_name test.csdn.net;  
  11.   
  12.         root /home/system/test.csdn.net/test;  
  13.   
  14.     location ^~ /Upload/upload {  
  15.             proxy_pass http://backend;  
  16.     }  
  17.   
  18. }  
上述是一个极简的监听8081端口的的nginx服务,其中当请求url 为/Upload/upload时,会走ip_hash策略; upstream是nginx的负载均衡模块,此处,配置了策略为ip_hash,参与负载均衡的机器有四台,其中后两台末尾添加了down关键字,表示下线的意思。
 
2、url_hash(通过请求url进行hash,再通过hash值选择后端server):
一般来讲,要用到urlhash,是要配合缓存命中来使用。举一个我遇到的实例:有一个服务器集群A,需要对外提供文件下载,由于文件上传量巨大,没法存储到服务器磁盘中,所以用到了第三方云存储来做文件存储。服务器集群A收到客户端请求之后,需要从云存储中下载文件然后返回,为了省去不必要的网络带宽和下载耗时,在服务器集群A上做了一层临时缓存(缓存一个月)。由于是服务器集群,所以同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。在此类场景下,为了使得缓存命中率提高,很适合使用url_hash策略,同一个url(也就是同一个资源请求)会到达同一台机器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取,既减少了带宽,也减少的下载时间。
配置代码如下:
[plain] view plain copy
 
  1. upstream somestream {  
  2.         hash $request_uri;  
  3.         server 192.168.244.1:8080;  
  4.     server 192.168.244.2:8080;  
  5.         server 192.168.244.3:8080;  
  6.         server 192.168.244.4:8080;  
  7. }  
  8. server {  
  9.         listen       8081 default;  
  10.         server_name  test.csdn.net;  
  11.         charset utf-8;  
  12.         location /get {  
  13.         proxy_pass http://somestream;  
  14.     }  
  15. }  
上述同样也是一个极简的监听8081端口的nginx服务,当请求url为/get时,会走url_hash;同样配置了upstream模块,hash $request_uri表明了是按照url规则进行hash策略。
 

总结:

以上就是本文要介绍的全部内容,本文侧重讲解了ip_hash和url_hash的使用场景和基本配置,另外,在进行nginx server 配置时,可以灵活一些,不同的location采用不同的策略,可以使得服务策略更加的合理。希望此文能为各位带来些许帮助。
分享到:
评论

相关推荐

    nginx负载均衡实现

    Nginx支持多种负载均衡算法,包括轮询、最小连接数、IP哈希等,这些算法可以帮助开发者根据实际情况选择最优的负载均衡策略。 ##### 1. 轮询(Round Robin) 这是最基本的负载均衡算法,Nginx将请求轮流分配给后端...

    张宴 使用Nginx轻松实现开源负载均衡

    - 定期检查Nginx配置,确保负载均衡策略的合理性,适时调整服务器权重或添加/移除后端服务器。 5. 高可用与扩展性: - 利用Nginx的主备模式或者集群部署,提高自身高可用性,防止单点故障。 - 随着业务增长,...

    nginx软件负载均衡

    Nginx支持多种负载均衡策略,常见的有: 1. **轮询(round-robin)**:每个请求按时间顺序逐一分配到不同的服务器,如果服务器临时不可用,将跳过该服务器。 2. **最少连接数(least connections)**:将新请求...

    解析nginx负载均衡

    ### 解析nginx负载均衡 #### 一、负载均衡的重要性及应用场景 对于现代互联网服务而言,负载均衡不仅是确保网站稳定运行的关键技术之一,更是提高用户体验、优化资源利用的重要手段。随着互联网流量的持续增长以及...

    nginx负载均衡配置,宕机自动切换方式

    在现今的IT架构中,负载均衡是一项关键技术,它确保了后端...在实际应用中,开发者需要根据具体的业务需求和服务器状况,综合考量并合理配置这些参数,以确保负载均衡器能够在各种异常情况下为用户提供稳定的服务。

    nginx负载均衡中RR和ip_hash策略分析

    ### nginx负载均衡中RR和ip_hash策略分析 #### 一、引言 在现代互联网架构中,随着业务规模的增长和技术的发展,单台服务器往往难以满足大量用户访问的需求。因此,负载均衡技术应运而生,它能够有效地分散访问请求...

    HAProxy+Nginx实现负载均衡

    ### HAProxy与Nginx实现负载均衡的关键知识点 #### 一、HAProxy简介与特性 HAProxy是一款开源的、高效且可靠的负载均衡器,专为处理大规模Web流量设计。其核心功能包括: - **高可用性**:HAProxy能够确保在主...

    使用nginx-haproxy实现七层负载均衡笔记

    Nginx和HAProxy都是高性能的负载均衡器,常用于七层负载均衡场景中。...在具体实施时,需要根据实际情况选择合适的负载均衡策略,并合理配置后端服务器组,以确保每个请求都能被快速而正确地处理。

    nginx负载均衡教程

    单独使用一台Nginx做负载均衡 **配置文件示例**: ```nginx upstream local_tomcat { ip_hash; server localhost:8090; server localhost:8080; } server { listen 8099; server_name localhost; # ...

    Nginx-配置负载均衡的几种方式

    除了基本的轮询策略外,Nginx还提供了多种负载均衡策略,可以根据不同的场景选择合适的方案。 1. **Weight(权重)** - **原理**:基于权重进行分配,权重高的服务器被分配到的请求比例更高。 - **示例**: ```...

    02Nginx负载均衡策略配置.pdf

    Nginx的负载均衡策略配置是其反向代理功能的一个重要组成部分,以下详细介绍了几种常见的Nginx负载均衡策略。 首先,轮询策略是最基本的一种负载均衡方法,也是Nginx默认的负载方式。在这种策略下,Nginx会按照请求...

    使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包

    `标题`中提到的"使用redis解决nginx+tomcat8负载均衡集群session共享问题jar包",实际上是指利用Redis作为中央缓存来存储和共享session数据,以解决负载均衡下的session丢失问题。 **Redis作为Session存储** Redis...

    nginx负载均衡配置

    本文主要介绍了如何使用Nginx实现负载均衡,包括基本配置步骤、不同负载均衡策略的选择以及一些高级功能如健康检查、权重分配和Session粘性等。Nginx凭借其出色的性能和灵活性,已成为现代Web架构中不可或缺的一部分...

    大型网站架构系列:负载均衡详解

    总之,负载均衡是构建高可用、高性能大型网站的关键技术之一,通过合理的负载分配策略和选择合适的负载均衡器,可以显著提升网站的用户体验和服务质量。在实践中,还需要综合考虑数据一致性、会话管理、监控报警以及...

    nginx 负载均衡

    3. **多级负载均衡**:结合DNS负载均衡和Nginx负载均衡,实现更精细的流量控制。 通过深入理解并灵活运用Nginx的负载均衡策略,我们可以构建出强大且可靠的分布式系统,应对各种复杂的网络环境。无论是在小型网站...

    强大的集群,负载均衡软件Nginx

    此外,Nginx还能根据服务器的响应时间动态调整流量分配,响应时间快的服务器将获得更多的访问概率,实现真正的负载均衡。 在配置Nginx时,可以通过`upstream`模块定义服务器组,如`mysvr`,并列出服务器的IP地址和...

    nginx-tomcat整合实现JAVA程序负载均衡

    - 设置Nginx的负载均衡策略,如轮询(round-robin)、最少连接(least connections)或哈希(hash)等方式,以合理分配请求。 #### 五、具体步骤详解 1. **获取并安装SSL证书**: - **创建StartSSL账户**:访问...

    负载均衡 nginx 1.2.8 稳定版

    **Nginx 的负载均衡策略** Nginx 支持多种负载均衡策略: 1. **轮询(Round Robin)**:这是最简单的策略,请求均匀地分发到每个服务器。 2. **权重轮询(Weighted Round Robin)**:允许为每个服务器分配不同的...

Global site tag (gtag.js) - Google Analytics