当前位置: 首页 > article >正文

零基础5分钟上手亚马逊云科技-高可用负载均衡器

简介:

欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列,适用于任何无云计算或者亚马逊云科技技术背景的开发者,通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。

我会每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿云开发/架构技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS最佳实践,并应用到自己的日常工作里。本次介绍的是如何利在亚马逊云科技上创建一个网络层负载均衡器,并将后端2个位于不同可用区的服务器挂到负载均衡器上实现应用高可用,提升应用稳定性。本方案架构图如下:

方案所需基础知识

什么是亚马逊云科技Network Load Balancer?

Amazon Web Services(AWS)的Network Load Balancer(NLB)是一种专为处理成千上万并发连接的应用程序而设计的高性能负载均衡器。NLB工作在OSI模型的第4层(传输层),能够基于IP协议数据包的内容,将流量转发到目标实例或容器上。它可以处理大量的TCP、UDP以及其他基于IP的流量,提供极低的延迟,同时具有高可用性和可扩展性。

为什么使用负载均衡器实现应用的高可用性?

使用负载均衡器(如AWS的Network Load Balancer)对于实现应用的高可用性至关重要,原因如下:

流量分发

负载均衡器通过将传入的流量均匀分配到多个后端实例(如EC2实例或容器)上,避免了单个实例成为性能瓶颈或单点故障。这种分流机制使得应用能够处理更高的请求量,同时每个实例的负载也更加均衡,从而提高了整体的性能和响应速度。

容错能力

当后端实例出现故障或不可用时,负载均衡器能够自动检测并将流量转发到健康的实例上。这种自动故障切换机制确保了应用在面对部分实例故障时仍能保持正常运行,不会影响用户体验。

自动扩展支持

负载均衡器与AWS的自动扩展(Auto Scaling)相结合,可以根据实际需求自动调整后端实例的数量。当流量增加时,自动扩展将启动更多实例,负载均衡器会自动将流量分配给新启动的实例;当流量减少时,多余的实例将被自动关闭,从而优化资源利用率并降低成本。

本方案包括的内容

1. 创建一个网络层负载均衡器,并挂载位于两个不同可用区的EC2服务器

2. 为EC2服务器添加健康检测,在健康检测失败时将服务请求转移到健康服务器

项目搭建具体步骤

1. 登录亚马逊云科技控制台,进入EC2服务主页

2. 点击左侧菜单栏的”Load Balancers”,再点击"Create"创建一个负载均衡器

3. 选择创建类型为Network Load Balancer,点击Create创建。

4. 为负载均衡器命名为“myELB”,选择“Internet-facing”设置该负载均衡器为面向公网。

5. 为该负载均衡器配置VPC,并添加位于“ap-northeast-1”的两个可用区“ap-northeast-1a”和“ap-northeast-1c”

 6. 为负载均衡器添加Security Group安全组,并点击Create Target Group添加目标组,用于挂载EC2服务器。

7. 为目标组命名为“lb-targets”,协议选择TCP,端口选择80,并添加目标组所在VPC。其他配置选择默认,点击Next。

 8. 选中位于两个可用区的两台EC2服务器,点击“Include as pending below”添加。最后点击“Create Target Group”开始创建

9. 此时我们回到创建负载均衡器的界面,添加我们刚创建的目标组“lb-targets”,再点击“Create Load Balancer“创建负载均衡器

10. 我们点击复制负载均衡器的URL,在浏览器中打开,就可以看到EC2服务器中的网页资源了

11. 下面我们模拟EC2出现故障时,负载均衡器是否能进行故障转移,将流量传输到正常工作的EC2服务器。我们点击”Stop“关闭一台EC2服务器。

12. 再次访问负载均衡器的URL,简单的HTML网页仍然可以正常工作,故障转移成功。

如何通过Python代码创建Amazon Comprehend自定义词汇识别模型?

以下是使用AWS Boto3 SDK创建一个网络负载均衡器(Network Load Balancer),并将其挂载到位于两个可用区的EC2服务器上的Python代码示例。

import boto3

