一览nginx负载均衡策略有哪些 nginx负载均衡原理及实现方式

一、负载均衡 当一台服务器的访问量越大时,服务器所承受的压力也就越大,超出自身所指定的访问压力就会崩掉,避免发生此类事情的发生,因此也就有了负载均衡来分担服务器的压力 。那么究竟什么是负载均衡呢?通俗些讲,就是我们有几十台、几百台甚至更多服务器,将这些服务器组成一个服务器集群,当客户端访问某台设备的数据时,首先发送的请求先到一台中间服务器,并通过中间服务器在服务器集群中平均分摊到其他服务器中,因此,当用户每次所发送的请求都将会保证服务器集群中的设备均与平摊,以此来分担服务器的压力,从而保持服务器集群的整理性能最优,避免出现有崩溃的现象 。

一览nginx负载均衡策略有哪些 nginx负载均衡原理及实现方式

文章插图
二、Nginx负载均衡的作用
  • 转发功能:Nginx 会按照一定的算法轮询、权重将客户端发来的请求转发至不同的应用服务器上,同时减轻单台服务器的压力,提高服务器的并发量;
  • 故障迁移:当一台服务器出现了故障时,客户端发来的请求将自动发送到其他服务器; * 添加恢复:当故障服务器恢复正常工作时,将自动添加到处理用户请求中;
三、Nginx负载均衡的几种策略方式 1)轮询(默认) 客户端发出的每个请求将按照时间顺序逐一分配到不同的后端服务器,如后端服务器down掉,能自动剔除 。
upstream backserver {server 192.168.1.10;server 192.168.1.11;} 2)weight
weight 代表权重,默认为1,权重越高被分配的客户端也就越多 。指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况,也就是说:哪个 server 的连接数少,路由就到哪个 server 中去 。
upstream backserver {server 192.168.1.10 weight=3;server 192.168.1.11 weight=7;} 3)ip_hash
每个请求按访问 IP 的hash结果分配,每个访客固定访问一个后端服务器,可解决session的问题 。
upstream backserver {ip_hash;server 192.168.1.10:80;server 192.168.1.11:88;} 4)fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配 。
upstream backserver {server server1;server server2;fair;} 5)url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效 。
upstream backserver {server squid1:3128;server squid2:3128;hash $request_uri;hash_method crc32;}这里推荐大家可以看看Linux C/C++ 高级开发架构的【免费】课程:课程内容的话和腾讯C++后台开发T8职级技术栈对标,围绕数据结构与算法、数据库、网络、操作系统、网络编程、分布式架构等方面全面提升,值得学习一波~
一览nginx负载均衡策略有哪些 nginx负载均衡原理及实现方式

文章插图
四、常见的负载均衡方案有哪些? 将下图进行拆分,其常见互联网分布式架构,主要分为:
  • 客户端层
  • 反向代理层
  • 服务器站点层
  • 服务层
  • 数据层

一览nginx负载均衡策略有哪些 nginx负载均衡原理及实现方式

文章插图
【一览nginx负载均衡策略有哪些 nginx负载均衡原理及实现方式】 因此,可以看出,从一台客户端发出的请求到最终的数据层,上游都可以访问到下游,实现最终的均匀平摊 。第一层:从客户端层到反向代理层 客户端层到反向代理层的负载均衡,通过DNS轮询实现,在DNS服务器上对应的域名配置多个IP,当客户端发出的请求到DNS服务器时,会轮询返回对应域名配置的 IP,保证解析的IP是必须与Nginx服务器的IP是相同的,以此Nginx服务器的请求分配也将是均衡的 。
一览nginx负载均衡策略有哪些 nginx负载均衡原理及实现方式

文章插图
第二层:从反向代理层到服务器站点层 反向代理层到服务器站点层的负载均衡,通过Nginx实现,修改nginx.conf配置文件,实现多种负载均衡策略; PS:这里我们通过nginx.conf配置文件的方式进行实现,其主要实现的方式可参考上述:三、Nginx负载均衡的几种方式(主要包括:轮询、weight、ip_hash、fair(第三方)、url_hash(第三方)的相关描述)
一览nginx负载均衡策略有哪些 nginx负载均衡原理及实现方式

文章插图
第三层:从服务器站点层到服务层 服务器站点层到服务层的负载均衡,是通过服务连接池实现的,上游连接池会建立与下游服务多个连接,每次请求将会随机选取连接来访问下游服务 。
一览nginx负载均衡策略有哪些 nginx负载均衡原理及实现方式

文章插图
第四层:从服务层到数据层 服务层到数据层时,数据量很大的情况下,数据层(db,cache)会涉及数据的水平切分,所以数据层的负载均衡会更加复杂一些,分为数据的均衡与请求的均衡 。
  • 数据的均衡:是指水平切分后的每个服务(db,cache),数据量是均匀的 。
  • 请求的均衡:是指水平切分后的每个服务(db,cache),请求量是均匀的 。
常见的水平切分方式有两种: 第一种:按照range水平切分
一览nginx负载均衡策略有哪些 nginx负载均衡原理及实现方式

文章插图
每一个数据服务,存储一定范围的数据
  • user0 服务,存储 uid 范围:1-1kw;
  • user1 服务,存储 uid 范围:1kw-2kw;
这个方案的好处是:
  • 规则简单,service 只需判断一下 uid 范围就能路由到对应的存储服务;
  • 数据均衡性较好;
  • 易扩展,可随时加一个 uid [2kw,3kw] 的数据服务;
这个方案的不足是: 请求的负载不一定均衡,对新用户会比老用户更活跃,大 range 的服务请求压力会更大 。第二种:按照 id 哈希水平切分
一览nginx负载均衡策略有哪些 nginx负载均衡原理及实现方式

文章插图
每一个数据服务,存储某个 key 值 hash 后的部分数据
  • user0 服务,存储偶数 uid 数据;
  • user1 服务,存储奇数 uid 数据;
这个方案的好处是:
  • 规则简单,service 需对 uid 进行 hash 能路由到对应的存储服务;
  • 数据均衡性较好;
  • 请求均匀性较好;
这个方案的不足是:
  • 不易扩展,扩展一个数据服务,hash 方法改变时候,可能需要进行数据迁移 。
五、Nginx负载均衡配置实例 1、实现效果 在浏览器地址栏中输入,负载均衡效果平均到端口号8080和8081中 。2、准备工作

    推荐阅读