aws 负载均衡clb/nlb/alb

news2024/9/21 19:10:05

目录

概述

传统负载均衡器(Classic Load Balancer)

DNS解析

健康检查(Health Check)

监听器(Listeners)

连接耗尽(Connection Draining)

粘性会话/会话关联(Sticky Sessions/Session Affinity)

应用程序负载均衡器(Application Load Balancer)

网络负载均衡器(Network Load Balancer)

弹性伸缩(Auto Scaling)

启动配置(Launch Configuration)

弹性伸缩组(Auto Scaling Group)

扩展选项

默认的实例终止策略

EC2置放群组(Placement Group)

Placement Group的特点

使用Placement Group的最佳实践

 应用场景

概述

ELB

我们在AWS控制台创建负载均衡器类型时,会发现有三个选项可以选择,分别是应用负载均衡器(ALB),网络负载均衡器(NLB),经典负载均衡器(CLB)。

弹性负载均衡器(Elastic Load Balancer)。Amazon 将 ELB 分成三种不同类型

1、ALB

应用程序负载均衡器(Application Load Balancer)
应用程序级别(第 7 层)
支持基于内容的路由和在容器中运行的应用程序。

2、NLB

网络负载均衡器(Network Load Balancer)
在连接级别运行(第 4 层)
适合实现传输控制协议 (TCP) 流量负载均衡,且能够在每秒处理数百万请求的同时保持超低延迟。

3、CLB

经典负载均衡器(Classic Load Balancer)
CLB是AWS的上一代负载均衡器,支持TCP、SSL/TLS、HTTP、HTTPS协议,是AWS的三种负载均衡器支持协议最多的。
在应用程序级别(第 7 层)和连接级别(第 4 层)运行
非常适合内置于 Amazon EC2-Classic 网络的应用程序。

传统负载均衡器(Classic Load Balancer)

  • Class Load Balancer可以将入向流量自动分布到多个健康的EC2实例上
  • ELB是最终用户的唯一接触点
  • ELB本身就是一个绝对高可用,永不宕机的分布式软件,用户不需要考虑ELB的高可用性,不需要为其设计高可用的架构设计。而且ELB不是单点故障
  • ELB具有弹性,能自动对自身进行性能的提升,即可以理解为ELB能处理无穷无尽的数据请求
    • 但ELB的弹性不是立马生效的,如果应用程序在某个时间点有爆发性的流量发生(比方说淘宝双11),那么ELB是不会马上进行扩容的,扩容的过程需要一定的时间(1到7分钟)
    • 如果有可预料的爆发性流量要发生(或者需要进行压力测试),那么可以联系AWS技术支持,告诉AWS流量预计发生的开始和结束时间、预计的每秒请求数、总请求数。AWS可以对该ELB进行预热(pre-warm)从而提前达到能处理这些流量的性能大小
  • ELB是阻挡来自网络攻击的第一道防线(比如DDoS攻击)
  • 你不需要为ELB打补丁,或管理和维护它的操作系统
  • 能分担加密和解密的工作,从而减少EC2实例的系统负担
  • 能和AWS弹性伸缩(Auto Scaling)集成,从而能保证后台运行的EC2实例能满足流量的需求
  • 默认情况下,ELB的流量转发规则是 TCP 侦听器使用轮询路由(Round Robin)算法,对 HTTP 和 HTTPS 侦听器使用最少未完成请求路由算法。
  • ELB只在一个特定的AWS区域中工作,不能跨区域(Region),但可以跨可用区(AZs)
  • 基于ELB在所处应用架构中的位置不同,可以分两个类型ELB
    • Internet Load Balancer – 是面向公网的负载均衡器,能接受来自Internet用户的连接请求
    • Internal Load Balancer – 是面向AWS私有网段的负载均衡器,一般仅服务于AWS内部的资源。典型的使用案例是放置在前端服务器和后端服务器之间

