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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Go 使用Redis安装、实例和基本操作
  • Redis数据类型
  • 【cocos creator】2.x里,使用3D射线碰撞检测
  • 通过proxy和普通模式实现单例
  • 简单的jar包重打包Failed to get nested archive for entry 报错处理
  • 数学建模学习(116):全面解析梯度下降算法及其在机器学习中的应用与优化
  • 【JS】不使用BigInt实现大整数相加
  • 视频智能分析平台烟火检测视频安防监控烟火算法识别应用方案
  • mbedTLS生成客户端,服务端密钥及CA证书
  • 文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《基于多时空尺度特性的风电场物理-数据融合动态等值建模》
  • Qt/QML学习-Slider
  • iOS 通知
  • 笔记:Echarts柱状图 实现滚轮条 数据太多
  • 使用 java 将 excel 文件转 html、pdf ,以及 pdf 合并和拆分
  • 使用Node-RED实现和部署物联网入侵检测的机器学习管道
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • 0x05 Python数据分析,Anaconda八斩刀
  • android图片蒙层
  • jQuery(一)
  • Logstash 参考指南(目录)
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • mysql中InnoDB引擎中页的概念
  • nodejs调试方法
  • PhantomJS 安装
  • spark本地环境的搭建到运行第一个spark程序
  • springMvc学习笔记(2)
  • underscore源码剖析之整体架构
  • 包装类对象
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于遗传算法的优化问题求解
  • 简析gRPC client 连接管理
  • 使用Gradle第一次构建Java程序
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 使用Swoole加速Laravel(正式环境中)
  • 为什么要用IPython/Jupyter?
  • 一个JAVA程序员成长之路分享
  • 数据库巡检项
  • ​批处理文件中的errorlevel用法
  • ​一些不规范的GTID使用场景
  • # centos7下FFmpeg环境部署记录
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $(selector).each()和$.each()的区别
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (算法)大数的进制转换
  • (转)JAVA中的堆栈
  • (转)可以带来幸福的一本书
  • .Net 6.0--通用帮助类--FileHelper
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...