零基础5分钟上手谷歌云GCP - 服务器自动扩展

简介

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

我将每天介绍一个基于全球三大云计算平台(AWS, Azure, GCP)的全球前沿云开发/架构技术基础解决方案,帮助大家快速了解国际上最热门的云计算平台上的最佳实践和前沿技术,并应用到自己的日常工作里。本次我将介绍如何根据服务器Virtual Machine的监控参数,自动扩展谷歌云GCP上的服务器。监控方案架构图如下:

方案所需基础知识

什么是 Compute Engine Managed Instance Group?

Compute Engine Managed Instance Group(MIG)是 Google Cloud 提供的一项服务,允许用户管理和自动化一组虚拟机实例的部署和生命周期。MIG 可以根据预定义的模板和策略自动创建、更新、删除和分配实例,确保应用程序始终拥有所需的计算资源。它还支持负载均衡、自动修复和滚动更新,帮助用户轻松管理大规模、分布式的计算环境。

为什么要对服务器设置自动扩展?

设置自动扩展(Auto Scaling)是为了确保服务器资源能够灵活应对应用程序的动态需求。以下是自动扩展的重要原因:

提高可用性和性能:

当应用程序的流量或负载增加时,自动扩展可以立即启动更多服务器实例,以应对增加的需求,确保应用程序始终保持高性能和快速响应,避免因资源不足导致的性能瓶颈。

优化成本:

自动扩展不仅能在高峰期自动增加资源,还能在低谷期减少不必要的实例,从而优化资源使用,避免浪费。这种按需扩展的模式帮助企业根据实际需求动态调整资源,降低运营成本。

增强弹性:

自动扩展使得应用程序能够自动适应不同的工作负载,无需人为干预。无论是应对突发流量还是逐步增长的负载,自动扩展都能确保系统的稳定性和弹性,减少停机风险。

简化运维管理:

自动扩展减少了运维团队的手动干预需求,避免了在流量变化时频繁调整资源配置的繁琐操作,使得系统管理更加高效和自动化。

本方案包括的内容

1. 创建一个用于服务器自动扩展的Compute Engine服务器托管组

2. 指定一个监控参数,用于触发服务器横向扩展

3. 在谷歌云控制台上查看服务器托管组中的监控参数和服务器个数

云资源监控具体步骤

  1. 进入谷歌云控制台,创建一个Compute Engine Instance Template服务器创建模板,用于自动扩容的服务器配置。
  1. 将该Template模板命名为"autoscaling-instance01",并选择资源为"Global"类型。
  1. 点击"Advanced options",为服务器添加MetaData元数据,"startup-script-url:gs://YOUR_BUCKET_NAME/startup.sh"和"gcs-bucket:gs://YOUR_BUCKET_NAME",用于从Cloud Storage中获取开机启动脚本。
  1. 接下来我们创建一个Instance Group,统一批量管理VM服务器
  1. 为Instance Group命名为"autoscaling-instance-group-1", template选择我们刚创建的"autoscaling-instance01",资源类型选择"Single Zone"。
  1. 为Instance Group配置区域,并关闭自动扩展,最后点击Create创建。

7.此时我们回到Compute Engine服务器管理界面,可以看到Instance Group基于我们在第一步中的Template创建的新服务器"autoscaling-instance-group-1-5dgz"。

  1. 接下来我们为instance groups配置自动扩展功能,回到instance groups界面,选中我们创建的"autoscaling-instance-group-1",并点击Edit修改。
  1. 我们将Autoscaling配置开启,设置扩展组的服务器个数范围为Min:1到Max:3,添加触发服务器自动扩展的指标"New Signal",并选则"Cloud Monitoring metric new",再点击Configre。
  1. 点击"Select Metric"选择触发服务器扩展的指标,在搜索栏中搜索自定义指标"appdemo_queue_depth_01",该指标将监控服务器内的queue中的请求个数,选中该指标后点击Apply确认。

11. 接下来我们设置触发服务器扩展的指标阈值,我们将阈值设置为150,再选择阈值类型"Gauge",表示扩展组将计算过去几分钟内的均值,再与150做对比,若大于150则触发扩展。设置完成后点击Save即可完成扩展组配置。

如何用Python SDK创建一个Instance Groups自动扩展组

以下是示例代码:

python 复制代码
from google.cloud import compute_v1
from google.protobuf import duration_pb2