DNS解析

  • ELB会以DNS (Domain Name System)的形式显示在AWS管理控制台,并且会动态解析不同公网IP地址,我们在使用ELB时要尽量用DNS来对它进行访问,而不是IP地址
  • 在ELB进行弹性扩容的时候,它的DNS记录会被更新,DNS会解析到新的IP地址上(因此这也是上面所说的我们要尽量用DNS名来访问ELB)
  • DNS记录的TTL时间是60秒
  • 建议客户端(程序)每60秒更新DNS查找记录,以获取最新的ELB地址和最好的ELB性能

健康检查(Health Check)

ELB在每一个健康检查间隔(HealthCheck Interval)都会向所有已注册的实例发送基于Ping、端口或者(网页)路径的检查数据包,并且在响应超时(Response Timeout)这个时间内等待实例的回复。如果连续没有得到回复的次数超过定义的不健康阈值(Unhealthy Threshold),那么这个实例会被标记为OutofService。如果在连续得到实例回复的次数超过了健康阈值(Healthy Threshold)的话,那么这个实例会被重新标记为Inservice状态。

  • ELB会对所有注册到这个ELB上的EC2实例进行健康检查,无论目前的健康状态如何
  • ELB的监控状态分别为InService(表示健康)或者OutofService(表示不健康)

监听器(Listeners)

  • Listeners可以用来监听用户对ELB发起的请求,以及ELB和后台EC2实例之间的请求
  • Listeners可以定义监听的协议和端口
  • Listeners支持HTTP, HTTPS, SSL, TCP协议

连接耗尽(Connection Draining)

默认情况下,一个已注册再ELB的EC2实例取消了注册或者进入OutofService状态,那么ELB会马上切断这个实例正在进行的连接。

为了保证Classic Load Balancer中当有实例变成不健康的状态(OutofService)或者正在取消注册,而该实例上已经建立的连接不受影响, 请启用Connection Draining功能。它能保证该不健康的实例在处理完所有已有的连接请求之后,才真正地从ELB内去除,接着ELB不会再转发请求给这个实例。

Connection Draining的可设置时间限制范围是1~3600秒(默认为300秒)。当达到这个最大时限时,不管当前实例是否处理完请求,ELB都会强制关闭与这个实例的连接。

粘性会话/会话关联(Sticky Sessions/Session Affinity)

默认情况下,Classic Load Balancer会将每一个用户请求转发到负载最小的已注册实例上。但是如果启用Sticky Sessions /Session Affinity,则在会话期间ELB会将来自某个用户的所有请求都转发到同一个实例上。

应用程序负载均衡器(Application Load Balancer)

应用程序负载均衡器(Application Load Balancer)工作在7层(应用层),因此也被称为7层的ELB。

在应用程序负载均衡器中,引入了规则这个概念。ELB在收到请求之后,会按照优先顺序评估侦听器的规则,然后根据定义的规则将流量转发到特定的目标组中。如下图所示,你可以配置不同的侦听器规则,然后根据流量的内容或者URL路径来将不同的请求转发到不同的目标组内,而一个目标组又包含了若干的目标(EC2实例)。

应用程序负载均衡器在其他方面和上文讲的传统负载均衡器非常类似,那他们有什么大的区别呢?

  • Application Load Balancer可以进行基于路径的路由。即可以根据用户请求中的URL字段不同来将请求发送到不同的目标组中。比方可以定义ELB,将访问https://iteablue.com/posts/*文章的流量转发到目标组1中,然后将访问https://iteablue.com/pages/*页面的流量转发到目标组2中,那么就可以把原本的一个网页应用程序分解成更小的服务单元
  • ALB可以侦听HTTP数据包头部的信息,根据此字段来定义规则
  • ALB支持通过IP地址进行目标注册,包括位于VPC之外的目标。即可以在一个ALB中定义4个AWS中的EC2实例,同时定义2个来自公司内网的物理服务器
  • 支持容器化的应用程序