# 创建EC2和ELB客户端
ec2 = boto3.client('ec2')
elb = boto3.client('elbv2')

# 定义变量
load_balancer_name = 'my-nlb'
subnet_ids = ['subnet-12345678', 'subnet-87654321']  # 替换为实际的子网ID
security_group_id = 'sg-0123456789abcdef0'  # 替换为实际的安全组ID
instance_ids = ['i-0123456789abcdef0', 'i-0abcdef0123456789']  # 替换为实际的实例ID

# 创建目标组
response = elb.create_target_group(
    Name='my-target-group',
    Protocol='TCP',
    Port=80,
    VpcId='vpc-0123456789abcdef0',  # 替换为实际的VPC ID
    HealthCheckProtocol='TCP',
    HealthCheckPort='80',
    TargetType='instance'
)
target_group_arn = response['TargetGroups'][0]['TargetGroupArn']
print(f'Target group created with ARN: {target_group_arn}')

# 注册目标实例
elb.register_targets(
    TargetGroupArn=target_group_arn,
    Targets=[{'Id': instance_id} for instance_id in instance_ids]
)
print('Targets registered successfully.')

# 创建网络负载均衡器
response = elb.create_load_balancer(
    Name=load_balancer_name,
    Subnets=subnet_ids,
    SecurityGroups=[security_group_id],
    Scheme='internet-facing',
    Type='network',
    IpAddressType='ipv4'
)
load_balancer_arn = response['LoadBalancers'][0]['LoadBalancerArn']
print(f'Load balancer created with ARN: {load_balancer_arn}')

# 创建监听器并绑定到目标组
response = elb.create_listener(
    LoadBalancerArn=load_balancer_arn,
    Protocol='TCP',
    Port=80,
    DefaultActions=[{
        'Type': 'forward',
        'TargetGroupArn': target_group_arn
    }]
)
print('Listener created successfully.')

代码解释:

该代码创建了一个网络负载均衡器(NLB)。在创建负载均衡器时,指定了子网、安全组、负载均衡器的类型(network),以及它是面向公开互联网的(internet-facing)。创建完成后,获取并打印了负载均衡器的ARN。

之后该代码创建了一个监听器(Listener),它会监听来自客户端的请求,并将请求转发到前面创建的目标组中。监听器使用TCP协议,监听端口为80。

以上就是在亚马逊云科技上利用网络负载均衡器设计高可用应用架构的全部步骤。欢迎大家关注0基础5分钟上手AWS系列,未来获取更多国际前沿的AWS云开发/云架构方案。

 


http://www.kler.cn/a/287166.html

相关文章:

  • 记录———封装uni-app+vant(u-upload)上传图片组件
  • 2024年11月19日随笔
  • STM32 独立看门狗(IWDG)详解
  • SpringCloud处理Websocket消息过长自动断开连接
  • 【期权懂|个股期权中的备兑开仓策略是如何进行的?
  • Lambda常用方法
  • 浅谈SpringMvc的核心流程与组件
  • 零基础学习Redis(7) -- hash类型命令使用
  • 【区块链 + 司法存证】数据存证区块链服务开放平台 | FISCO BCOS应用案例
  • Qt详解QHostInfo
  • MindSearch CPU-only 版部署
  • 华为云征文|部署内容管理系统 Joomla
  • React 入门第八天:性能优化与开发者工具的使用
  • this.$nextTick() 是 Vue.js 提供的一个方法
  • A* 算法优化思路
  • Jiujiu-SaaS:开创Web3时代的IP电商新纪元
  • [MRCTF2020]pyFlag(详解附送多个python脚本)
  • Zookeeper 官方示例2-SyncPrimitive 代码解读(二)
  • 数据库(MySQL)的基本操作
  • C# 异步编程
  • linux-基础知识2
  • echarts地图下钻+平面3D效果+自定义toolTip+自定义立体数据图层
  • J.U.C Review - CAS的工作原理
  • CS224W—07 Machine Learning with Heterogeneous Graphs
  • Javaweb12-Maven基础和进阶
  • 【工控】线扫相机小结 第二篇