nginx-负载平衡

打印 上一主题 下一主题

主题 1047|帖子 1047|积分 3141

目录

负载平衡概述
OSI网络模型
物理层
数据链路层
网络层
传输层
会话层
表现层
应用层
七层负载平衡
实现方式
负载平衡指令
upstream指令
server指令
实例
实验情况
实验配置
服务器配置
代理服务器配置(192.168.188.10:8083)
负载平衡状态
down
backup
max_fails和fail_timeout
max_conns
负载平衡策略
轮询与weight加权轮询方式
ip_hash方式
least_conn方式
url_hash方式
fair方式
四层负载平衡
实现方式
模块添加
相关指令
stream指令
upstream指令
案例分析
需求分析
服务器配置
安装redis服务
安装tomcat服务
代理服务器配置


负载平衡概述

   负载平衡(Load Balancing)是一种在多个计算资源之间分配工作任务的技术,旨在优化资源利用率、最大化吞吐量、低落相应时间,并确保系统的高可用性和可靠性。在计算机网络和分布式系统中,负载平衡器负责将网络哀求或数据流量分发到多个服务器或后端服务上。
  OSI网络模型


OSI参考模型(Open System Interconnect Reference Model),即开放式系统互联参考模型,是由国际标准化构造(ISO)和国际电报电话咨询委员会(CCITT)团结制定的,为开放式互连信息系统提供了一种功能布局的框架。它将网络通讯过程划分为七个差别的层次,每一层都有特定的功能,层与层之间通过接口举行交互。
物理层

   物理层并不是物理媒体本身,而是开放系统中利用物理媒体实现物理连接的功能描述和实行连接的规程。它提供用于创建、保持和断开物理连接的机械的、电气的、功能的和过程的条件,并负责比特流和电压、光线等传输方式之间创建互换模式,依据比特流举行实时性传输。
  数据链路层

   数据链路层用于创建、维持和拆除链路连接,实现无差错传输的功能。它包管在点到点或点到多点的链路上信息的可靠通报,并对连接相邻的通路举行差错控制、数据成帧、同步等控制。
  网络层

   网络层通过IP所在举行寻址和路由选择,实现两个系统之间的连接。它还具有多路复用的功能,可以将多个数据包复用到一个物理链路上传输。
  传输层

   传输层完成开放系统之间的数据传送控制,重要功能是开放系统之间的数据的收发确认。它还用于弥补各种通讯网络的质量差别,对传输差错举行恢复,并通过复用、分段和组合、连接和分离等技术措施,提高吞吐量和服务质量。
  会话层

   会话层依赖传输层以下的通讯功能使数据传送功能在开放系统间有效地举行。它重要负责在两个应用进程之间创建、管理和停止会话,以及提供数据交换过程中的同步和协调机制。
  表现层

   表现层的重要功能是把应用层提供的信息变换为能够共同明白的形式,提供字符代码、数据格式、控制信息格式、加密等的同一表现。它仅对应用层信息内容的形式举行变换,而不改变其内容本身。
  应用层

   应用层是OSI参考模型的最高层,它直接与用户举行交互,为用户提供网络服务。应用层的功能是实现应用进程(如用户步伐、终端操纵员等)之间的信息交换,并具有一系列业务处理所必要的服务功能。
  七层负载平衡

   七层负载平衡指的是OSI七层模型中的传输层,指的是基于捏造的URL或主机IP的负载平衡,nginx负载平衡是创建在反向代理的底子上实现的,因此nginx要实现七层负载平衡必要用到proxy_pass代理模块配置。
  实现方式

Nginx,Hayproxy等
负载平衡指令

upstream指令

   该指令是来定义一组服务器,他们可以监听差别端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。服务器可以指定差别的权重,默以为1
  upstream指令表  语法upstream name{…}默认值---位置http块 server指令

   该指令用来指定后端服务器的名称和一些参数,可以使用域名,IP,端口大概Unix socket
  server指令表  语法server name [paramerters]默认值---位置upstream块 实例


实验情况

实验情况表  角色服务所在相关配置客户端192.168.188.1---负载平衡192.168.188.10:8083配置代理服务服务器1192.168.188.11:9081web服务1服务器2192.168.188.11:9082web服务2服务器3192.168.188.11:9083web服务3   说明:后面实验的情况与上述情况相同,此时为了凸显负载平衡的效果,三个web服务器的内容后有略微差别,正常使用时,除了端标语,web页面的内容应当完全一样
  实验配置

服务器配置

   server1配置(192.168.188.11:9081)
  1. server{
  2.     listen 9081;
  3.     server_name localhost;
  4.     default_type text/html;
  5.     location / {
  6.         return 200 '<h1>This is web1</h1>'
  7.     }
  8. }
复制代码
  server2配置(192.168.188.11:9082)
  1. server{
  2.     listen 9082;
  3.     server_name localhost;
  4.     default_type text/html;
  5.     location / {
  6.         return 200 '<h1>This is web2</h1>'
  7.     }
  8. }
