Skip to main content

moregeek program

aws学习笔记(四)_dou-leo-0726的博客-多极客编程

ELB、CLB、ALB、NLB、AS、PG


传统负载均衡器(Classic Load Balancer)应用程序负载均衡器(Application Load Balancer)网络负载均衡器(Network Load Balancer)三种不同的负载均衡器


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


  • Class Load Balancer可以将入向流量自动分布到多个健康的EC2实例上
  • ELB是最终用户的唯一接触点
  • ELB本身就是一个绝对高可用,永不宕机的分布式软件,用户不需要考虑ELB的高可用性,不需要为其设计高可用的架构设计。而且ELB不是单点故障
  • ELB具有弹性,能自动对自身进行性能的提升,即可以理解为ELB能处理无穷无尽的数据请求
  1. 但ELB的弹性不是立马生效的,如果应用程序在某个时间点有爆发性的流量发生(比方说淘宝双11),那么ELB是不会马上进行扩容的,扩容的过程需要一定的时间(1到7分钟)
  2. 如果有可预料的爆发性流量要发生(或者需要进行压力测试),那么可以联系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
  1. Internet Load Balancer – 是面向公网的负载均衡器,能接受来自Internet用户的连接请求
  2. 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实例)。


1.png


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


  • 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能控制每一个可用区内所运行的实例数量尽量平均
    1. 为了达到这个目标,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实例,这些实例被逻辑上认为是一样的
  • 弹性伸缩组需要的几个参数:
  1. 启动配置(Launch Configuration):它决定了EC2使用什么模板,模板内容包括了镜像文件(AMI),实例类型、密钥对、安全组和挂载的存储设备
  2. 最小和最大的性能:决定了在弹性伸缩的情况下,EC2实例数量的浮动范围
  3. 所需的性能:决定了这个弹性伸缩组要保持的运作所需要的基本的EC2实例数量;如果没有填写,则默认为其数值等同于最小的性能
  4. 可用区和子网:定义EC2实例启动时候所在的可用区和子网信息
  5. 参数和健康检查:参数定义了何时启动新实例,何时终止旧实例;健康检查决定了实例的健康状态。
  • 如果一个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会按照以下顺序的规律终止实例。


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

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


EC2置放群组(Placement Group)


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


2.png


