写点什么

利用 AWS Step Function 自动扩展 Redshift 集群

  • 2019-10-25
  • 本文字数:2944 字

    阅读完需:约 10 分钟

利用 AWS Step Function 自动扩展 Redshift 集群

谈到公有云如何帮助我们降低总体拥有成本,人们首先想到的会是:



    以上两点都非常正确,然而,托管化的服务充其量只能简化某个单独服务的运维工作,而在实际的运维场景中,我们时常会遇到更复杂的运维工作流,这些工作流通常会涉及到对多个系统组件的操作,并且需要有严格的先后流程控制、故障回滚及错误告警等功能。如果以人工的操作来执行这类工作流,操作步骤繁复不说,更有可能由于某个环节的人工操作失误,导致系统出现意外的故障。


    为此,AWS 云上提供了相关的工作流调度服务 Step Function,帮助我们把这类工作自动化,降低运维负担及人为引入的故障率。当然,Step Function 并不仅仅局限于运维工作的自动化,事实上,AWS Step Functions 让您能够使用可视工作流轻松协调分布式应用程序和微服务的组件。通过使用每个都能执行离散函数的单独组件构建应用程序,让您能够快速扩展和更改应用程序。


    本文以一个实际客户的应用场景出发,来介绍如何使用 Step Function 服务,自动化执行一个拥有多个步骤的工作流。

    场景介绍

    用户使用 DMS 服务将 Aurora 中的数据持续导入到 Redshift 中做后续的分析,随着数据量的增加,需要调整 Redshift 集群的大小来扩展存储的容量,由于 Redshift 集群在调整大小的过程中处于只读的模式,此时 DMS 服务对 Redshift 的增量写入会失败,比较好的做法是先停止 DMS 任务,等到 Redshift 集群调整完毕后再启动,除了通过人力定期观察 Redshift 磁盘的使用量,并在合适的时候调整 Redshift 集群的方式之外,有没有一种无人值守的方式来帮助我们实现自动化的运维工作呢?


    下面我们就介绍一种通过 AWS 服务实现上述需求的解决方案,整个方案除了可以保证完全自动化之外,还拥有如下好处:



      • CloudWatch 每个月前 10 个 Alarm 免费。

      • SNS 每个月前 100 万次调用免费。

      • Lambda 每个月前 100 万次调用免费。

      • Step Function 每个月前 4000 次状态流程转换免费。


      我们可以看到,通过更多地使用 AWS 提供的 Serverless 服务,不仅提高了整个系统的自动化程度,降低运维成本,并且在调用不频繁的场景中,能够实现整个方案零成本。


      下面我们来看一下整个解决方案的架构设计:



      下面是整个方案的工作流程:




        我们来看一下这个 Step Function 的状态机,整个流程十分直观,当状态机启动后,首先会停止正在进行增量备份的 DMS 任务,之后对 DMS 任务的目标 Redshift 集群做一个 Snapshot 快照,然后调整 Redshift 集群的大小,最后重新启动 DMS 任务。


        相关代码下载:


        https://github.com/iwasnobody/RedshiftResize


        下面介绍详细的配置过程。

        第一步 准备工作:

        1.获取 DMS 服务中,作为同步任务目标的 Redshift 的 Endpoints ARN。



        2.创建 Role 供 Step Function 及相关的 Lambda 使用。


        首先创建 LambdaAccessStepFuncRole,使得相关 Lambda 能够触发 Step Function 执行任务。






        通过相同的方式创建 ResizeRedshift_DMSRole,使得相关 Lambda 能够启停 DMS 任务,调整 Redshift 集群大小。



        其中,DMSFullAccess 不是系统内置的 Policy,需要自己创建,下面是该 Policy 的具体设置,即:允许对 DMS 的所有相关操作。



        通过相同的方式创建 ResizeRedshift_StepFuncRole,使得 Step Function 能够在执行的某个阶段调用 Lambda 执行相关任务。



        第二步 创建 Step Function 中需要调用的 Lambda 函数 ResizeRedshift_StopDMS。


        选择之前创建好的 ResizeRedshift_DMSRole。



        从 GitHub 上获取 ResizeRedshift_StopDMS.py 代码。



        设置 Lambda 执行的环境变量,其中:


        redshift_arn 是准备工作中获取的 DMS 任务目标 Redshift 的 Endpoints ARN。


        redshift_name 是 DMS 任务的目标 Redshift 集群名称。


        第三步 创建 Step Function 状态机。


        选择之前创建好的 ResizeRedshift_StepFuncRole。



        从 GitHub 上获取 StepFunction 代码,注意需要将代码中的 Lambda Arn 改写成上面创建好的 ResizeRedshift_StopDMS Lambda 函数的 Arn。



        创建触发 Step Function 状态机的 Lambda 函数 TriggerStepFunc,选择之前创建的 LambdaAccessStepFuncRole。



        从 GitHub 上获取 TriggerStepFunc 代码。



        设置 Lambda 执行的环境变量,其中:


        StepFuncArn 为 Step Function ResizeRedshift 的 Arn。


        第四步 创建 SNS Topic,用于触发刚刚创建的 TriggerStepFunc Lambda 函数。




        第五步 在 CloudWatch 中创建 Redshift 存储容量的告警。


        选择相关 Redshift 集群的 PercentageDiskSpaceUsed。



        这里配置当已使用存储大于 80%时,触发告警。



        设置告警触发的时候,向已经创建的 SNS 发送消息。


        第六步 测试整个流程:

        1.进入 SNS,选择手工向 SNS 发送消息,具体的消息内容不重要。




        1. 在 Step Function 界面能够看到触发了新的状态机执行。




        1. 通过 DMS 界面,我们可以看到 DMS 任务已经被停止,在 Redshift 界面,我们可以查看集群扩展的状态。




        1. 等到状态机执行成功后,可以看到 DMS 任务被重新启动,并且 Redshift 集群的规模扩展了 1 倍。





        注意事项:


        1. 由于 Redshift 在调整集群的过程中处于 read only 模式,无法写入新的数据,此时 DMS 无法将 Aurora 的增量更新同步到 Redshfit 中,所以需要停止 DMS 任务,等到 Redshift 集群调整完成后再重新启动 DMS 任务。

        2. DMS 任务停止期间,Aurora 的增量更新保存在 binlog 中,需要确保 binlog 在 Aurora 中的保存时间大于 DMS 任务停止的时间,下图展示了如何将 binlog 的保存时间设为 24h。



        3.具体 binlog 的保存时间设为多长取决于 Redshift 当前的集群规模和数据量,建议如果当前集群规模及数据量较大的情况下,通过 Snapshot 镜像创建测试集群,手工调整测试集群的规模实际测试大致需要的时间。



        4. 如果希望能够在特定的维护时间窗口调整 Redshift 集群的规模,可以通过 SNS 发送邮件的方式通知运维人员,然后在特定时间手工触发 Step Function 来实现。


        作者介绍:


        余骏


        亚马逊 AWS 解决方案架构师,负责基于 AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内的应用和推广。对应用容器化,微服务框架和应用等有浓厚的兴趣。在加入 AWS 之前,在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。


        本文转载自 AWS 技术博客。


        原文链接:


        https://amazonaws-china.com/cn/blogs/china/aws-step-function-widen-auto-redshift/


        2019-10-25 08:001444

        评论

        发布
        暂无评论
        发现更多内容

        DNA序列分析软件 SnapGene 5破解版含SnapGene5激活工具 mac/win

        Rose

        如何判断IP地址属于住宅IP还是机房IP

        IPIDEA全球HTTP

        代理IP

        TiKV Raft 快照全流程丨TiKV 源码解读(二十二)

        PingCAP

        数据库 TiKV 源码解读 TiKV

        沧州杨埕水库:创建巡检“二维码”,为安全管理赋能

        草料二维码

        安全管理 设备管理 草料二维码 设备巡检二维码 设备巡检系统

        ETL数据集成丨将GreenPlum数据同步至Doris数仓

        RestCloud

        Doris greenplum 数据同步 ETL 数据集成工具

        淘宝天猫商品详情API:商品参数对比与选择

        技术冰糖葫芦

        API api 货币化 API 文档 API 测试

        软件测试学习笔记丨BlueOcean 安装与使用

        测试人

        软件测试

        腾讯云联合中科软发布 “保险行业一体化大数据解决方案” 共筑保司数据基座

        腾讯云大数据

        腾讯云 wedata

        【Java】Jsoup 解析HTML报告

        不在线第一只蜗牛

        Java html

        AI大模型在业务受理的智能化实践和探索

        鲸品堂

        运营商 大模型 企业服务大模型

        一键登录,打造华为账号便捷新体验

        HarmonyOS SDK

        HarmonyOS

        淘宝商品详情API深度解读:商品标签与分类的洞察

        代码忍者

        API API 文档 API 测试

        一文弄懂Go语言的Context包,值得收藏!

        左诗右码

        Go

        【YashanDB知识库】自关联外键插入数据时报错:YAS-02033 foreign key constraint violated parent key not found

        YashanDB

        yashandb 崖山数据库 崖山DB

        Web3 游戏周报(7.28 - 8.03)

        Footprint Analytics

        链游

        2025第十三届中国电子信息博览会(CITE深圳电子展)

        AIOTE智博会

        电子展 深圳电子展 电子信息展

        跨平台数据同步:京东商品详情API的多平台支持

        技术冰糖葫芦

        api 货币化 API 文档 API 测试 pinduoduo API

        电车风噪大?巧妙利用空气动力学和仿真技术,解决风噪影响

        Altair RapidMiner

        汽车 仿真 汽车仿真 altair 新能源车

        最佳实践:基于腾讯云 ES 的机器学习功能,实现一站式 NLP 语义聚合

        腾讯云大数据

        ES

        打印报表--客户订单打印报表

        小智数据

        小智开源报表 小智报表常见示例 纯前端js报表控件 类excel样式报表 客户订单打印报表

        会声会影发光字体制作 会声会影字体怎么淡化退出 视频剪辑制作教程

        阿拉灯神丁

        字幕 会声会影2023 视频剪辑软件下载 视频剪辑软件

        OpenTiny HUICharts 正式开源发布,一个简单、易上手的图表组件库

        OpenTiny社区

        Vue js eCharts OpenTiny

        蔚来汽车 x TiDB丨单表超 20 亿条数据,从 MySQL 到 TiDB 的迁移思考与实践

        PingCAP

        MySQL TiDB 蔚来

        TCL 实业 x TiDB丨从分销转向零售,如何考虑中台建设和数据库选型?

        PingCAP

        TCL 营销中台 实业

        3个办公网站,助你又快又好地搞定工作总结ppt!

        彭宏豪95

        效率工具 职场 PPT 效率办公 AI生成PPT

        利用 AWS Step Function 自动扩展 Redshift 集群_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章