复制代码
  server3配置(192.168.188.11:9083)
  1. server{
  2.     listen 9083;
  3.     server_name localhost;
  4.     default_type text/html;
  5.     location / {
  6.         return 200 '<h1>This is web3</h1>'
  7.     }
  8. }
复制代码
代理服务器配置(192.168.188.10:8083)

  1. #配置backend服务器组
  2. upstream backend{
  3.      server 192.168.188.11:9081;
  4.      server 192.168.188.11:9082;
  5.      server 192.168.188.11:9083;
  6. }
  7. #配置代理服务器,使其代理backend所有服务器
  8. server {
  9.     listen 8083;
  10.     server_name localhost;
  11.     location / {
  12.         proxy_pass http://backend;
  13.     }
  14. }
复制代码
  由于此时为指定任何代理策略,算法和状态,因此三台服务器都为默认权重1,访问时会发现三台服务器会被轮流举行访问
  负载平衡状态

服务器状态表  状态概述down当前的server临时不到场负载平衡backup预留的备份服务器max_fails允许哀求失败的次数fail_timeout经过max_fails失败后,服务停息时间max_conns限定最大的接受连接数量 down

   将该服务器编辑为永世不可用,该代理服务器不到场负载平衡
  使用介绍:
  1. upstream backend{
  2. #设置web1服务状态为down
  3.      server 192.168.188.11:9081 down;
  4.      server 192.168.188.11:9082;
  5.      server 192.168.188.11:9083;
  6. }
复制代码
  当在web1服务器(192.168.188.11:9081)后面添加状态down时,我们对代理服务器(192.168.188.10:8083)举行访问时,web1服务器便不会被访问到
  backup

   将该服务器标记为备份服务器,当主服务器不可用时,用来通报哀求
  1. upstream backend{
  2.      server 192.168.188.11:9081 down;
  3. #设置web2状态为backup
  4.      server 192.168.188.11:9082 backup;
  5.      server 192.168.188.11:9083;
  6. }
复制代码
  此时访问代理服务器,发现仅仅可以访问到web3服务,不可以访问到另外两个服务
  可以使用kill -9 下令停止web3的进程然后再访问代理服务器,便可以访问到web2服务器
  也可以使用firewall-cmd --remove-port=9083下令关闭9083端口,也可以访问到web2服务器,backup的使用是为了防止单节点故障而引发服务受阻的情况发生
  max_fails和fail_timeout

   max_fails允许哀求代理服务器失败的次数默以为1,
  fail_timeout可以设置经过max_fails失败后,服务器停息的时间,默以为10秒
  1. upstream backend{
  2.      server 192.168.188.11:9081 down;
  3.      server 192.168.188.11:9082 backup;
  4. #为web3服务设置允许失败次数和服务器暂停时间
  5.      server 192.168.188.11:9083 max_fails=3 fail_timeout=15;
  6. }
复制代码
  设置上述配置,通过firewall-cmd下令关闭外放端口9083,在服务器举行三次访问,满意失败三次的条件,然后在通过firewall-cmd --add-port=9083把9083端口再次开放,此时发现临时无法访问到web3服务,在15秒之后,web3服务得以访问
  max_conns

   可以用来设置代理服务器同时运动连接的最大数量,默以为0,代表不限定。使用该配置后可以根据后端服务器哀求处理的并发量来举行设置,从而防止后端服务器别巨大的连接数量压垮而导致服务停息
  负载平衡策略

服务器策略表  算法名称说明轮询默认方式weight权重方式ip_hash根据ip分配方式least_conn 根据最少连接方式
url_hash根据URL分配方式fair根据相应时间方式 轮询与weight加权轮询方式

   轮询是模块负载平衡的默认策略,每个哀求会按照时间次序逐个分配到差别的后端服务器,不必要额外的配置
  使用weight=number来设置服务器的权重。权重数据越大被分配到哀求的几率越大
  1. upstream backend{
  2. #为各个web服务分配不同的权重
  3.      server 192.168.188.11:9081 weight=10;
  4.      server 192.168.188.11:9082 weight=3;
  5.      server 192.168.188.11:9083 weight=5;
  6. }
复制代码
ip_hash方式

   当对后端的多台动态应用服务器做负载平衡时,ip_hash指令能够将某个客户端IP的哀求通过哈希算法定位到同一台后端服务器上。这样,当来自某一个IP的用户在后端Web服务器A上登录后,在访问该站点的其他URL,就能包管其访问的还是后端web服务器A
  1. upstream backend{
  2. #设置服务器使用ip_hash算法进行负载均衡
  3.      ip_hash;
  4.      server 192.168.188.11:9081 weight=10;
  5.      server 192.168.188.11:9082 weight=3;
  6.      server 192.168.188.11:9083 weight=5;
  7. }
复制代码
least_conn方式

   最少连接,把哀求转发给连接数量较少的后端服务器。轮询算法是把哀求平均的转发给各个后端,使他们的负载大致相同;但是,有些哀求占用的时间会很长,导致其所在的后端负载比较高。这种情况下,least_coon这种方式就可以达到更好的负载平衡效果
  1. upstream backend{
  2. #设置服务器使用least_coon算法进行负载均衡
  3.      least_coon;
  4.      server 192.168.188.11:9081 weight=10;
  5.      server 192.168.188.11:9082 weight=3;
  6.      server 192.168.188.11:9083 weight=5;
  7. }