网络负载均衡器(Network Load Balancer)

网络负载均衡器(Network Load Balancer)工作在4层(传输层),因此也被称为4层的ELB。

  • NLB可以基于协议、源 IP 地址、源端口、目标 IP 地址、目标端口和 TCP 序列号,使用流式哈希算法选择目标。
  • NLB可以每秒处理数百万个请求
  • 支持静态IP地址用于负载均衡器
  • 同ALB一样,NLB支持通过IP地址进行目标注册,包括位于VPC之外的目标
  • 支持容器化的应用程序

弹性伸缩(Auto Scaling)

亚马逊弹性伸缩(Auto Scaling)自动地增加/减少EC2实例的数量,从而让你的应用程序一直能保持可用的状态。

你可以预定义Auto Scaling,使其在需求高峰期自动增加EC2实例,而在需求低谷自动减少EC2实例。这样不仅能让你的应用程序一直保持健康的状态,而且也节省了你为EC2实例所付出的费用。

Auto Scaling 适用于那些需求稳定的应用程序,同时也适用于在每小时、每天、甚至每周都有需求变化的应用程序。

  • Auto Scaling能保证你一直拥有一定数量的EC2实例来分担应用程序的负载
  • Auto Scaling能带来更高的容错性、更好的可用性和更高的性价比
  • 你可以控制伸缩的策略来决定在什么时候终止和创建EC2实例,以处理动态变化的需求
  • 默认情况下,Auto Scaling能控制每一个可用区内所运行的实例数量尽量平均
    • 为了达到这个目标,Auto Scaling在需要启动新实例的时候,会选择一个目前拥有运行实例最少的可用区

Auto Scaling的构成组件:

启动配置(Launch Configuration)

  • 启动配置是弹性伸缩组用来启动EC2实例的时候所使用的模板
  • 启动配置包含了镜像文件(AMI),实例类型、密钥对、安全组和挂载的存储设备
  • 一个启动配置可以关联多个Auto Scaling组
  • 启动配置一经创建不能被更改,只能删除重建
  • 启动配置中可以使用CloudWatch的基础监控(Basic Monitoring)或者详细监控(Detail Monitoring)
  • Auto Scaling automatically creates a launch configuration directly from an EC2 instance.

弹性伸缩组(Auto Scaling Group)

  • 弹性伸缩组(ASG)是弹性伸缩的核心,它包含了多个拥有类似配置/类型的EC2实例,这些实例被逻辑上认为是一样的
  • 弹性伸缩组需要的几个参数:
    • 启动配置(Launch Configuration):它决定了EC2使用什么模板,模板内容包括了镜像文件(AMI),实例类型、密钥对、安全组和挂载的存储设备
    • 最小和最大的性能:决定了在弹性伸缩的情况下,EC2实例数量的浮动范围
    • 所需的性能:决定了这个弹性伸缩组要保持的运作所需要的基本的EC2实例数量;如果没有填写,则默认为其数值等同于最小的性能
    • 可用区和子网:定义EC2实例启动时候所在的可用区和子网信息
    • 参数和健康检查:参数定义了何时启动新实例,何时终止旧实例;健康检查决定了实例的健康状态。
  • 如果一个EC2实例的健康状态变成“不健康”,那么ASG会终止这个EC2实例,并且自动启动一个新的EC2实例
  • 弹性伸缩组(ASG)只能在某一个AWS区域内运行,不能跨越多个区域
  • 如果启动配置(Launch Configuration)有更新,那么之后启动的新EC2实例会使用新的启动配置,而旧的EC2实例不受影响
  • 从AWS管理平台你可以直接删除一个弹性伸缩组(ASG);从AWS CLI你只能先将最小的性能和需求的性能两个参数设置为0,才能删除这个弹性伸缩组。

