Nginx负载均衡

目录

Nginx负载均衡

1.定义

2.负载均衡的作用

3.upstream配置

4.负载均衡算法

5.nginx配置7层协议及4层协议方法

1.nginx配置7层协议

2.nginx配置4层协议

6.nginx会话保持

1、ip_hash


Nginx负载均衡

1.定义

负载均衡(Load Balance,简称 LB),是在现有网络结构之上分摊到多个操作单元上进行执行,扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

2.负载均衡的作用

高并发:负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力(吞吐量)。 伸缩性:添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。 高可用:负载均衡器可以监控候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。
安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等

3.upstream配置

被代理服务器地址有两种写法。

bash 复制代码
 upstream testapp { 
       server 10.12.153.43:80;
       server 10.12.153.220:80;
     }
  server {
         listen 80;
         server_name localhost;
         location / {         
            proxy_pass  http://testapp;  #请求转向 testapp 定义的服务器列表         
         } 
 upstream mysvr { 
       server  http://10.12.153.43:80;
       server  http://10.12.153.220:80;
     }
  server {
         listen 80;
         server_name localhost;
         location  / {         
            proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表         
         } 

4.负载均衡算法

upstream 支持4种负载均衡调度算法:

A、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;

B、ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。

C、url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候提高效率。

D、fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair模块。

#配置实例

1、热备:如果你有2台服务器,当一台服务器发生事故时,才启用第二台服务器给提供服务。服务器处理请求的顺序:AAAAAA突然A挂啦,BBBBBBBBBBBBBB.....

bash 复制代码
 upstream myweb { 
       server 172.17.14.2:8080; 
       server 172.17.14.3:8080 backup;  #热备     
     }

2、轮询:nginx默认就是轮询其权重都默认为1,服务器处理请求的顺序:ABABABABAB....

bash 复制代码
upstream myweb { 
       server 172.17.14.2:8080;
       server 172.17.14.3:8080;
     }

3、加权轮询:跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置,则默认为1。下面服务器的请求顺序为:ABBABBABBABBABB....

bash 复制代码
 upstream myweb { 
       server 172.17.14.2:8080 weight=1;
       server 172.17.14.3:8080 weight=2;
 }

4、ip_hash:nginx会让相同的客户端ip请求相同的服务器。

bash 复制代码
 upstream myweb { 
       server 172.17.14.2:8080; 
       server 172.17.14.3:8080;
       ip_hash;
     }

5、nginx负载均衡配置状态参数

  • down,表示当前的server暂时不参与负载均衡。

  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。

  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。

  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和fail_timeout一起使用。

bash 复制代码
upstream myweb { 
       server 172.17.14.2:8080 weight=2 max_fails=2 fail_timeout=2;
       server 172.17.14.3:8080 weight=1 max_fails=2 fail_timeout=1;    
     }

5.nginx配置7层协议及4层协议方法

1.nginx配置7层协议

OSI(Open System Interconnection)是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范,共包含七层协议。直接上图,这样更直观些:

复制代码
 #upstream块在http协议块里面
bash 复制代码
 upstream testapp {
            server 10.12.153.43:80 weight=2 max_fails=2 fail_timeout=2s;
            server 10.12.153.220:80 weight=2 max_fails=2 fail_timeout=2s;               
     }
 ​
      server {
            listen       81;
     server_name www.app.com;
     charset utf-8;
     #access_log  logs/host.access.log  main;
     location / {
         proxy_pass http://testapp;
             proxy_set_header Host $host:$server_port;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
2.nginx配置4层协议

TCP/IP协议 之所以说TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。

从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。

nginx在1.9.0的时候,增加了一个 stream 模块,用来实现四层协议(网络层和传输层)的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议的监听,然后通过proxy_pass来转发我们的请求,通过upstream添加多个后端服务,实现负载均衡。

复制代码
 #stream与http协议快同级
bash 复制代码
stream {
             upstream myweb {
                 hash $remote_addr consistent;
                 server 172.17.14.2:8080;
                 server 172.17.14.3:8080;
         }
         server {
             listen 82;
             proxy_connect_timeout 10s;
             proxy_timeout 30s;
             proxy_pass myweb;
         }
 }
6.nginx会话保持

nginx会话保持主要有以下几种实现方式。

1、ip_hash

ip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。

ip_hash语法:

bash 复制代码
 upstream backend {
     ip_hash;
     server backend1.example.com;
     server backend2.example.com;
     server backend3.example.com down;
 }

ip_hash简单易用,但有如下问题: 当后端服务器宕机后,session会丢失; 来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡; 不适用于CDN网络,不适用于前段还有代理的情况。

相关推荐
ღ᭄ꦿ࿐Never say never꧂1 分钟前
微服务架构中的负载均衡与服务注册中心(Nacos)
java·spring boot·后端·spring cloud·微服务·架构·负载均衡
.生产的驴10 分钟前
SpringBoot 消息队列RabbitMQ 消息确认机制确保消息发送成功和失败 生产者确认
java·javascript·spring boot·后端·rabbitmq·负载均衡·java-rabbitmq
x66ccff17 分钟前
【linux】4张卡,坏了1张,怎么办?
linux·运维·服务器
我命由我123452 小时前
GPIO 理解(基本功能、模拟案例)
linux·运维·服务器·c语言·c++·嵌入式硬件·c#
kka杰2 小时前
Linux 进程3
linux·运维·服务器
华纳云IDC服务商2 小时前
网站服务器怎么计算同时在线人数?
运维·服务器
没有名字的小羊2 小时前
Linux基础命令——账户简单管理
linux·运维·服务器·网络·数据库
smile_life_2 小时前
服务器非法关闭后MySQL服务启动失败
运维·服务器·mysql
kka杰2 小时前
Linux 进程2
linux·运维·服务器
大白菜和MySQL2 小时前
tomcat服务搭建部署ujcms网站
java·linux·运维·服务器·tomcat