nginx负载均衡完整篇

本文详细介绍了nginx作为负载均衡器的工作原理和配置方法,包括四层与七层负载均衡的区别,以及轮询、加权轮询、ip_hash、url_hash等调度算法。通过设置不同的参数,可以实现高效且高可用的负载均衡解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nginx负载均衡完整篇

为什么需要负载均衡服务

最开始的部署模型都是点对点的部署,
但是随着企业的用户的增长以及带来的客户的海量的请求,
给服务端带来海量的并发,
导致服务的响应不及时这个时候就需要不断的扩容后端的服务,
对于前端就需要负载均衡来均分请求,以提升整体的后端的吞吐率
所以对于请求而言,负载均衡就可以很好的均摊请求,
让后端的整体的吞吐率和性能不断的增加,
以满足业务增长和需求
另外点对点的对接,一个点挂掉,整体的服务就会挂掉,
但是有了负载均衡,即使一个点挂掉了,其他的点还可以正常使用,
只要把这一个点剔除就可以了,这样的话,服务的高可用就可以很好的满足业务的需求

按照范围分类

  • GSLB

按照影响范围定的GSLB是一个全局的负载均衡,节点范围比较庞大,地域比较宽高
往往都是按照国家为单位或者省为单位,来进行全局的负载均衡

  • SLB

SLB的范围小,小的逻辑地域决定了它的部分服务的实时性和响应性是非常好的
nginx就是一个典型的SLB

根据网络模型OSA分类

  • 四层负载均衡

OSA里的传输层,支持TCP/IP协议,所以只需要对TCP/IP协议包转发,就可以实现负载均衡,
性能非常快,只需要对顶层进行应用处理,而不需要做复杂的逻辑

  • 七层负载均衡

七层负载均衡是在应用层,所以它可以完成很多应用方面的请求,
可以实现http信息的改写、头信息的改写、安全应用信息的控制以及转发等等的规则
nginx就是一个典型的七层负载均衡的SLB

nginx实现负载均衡的原理

使用proxy_pass把所有客户端的请求转发到对应后端的服务器上,
只是它转发的不是一台而是一组虚拟的服务池 upstream server
upstream server可以定义所有服务的单元,实现对于组内服务器的不断的轮询,
这样所有的用户请求过来,就可以分发到不同的服务上,实现负载均衡

配置语法

   Systax: upstream name {...}
   Dafault: ——
   Context: http

注意: upstream 必须在http下一层,即在server层以外

   upstream test {
       server localhost:3000;
       server localhost:3001;
       server localhost:3002;
   }
   server {
       listen       80;
       server_name  localhost;
       
       location / {
           root   D:/wukang/blog_md/test;
           index  index.html index.htm;
       }

       location /get1 {
           proxy_pass   http://test;
       }
   }

upstream 内的server不仅支持ip的写法也支持域名的写法、域名加端口的写法,
每个server后面还可以增加配置参数

  • backup 表示这是一个备份节点,正常不提供服务,当其他服务全部挂掉,这个服务提供服务
  • weight 表示server的权重,对于轮询的规则而言,这个参数越大,权重越大,触发的几率也就越高
  • down 表示当前的server暂时不参与负载均衡
  • max_fails 允许请求失败的次数
  • fail_timeout 经过max_fails后服务暂停的时间,默认10s
  • max_conns 限制最大的接收的连接数
   upstream test {
       server test1.com         weight=5;
       server test2.com:8080    backup;
   }

轮询规则 > 调度算法

  • 轮询 nginx默认的轮询规则是按照时间顺序逐一分配到不同的后端服务器,如果服务down掉,能自动剔除
  • 加权轮询 weight值越大,分配到的访问几率越高
  • ip_hash 每个请求按访问ip的hash结果分配,这样来自同一个ip的固定访问一个后端服务器,这样可以保证cookie和session的一致
  • url_hash 按照访问的URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
  • leash_conn 最少连接数,哪个机器连接数少就分发
  • hash关键数值 hash自定义的key

ip_hash使用方法
缺陷: 如果前台还有一层代理的话,ip_hash的就不是用户真实的ip,固定的一个ip总是转发到同一台服务器上,失去了负载均衡的意义

 upstream test {
    ip_hash;
    server localhost:3000;
    server localhost:3001;
    server localhost:3002;
}

url_hash
在1.7.2以后的版本出现的
语法:

   Systax: hash key [consistent]
   Default: ——
   Context: upstream
   upstream test {
       hash $request_uri;
       server localhost:3000;
       server localhost:3001;
       server localhost:3002;
   }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值