复制代码
url_hash方式

   按照URL的hash结果举行分配哀求,是每个url定向到同一个后端服务器,要共同缓存命中来使用。同一个资源哀求多次,可能会到达差别的服务器上,导致不须要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而是用url_hash,可以使得同一个url会到达同一台服务器,一旦缓存了资源,再次收到哀求就可以直接从缓存中读取
  1. upstream backend{
  2. #设置服务器使用url_hash算法进行负载均衡
  3.      hash &request_uri;
  4.      server 192.168.188.11:9081 weight=10;
  5.      server 192.168.188.11:9082 weight=3;
  6.      server 192.168.188.11:9083 weight=5;
  7. }
复制代码
fair方式

   fair采用的不是内建负载平衡使用的轮换的平衡算法,而是可以根据页面的大小,加载时间的是非智能的举行负载平衡
  1. upstream backend{
  2. #设置服务器使用fair算法进行负载均衡
  3.      fair;
  4.      server 192.168.188.11:9081 weight=10;
  5.      server 192.168.188.11:9082 weight=3;
  6.      server 192.168.188.11:9083 weight=5;
  7. }
复制代码
fair属于第三模块实现的负载平衡,因此要添加nginx-upstream-fair模块来举行使用
nginx模块添加
nginx模块添加
https://blog.csdn.net/qq_63781342/article/details/144645859#%E6%B7%BB%E5%8A%A0%E6%A8%A1%E5%9D%97%E5%88%B0nginx%E4%B8%AD%E7%9A%84%E6%AD%A5%E9%AA%A4
四层负载平衡

   四层负载平衡指的是在应用层,指的是基于IP+PORT的负载平衡
  实现方式

硬件:F5负载平衡器
软件:Nginx、HAProxy、LVS等
必要注意的是,硬件负载平衡器通常具有较高的本钱,并且必要专业的技术职员举行配置和管理。因此,在选择硬件负载平衡器时,必要根据现实需求、预算和技术本领举行综合考虑。与硬件负载平衡器相比,软件负载平衡用具有本钱较低、易于配置和管理等优点。然而,软件负载平衡器在性能和可靠性方面可能不如硬件负载平衡器。因此,在选择负载平衡方案时,必要根据详细的应用场景和需求举行权衡。
模块添加

   使用nginx实现四层负载平衡时,必要使用stream模块来举行使用,nginx模块添加
  nginx模块添加
https://blog.csdn.net/qq_63781342/article/details/144645859#%E6%B7%BB%E5%8A%A0%E6%A8%A1%E5%9D%97%E5%88%B0nginx%E4%B8%AD%E7%9A%84%E6%AD%A5%E9%AA%A4
相关指令

stream指令

   该指令在此中指定流服务器指令的配置文件上下文,和http指令同级
  stream指令表  语法stream {……}默认值---位置main upstream指令

   该指令和http的upstream指令是类似的
  案例分析

需求分析


   使用IP+PORT来举行服务的区分,当用户访问nginx的81端口时,nginx会将哀求发送给redis服务,当用户访问nginx的82端口时,nginx则会将哀求转发给tomcat服务器
  实验情况表  角色服务所在服务器客户端192.168.188.1---代理服务器1192.168.188.10:81 nginx代理服务器1
代理服务器2192.168.188.10:81nginx代理服务器1redis服务器1192.168.188.11:6379redis服务器1redis服务器2192.168.188.11:6378redis服务器1tomcat服务器192.168.188.11:8080tomcat服务器 服务器配置

安装redis服务

  1. wget http://download.redis.io/releases/redis-6.0.8.tar.gz
  2. tar -xzvf redis-6.0.8.tar.gz
  3. cd redis-6.0.8
  4. make
复制代码
将解压的redis文件整个复制一份,然后修改此中一个redis的配置文件看,将端口改为6378
然后运行这两个redis服务器,在两个差别redis服务器中存储两个差别的key值举行后面的区分
比方: redis1: server redis1  redis2: server redis2 
安装tomcat服务

先配置JDK服务
下载所在:
openjdk下载所在
https://mirrors.huaweicloud.com/openjdk/tomcat下载所在
tomcat官网
https://mirrors.huaweicloud.com/openjdk/下载完成后举行服务的启动,至此,三台服务器配置完毕
代理服务器配置

  1. stream {
  2. #为两个redis服务设置群组
  3.     upstream redisbackend{
  4.         server 192.168.188.11:6379;
  5.         server 192.168.188.11:6378;
  6.     }
  7. #设置tomcat的群组
  8.     upstream tomcatbackend{
  9.         server 192.168.188.11:8080;   
  10.     }
  11.     server {
  12.         listen 81;
  13. #代理两个reids服务
  14.         proxy_pass redsibackend;
  15.     }
  16. #代理tomcat服务
  17.     server {
  18.         listen 82;
  19.         proxy_pass tomcatbackend;
  20.     }
  21. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

麻花痒

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表