扩展选项

  • 始终保持当前实例级别:比如始终保持一个ASG有恒定的3个健康实例
  • 手动扩展:手动更改参数最大容量、最小容量或者所需容量来控制ASG内实例的数量
  • 按计划扩展:根据定义的具体时间来弹性扩展实例的数量
  • 根据需求进行扩展:结合CloudWatch来基于参数进行扩展(比如说当CPU利用率持续10分钟在70%以上就自动进行向上扩展,即增加EC2实例数量;而当CPU利用率持续10分钟在30%以下就自动进行向下扩展,即减少EC2实例数量)

扩展阅读:更多关于扩展选项的内容可以查看扩展 Auto Scaling 组的大小

默认的实例终止策略

如果你的Auto Scaling Group中包含了分布在不同可用区的实例时,当涉及到需要终止实例的情况下,Auto Scaling Group会按照以下顺序的规律终止实例。

  • 选择哪一个可用区?
    • 选择当前最多实例并且至少有一个实例不受缩小保护的可用区
    • 如果以上的可用区存在多个,则选择使用最旧的启动配置的实例所在的可用区
  • 选择哪一个实例?
    • 选择一个使用最旧启动配置并且不受保护的实例,如果有多个,则
    • 选择一个不受保护的,最接近下一个计费小时的实例,如果还有多个,则
    • 随机终止一个实例

注意:弹性伸缩(Auto Scaling)可以和弹性负载均衡(Elastic Load Balancing)一起配合使用,这样能保证通过一个DNS地址对外提供服务,而后台能一直保证有一定数量的健康EC2实例处理相应的负载。

EC2置放群组(Placement Group)

EC2 置放群组(Placement Group)逻辑性地把一些实例放置在一个组里面,在这个组里面的实例能享受低延迟高网络吞吐的网络。

Placement Group的特点

  • EC2 Placement Group分为集群置放群组(Cluster Placement Group)分布置放群组(Spread Placement Group)分区置放群组(Partition Placement Group)
    • 集群置放群组(Cluster Placement Group)即传统的置放群组,所有的实例需要在同一个可用区内
    • 分布置放群组(Spread Placement Group)是将实例分布到不同的底层硬件,可以在不同的可用区内。你最多可以在每一个置放群组的每一个可用区内创建7个实例
    • 分区置放群组(Partition Placement Group)确保了置放群组中的每个分区具有自己的一组机架,每个机架具有自己的网络和电源
  • Placement Group提供了低延迟,高速率的网络,可提供高达10 Gbps的速度
  • EC2 Placement Group的命名需要在你的AWS账户内唯一,不能有命名重复
  • 只有特定的EC2实例类型可以放在配置Placement Group内(某些计算优化型、GPU、内存优化型和存储优化型的实例)
  • AWS建议在一个Placement Group内的所有EC2实例是一模一样的,否则会有短板效应
  • 不可以合并多个EC2 Placement Group
  • 不可以将一个正在运行的EC2实例放到一个EC2 Placement Group中;只能为这个EC2实例创建一个AMI,然后基于AMI创建一个新的实例并且加入到Placement Group内
  • Placement Group可以跨越peerd VPC,但要保证在同一个可用区内
  • 如果在Placement Group中创建实例的时候出现“capacity error”的错误,可以停止再启动组中的所有实例,再重新创建刚才的实例
    • 停止再启动组中的所有实例可以改变这些实例所在的底层物理设备,从而带来更多的性能和空间启动新的实例
  • Placement Group的创建会告诉AWS将组里的实例安置在物理上接近的AWS设备内

使用Placement Group的最佳实践

  • 组内使用一样类型的EC2实例
  • 同一时间启动组内所有EC2实例,这样可以减少出现“capacity error”错误的概率
  • 可以通过更改最大传输单元(MTU),从默认的1500改成9001来进一步增加Placement Group内实例之间的传输速度

 应用场景

经典负载均衡器(Classic Load Balancer)
AWS第一代负载均衡器,支持4层协议(TCP/UDP)和7层协议(HTTP/HTTPS)。

