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

2024-08-23 06:20

本文主要是介绍零基础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服务器创建模板,用于自动扩容的服务器配置。

2. 将该Template模板命名为”autoscaling-instance01“,并选择资源为”Global“类型。

3. 点击”Advanced options“,为服务器添加MetaData元数据,”startup-script-url:gs://[YOUR_BUCKET_NAME]/startup.sh“和”gcs-bucket:gs://[YOUR_BUCKET_NAME]“,用于从Cloud Storage中获取开机启动脚本。

4. 接下来我们创建一个Instance Group,统一批量管理VM服务器

5. 为Instance Group命名为”autoscaling-instance-group-1“, template选择我们刚创建的”autoscaling-instance01“,资源类型选择”Single Zone“。

6. 为Instance Group配置区域,并关闭自动扩展,最后点击Create创建。

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

8. 接下来我们为instance groups配置自动扩展功能,回到instance groups界面,选中我们创建的”autoscaling-instance-group-1“,并点击Edit修改。

9. 我们将Autoscaling配置开启,设置扩展组的服务器个数范围为Min:1到Max:3,添加触发服务器自动扩展的指标”New Signal“,并选则”Cloud Monitoring metric new“,再点击Configre。

10.  点击”Select Metric“选择触发服务器扩展的指标,在搜索栏中搜索自定义指标”appdemo_queue_depth_01“,该指标将监控服务器内的queue中的请求个数,选中该指标后点击Apply确认。

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

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

以下是示例代码:

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云开发/云架构方案!

这篇关于零基础5分钟上手谷歌云GCP - 服务器自动扩展的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098598

相关文章

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

springboot上传zip包并解压至服务器nginx目录方式

《springboot上传zip包并解压至服务器nginx目录方式》:本文主要介绍springboot上传zip包并解压至服务器nginx目录方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录springboot上传zip包并解压至服务器nginx目录1.首先需要引入zip相关jar包2.然

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

mysql的基础语句和外键查询及其语句详解(推荐)

《mysql的基础语句和外键查询及其语句详解(推荐)》:本文主要介绍mysql的基础语句和外键查询及其语句详解(推荐),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录一、mysql 基础语句1. 数据库操作 创建数据库2. 表操作 创建表3. CRUD 操作二、外键

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字