Placement Group的特点


  • EC2 Placement Group分为集群置放群组(Cluster Placement Group)分布置放群组(Spread Placement Group)分区置放群组(Partition Placement Group)
  1. 集群置放群组(Cluster Placement Group)即传统的置放群组,所有的实例需要在同一个可用区内
  2. 分布置放群组(Spread Placement Group)是将实例分布到不同的底层硬件,可以在不同的可用区内。你最多可以在每一个置放群组的每一个可用区内创建7个实例
  3. 分区置放群组(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”的错误,可以停止再启动组中的所有实例,再重新创建刚才的实例
  1. 停止再启动组中的所有实例可以改变这些实例所在的底层物理设备,从而带来更多的性能和空间启动新的实例
  • Placement Group的创建会告诉AWS将组里的实例安置在物理上接近的AWS设备内

使用Placement Group的最佳实践


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

©著作权归作者所有:来自51CTO博客作者可能再无晚安的原创作品,请联系作者获取转载授权,否则将追究法律责任
AWS学习笔记(四)
https://blog.51cto.com/u_15382300/5453238

使用fav-up工具获取目标服务器的真实ip地址_键客李大白的博客-多极客编程

Fav-up​Fav-up是一款功能强大的IP查询工具,该工具可以通过Shodan和Favicon(网站图标)来帮助研究人员查询目标服务或设备的真实IP地址。​工具安装​首先,该工具需要本地设备安装并部署好Python 3环境。然后广大研究人员需要使用下列命令将该项目源码克隆至本地:​git clone https://github.com/pielco11/fav-up.git​接下来,运行下列

交互式shell脚本遍历文件目录下的所有文件和目录(绝对路径)_akida-ko的博客-多极客编程

背景介绍 Linux系统想要获取一个工作目录下的文件和目录不是很方便,也没用现成的命令可以直接使用,因此使用Shell实现了一个简单地可以将目标目录下的文件和目录输出打印出来的脚本。 实现代码 #!/bin/bash #version:1.0 #author:cosann #date:20220708 while true do #打印脚本介绍信息 echo -e "\n====

async_tx: api initialized (async)-已解决 _柳华聪的博客-多极客编程

今天想本来想升级下k8s集群gpu驱动,卸载完nvidia驱动后,重启机器后出现了错误,心里一想BBQ了,让我们一起看下什么原因。 [ 123.821843] kernel: raid6: sse2x2 xor() 10749 MB/s [ 123.869854] kernel: raid6: sse2x1 gen() 9156 MB/s [ 123.917855] kernel: raid6:

tomcat 配置nginx 反向代理_那个从阿拉德出来的勇士的博客-多极客编程

解释为什么要为Tomcat配置反向代理? 1、如果同一台机器又有Nginx又有Tomcat,则会产生端口冲突。 2、为了访问时不需要输入端口后缀所以我们需要把8080端口变成80端口。 3、Nginx对于静态的请求速度上要优于Tomcat,Tomcat不擅长做高并发的静态文件请求处理 所以需要配置nginx反向代理。 配置 首先到nginx配置文件的目录下 配置一个虚拟主机的配置文件 cd /e

通过graylog如何监控系统日志_朴实的追梦者的博客-多极客编程

日志监控是企业监控系统里面很重要的一个环节,通过日志监控可以提前发现网络设备或者系统存在的未知或者潜在的风险,让运维人员及时干预,减少损失。常见的监控系统Zabbix、Prometheus都支持日志的监控。但由于在数据量、搜索、可视化、报警等方面都比较弱化,推荐使用专业的日志收集与告警工具ELK或者Graylog。下面通过Graylog实现系统日志的采集、分析、报表的展示和告警,为广大网友提供一个

tomcat部署第二个java应用_那个从阿拉德出来的勇士的博客-多极客编程

方法一: 更改配置文件 ps: 以下内容涉及的路径以我个人虚机为准 vim /usr/local/tomcat/conf/server.xml 打开配置文件按照图中所示修改 (拷贝、更改域名及目录地址) 更改的目录不用先创建 重启服务后会自动创建 /usr/local/tomcat/bin/startup.sh 起服务 ps aux | grep java 查看服务进程 ls /da

皕杰报表之自定义函数_wx62a1cbdff04d6的博客-多极客编程

当设计器里的函数不能满足你的需求时,你需要自定义一些函数来来满足你的需求。设计器上1.选择【工具栏】->【窗口】->【首选项】->【通用配置】->【类加载配置】,在【自定义接口实现类配置】中添加自定义函数实现类,添加方式有两种:一是将编译好的.class文件打成jar包, 点击【添加JAR】,将jar包导入;二是点击【添加文件夹】,将包含.class文件的文件夹添加进来。2

smtp服务器实现邮件告警_10965183的博客-多极客编程

企业生产环境中,考虑服务器的正常运行,会配置相应的监控项以及邮件告警,大部分采用的方法是通过配置相应的任务计划运行发送邮件的脚本达到目的,本文章考虑到以一种简单的方式配置邮件告警,通过搭建微软自带的SMTP服务器实现邮件发送告警通知。配置前环境准备工作准备两台虚拟机,服务器dc为生产服务器(文件服务器),服务器smtp配置为邮件传输服务器,dc文件服务ip地址为10.0.0.10,smtp服务器i

exchange 2016 安装部署_hwg1227的博客-多极客编程

本次实验计划部署2台邮件服务器,需要一台DC域控制器,另外在部署完成后需要给2台邮件服务器做高可用,需要做DAG为此单独用一台witner.adatum.com来做仲裁盘,其中mail.adatum.com为负责前端流量的负载均衡,目前试了2个负载均衡软件nginx和zevenet,但是2个软件各有优缺点,nginx免费但是对于运维来说,技术上就要求更高,zevenet傻瓜版免费的功能单一,不好用

tomcat 配置nginx 反向代理_那个从阿拉德出来的勇士的博客-多极客编程

解释为什么要为Tomcat配置反向代理? 1、如果同一台机器又有Nginx又有Tomcat,则会产生端口冲突。 2、为了访问时不需要输入端口后缀所以我们需要把8080端口变成80端口。 3、Nginx对于静态的请求速度上要优于Tomcat,Tomcat不擅长做高并发的静态文件请求处理 所以需要配置nginx反向代理。 配置 首先到nginx配置文件的目录下 配置一个虚拟主机的配置文件 cd /e

通过graylog如何监控系统日志_朴实的追梦者的博客-多极客编程

日志监控是企业监控系统里面很重要的一个环节,通过日志监控可以提前发现网络设备或者系统存在的未知或者潜在的风险,让运维人员及时干预,减少损失。常见的监控系统Zabbix、Prometheus都支持日志的监控。但由于在数据量、搜索、可视化、报警等方面都比较弱化,推荐使用专业的日志收集与告警工具ELK或者Graylog。下面通过Graylog实现系统日志的采集、分析、报表的展示和告警,为广大网友提供一个

tomcat部署第二个java应用_那个从阿拉德出来的勇士的博客-多极客编程

方法一: 更改配置文件 ps: 以下内容涉及的路径以我个人虚机为准 vim /usr/local/tomcat/conf/server.xml 打开配置文件按照图中所示修改 (拷贝、更改域名及目录地址) 更改的目录不用先创建 重启服务后会自动创建 /usr/local/tomcat/bin/startup.sh 起服务 ps aux | grep java 查看服务进程 ls /da