优势:价格便宜,容易上手
劣势:效果没有NLB/ALB好
应用程序负载均衡器(Application Load Balancer)
ALB的名字为应用程序负载均衡器,支持7层协议(HTTP/HTTPS/WebSocket),不支持4层协议(TCP/UDP)。

优势:支持基于Host和Path的转发;支持粘性会话;性能比CLB好;支持按比例的流量转发;可编辑安全组
负载均衡算法:默认算法为轮询算法,还可以使用最少未完成请求算法
网络负载均衡器(Application Load Balancer)
NLB的名字为网络负载均衡器,支持4层协议(TCP/UDP)。

优势:性能最好,每秒支持百万次请求,不需要预热(ALB和CLB流量大的话需要预热扩充负债均衡服务节点);NLB的ip地址不会改变(CLB和ALB会随着时间改变,另外NLB可以分配固定弹性ip,ALB不能)
负载均衡算法:默认算法为哈希算法
ALB和NLB选择和区别
当客户的业务基于HTTP/HTTPS/Websocket时候,优先考虑使用ALB。
NLB可以处理7层的流量,但NLB不解析7层的协议,不会对协议进行处理。
如果选择了ALB,则处理不了4层的流量,主要取决于选择的负载均衡器类型。

 参考:

AWS学习笔记(四) ELB CLB ALB NLB AS PG – IT Lab Service – Bing哥的博客

AWS ALB NLB CLB负载均衡器_打牛地的博客-CSDN博客_aws nlb

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(四)手写简单版MyBatis框架

文章目录环境搭建第一步:资源⼯具类第二步:定义SqlSessionFactoryBuilder类第三步:定义SqlSessionFactory类第四步:定义JDBC事务管理器第五步:定义数据源类第六步:定义MyMappedStatement类第七步&#xff1…

