Nginx七层负载均衡

571 阅读2分钟

「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

Nginx负载均衡基本概述

为什么要使用负载均衡

当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台Web服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现负载的分发。那么会大大提升系统的吞吐率、请求性能、高容灾。

常见的负载均衡软件有很多种: 比如:

Nginx :在1.9版本之前只能做7层负载,在1.9版本之后,出来一个叫做stream模块,4层7层都能做 (软件)

Haproxy :4层,7层 (软件)

LVS : 4层 。ipvsadm,修改路由,把一台服务器相当于变成了一台物理“硬件负载均衡” (专业做4层,速度最快)

下面我们来介绍一下nginx的七层负载均衡。 Nginx要实现七层负载均衡需要用到proxy_pass代理模块配置。Nginx默认安装支持这个模块,我们不需要再做任何处理。Nginx的负载均衡是在Nginx的反向代理基础上把用户的请求根据指定的算法分发到一组【upstream虚拟服务池】。

Nginx七层负载均衡的指令

upstream指令

该指令是用来定义一组服务器,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。服务器可以指定不同的权重,默认为1。

语法upstream name {...}
默认值--
位置http

server指令

该指令用来指定后端服务器的名称和一些参数,可以使用域名、IP、端口或者unix socket

语法server name [paramerters]
默认值--
位置upstream

Nginx七层负载均衡的实现流程

在这里插入图片描述 服务端设置

server { 
  listen 9001; 
  server_name localhost; 
  default_type text/html; 
  location /{ 
    return 200 '<h1>192.168.1.100:9001</h1>'; 
  } 
}
server { 
  listen 9002; 
  server_name localhost; 
  default_type text/html; 
  location /{ 
    return 200 '<h1>192.168.1.100:9002</h1>'; 
  } 
}
server { 
  listen 9003; 
  server_name localhost;
  default_type text/html; 
  location /{ 
    return 200 '<h1>192.168.1.100:9003</h1>'; 
  } 
}

负载均衡器设置

upstream backend{ 
  server 192.168.1.100:9091; 
  server 192.168.1.100:9092; 
  server 192.168.1.100:9093; 
}
server { 
  listen 8083; 
  server_name localhost; 
  location /{ 
    proxy_pass http://backend; 
  } 
}