# 配置参数
project_id = "your-project-id"  # 替换为你的GCP项目ID
zone = "us-central1-a"  # 替换为你希望部署实例的区域
instance_group_name = "example-instance-group"  # 实例组名称
template_name = "your-instance-template"  # 替换为你创建的实例模板名称
target_pool = None  # 如果你有目标池,指定名称,否则设置为None

# 创建实例组管理器
def create_instance_group_manager():
    instance_group_manager_client = compute_v1.InstanceGroupManagersClient()
    instance_group_manager = compute_v1.InstanceGroupManager(
        name=instance_group_name,
        instance_template=f"global/instanceTemplates/{template_name}",
        target_size=1,  # 初始实例数量
        base_instance_name="example-instance",
        zone=zone,
        target_pools=[f"projects/{project_id}/regions/{zone[:-2]}/targetPools/{target_pool}"] if target_pool else None,
    )
    operation = instance_group_manager_client.insert_unary(
        project=project_id, zone=zone, instance_group_manager_resource=instance_group_manager
    )
    operation.result()

# 设置自动扩展策略
def set_autoscaler():
    autoscaler_client = compute_v1.AutoscalersClient()
    scaling_policy = compute_v1.AutoscalingPolicy(
        cpu_utilization=compute_v1.AutoscalingPolicyCpuUtilization(
            utilization_target=0.7  # 70%的CPU使用率
        ),
        max_num_replicas=3,  # 最大实例数
        min_num_replicas=1,  # 最小实例数
        cool_down_period_sec=60,  # 冷却时间(秒)
    )
    autoscaler = compute_v1.Autoscaler(
        name=f"{instance_group_name}-autoscaler",
        target=f"projects/{project_id}/zones/{zone}/instanceGroupManagers/{instance_group_name}",
        autoscaling_policy=scaling_policy,
        zone=zone,
    )
    operation = autoscaler_client.insert_unary(
        project=project_id, zone=zone, autoscaler_resource=autoscaler
    )
    operation.result()

# 创建实例组管理器并设置自动扩展
create_instance_group_manager()
set_autoscaler()

print("Instance group and autoscaler created successfully.")

代码解释

  • 实例组管理器 : create_instance_group_manager() 函数用于创建一个新的实例组管理器(Instance Group Manager),它使用一个现有的实例模板来创建和管理实例。

  • 自动扩展策略 : set_autoscaler() 函数为实例组配置自动扩展策略。当CPU使用率超过70%时,自动扩展策略将增加实例数量,最多扩展至3个实例。当负载降低时,实例数量会减少到最小1个实例。

  • 冷却时间 : cool_down_period_sec 用于指定每次扩展或缩减操作后的冷却时间,以避免频繁的扩展和缩减操作。

以上就是在谷歌云GCP上对云资源监控并根据监控参数自动扩展服务器的全部步骤。欢迎大家关注零基础5分钟上手谷歌云系列,未来获取更多国际前沿的谷歌云GCP云开发/云架构方案!

相关推荐
数据工匠老o2 小时前
"能用应用层解决的不用存储过程",十年数据库经验总结
数据库·架构
FED_AF2 小时前
Linux运维“邪修”功法之通配符
linux·运维
弈栈录3 小时前
Java AI 应用的异步化与高并发设计
java·后端·架构
YOLO数据集集合3 小时前
风机叶片表面损伤检测数据集 | 风机叶片 表面损伤 污渍检测 无人机巡检 风电运维9119期
运维·人工智能·计算机视觉·目标跟踪·无人机·智慧城市·电力巡检
硅基手札3 小时前
【risc-v专栏 06b】内存架构深挖:PMA / ePMP / Cache / CMO / MMU 细节 / RVWMO 形式化
架构·risc-v
j7~3 小时前
【Linux网络编程】四十七.《Linux IO 模型详解:阻塞 IO、非阻塞 IO 与 IO 多路转接(select)》
linux·运维·网络·select·非阻塞io·阻塞io·i/o多路连接
分布式存储与RustFS3 小时前
用RustFS给Harbor当S3存储后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
泡海椒4 小时前
趋势分析报表:jquick-pdf折线图PDF生成实战
java·大数据·运维·服务器·前端·pdf
CAD开发小慧4 小时前
MFC工业软件换上4K屏后界面模糊?BCGControlBar Pro如何适配高DPI与多屏
架构
qwfy4 小时前
我要用 AI-native 架构,从零重建一套制造业 ERP/MES
vue.js·spring boot·架构