基于遗传算法卡车无人机旅行推销员问题(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Leetcode刷题111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:2 示例 2: 输入…

Python_机器学习_算法_第7章_7.拓展知识

Python_机器学习_算法_第7章_7.拓展知识 文章目录Python_机器学习_算法_第7章_7.拓展知识7.拓展知识7.1. 其他距离公式1 标准化欧氏距离2 余弦距离3 汉明距离【了解】4 杰卡德距离【了解】5 马氏距离【了解】7.2.再议数据分割1 留出法2 交叉验证法2.1 交叉验证法基本介绍2.2 KF…

ARM发布Cortex-X3和Cortex-A715

快速链接: . 👉👉👉 个人博客笔记导读目录(全部) 👈👈👈 付费专栏-付费课程 【购买须知】: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 ARM公司发布了第二代 AR…

x86 smbus 下挂eeprom不能写问题

目录 背景 分析 驱动影响 SPD register 接口 只读 修改验证 总结 背景 x86 smbus上下挂一个eeprom,只能读取,不能写入。 写入命令采用: i2cset -y -f 0 0x50 0 0x33 即向总线0 下的0x50 地址的eeprom偏移量0 写入数据0x33, 命令…

哈夫曼树原理及Java编码实现

文章目录前言一、哈夫曼树原理二、哈夫曼编码(Java题解)参考资料前言 所有博客文件目录索引:博客目录索引(持续更新) 源代码:Gitee—Huffman.java、Github—Huffman.java 一、哈夫曼树原理 对于哈夫曼树的构造以及权值计算原理…

Java语言高级-10MySQL-第2节MySQL安装与使用

2、MySQL数据库软件 1、安装 详细见视频 2、卸载 1、去mysql的安装目录找到my.ini文件 “复制datadir “C:/programData/MySQL/MySQL Server 5.5/Data” 2、卸载MySQL 控制面板->程序卸载,但是此时并没有卸载干净 3、删除C:/ProgramData目录下得MySQL文件夹 注意…

java 内部类

小镇做题家 前段时间很火的一个话题“小镇做题家”,我没有具体了解,我以为是在鼓励一些努力拼搏的人。 某一天,禁不住好奇,我打开了百度百科,看了看小镇做题家的解释 就是指一些村里或者小镇的人,通过学习…

模板和泛型编程(上)

目录函数模板泛型编程函数模板概念及原理函数模板的实例化函数模板的匹配原则类模板类模板实例化函数模板 泛型编程 泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器…

猿创征文|Python迭代器、生成器、装饰器、函数闭包

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 Python迭代器、生成器、装饰器、函数闭包1. 迭代器 iterator☞迭代器协议☞Python中的for循环2. 生成器…

C语言qsort()函数针对:整型、单个字符、字符串、结构体,超详细讲解(多维度分析举例,小白一看就懂!!!!!)

目录 一、前言 二、qsort()函数 🍑qsort()函数简介 🍉qsort()函数中整型、double型、字符型的应用 💦整型 💦 double型 💦字符排序 🍎qsort()函数在字符串中的应用 💦在字符串中按首字母…

Android NDK开发基础

文章目录cmake语法基础cmake添加日志:cmake增加宏字符串比较cmake在build.gradle中传递编译参数到cmake通过javah生成native对应的c头文件jni和java之间字符串的相互操作JavaVM和JNIEnv字符串的编码native方法静态注册和动态注册静态注册动态注册extern cC中STATIC和…

SpringCloud Alibaba-Sentinel保姆级教程

文章目录1、Sentinel前奏1.1、服务雪崩效应1.2、常见容错方案1、隔离2、超时3、限流4、熔断5、降级1.3、常见容错组件1、Hystrix2、Resilience4J3、Sentinel2、Sentinel入门2.1、什么是Sentinel2.2、实战编码1、安装Sentinel服务端2、微服务引入Sentinel2.3、Sentinel流控模式1…

YOLOv5蒸馏 | 知识蒸馏理论篇 | 1/2

之前在《一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理》这篇文章中介绍过一些知识蒸馏的原理,这篇博文将会着重介绍目标检测领域的知识蒸馏原理。 文章目录 1.《Object detection at 200 Frames Per Second》1.1 蒸馏难点1.2 蒸馏损失1.3 实验结果2. 《Learning E…

计算机毕业设计ssm+vue基本微信小程序的体检预约小程序

项目介绍 我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,体检预约系统小程序被用户普遍使用,为方便用户…

【前端】CSS(1) —— CSS的基本语法和一些简单的选择器

JavaEE传送门JavaEE 网络原理——网络层与数据链路层 【前端】HTML入门 —— HTML的常见标签 目录CSS基本语法注释引入方式内部样式内联样式外部样式代码风格样式格式样式大小写空格规范CSS 选择器标签选择器类选择器id 选择器通配符选择器复合选择器后代选择器子选择器并集选…

文件包含漏洞和hash破解

介绍 Windows是当今世界最主要的操作系统,因为它易于使用的GUI可访问性。大约85%的市场份额已成为攻击的关键操作系统。此外,大多数组织使用Active Directory来设置其Windows域网络。微软聘请NTLM(New Technology LAN Manager)和…

Pico Neo3 4VR游戏下载地址及十大好玩游戏推荐

大家好,杰克今天为大家分享的是VR一体机游戏。 说到VR一体机,我们首先想到的一定是国产之光pico啦,picovr被认为是国内最被看好的VR一体机,有望在国内取代红极一时的OculusQuest,填补这块市场的空白。OculusQuest将6D…

#Primavera Unifier:关于零代码/低代码平台特点【2/3】

在之前对Unifier的介绍中,我提到了Unifier应用的一个非常关键的特征,及零代码快速配置使用,而为了更好的介绍Oracle Primavera Unifier 的零代码特点,以下我将通过3篇内容来逐一介绍零代码/低代码平台的特点。 前面介绍到了零代码…