自动化应用一致性 Amazon EBS 快照以支持 InterSystems IRIS 数据库
作者 Dimitri Restaino Behzad Dastur Eduard Lebedyuk Denton He 和 Regilo Souza日期 2024年3月12日类别 高级 (300) Amazon Elastic Block Store (Amazon EBS) AWS合作伙伴网络 数据库 集成与自动化 存储 技术实用指南
主要要点
介绍如何在 Amazon EC2 上为 InterSystems IRIS 数据库实现应用一致性快照。阐述利用 Amazon Data Lifecycle Manager (DLM) 自动化备份流程,降低人为误差风险。说明如何创建和验证 EBS 快照的应用一致性。InterSystems 是 AWS 合作伙伴网络 (APN) 的合作伙伴,提供云基础的数据平台,专为高吞吐量的应用优化,能够同时处理事务和多种分析任务,包括分析 SQL、商业规则和机器学习。用户利用 InterSystems IRIS 数据平台 快速开发和部署关键应用。InterSystems 建议用户考虑多个备份方法,例如 外部备份,这是备份整个数据库的推荐最佳实践。这是制定在这些数据库平台上运行的应用的可靠备份策略的关键部分。
用户在 AWS 上托管更高级别的 InterSystems 服务,这些服务基于 InterSystems IRIS for Health,如 InterSystems Health Connect、InterSystems FHIR Repository、InterSystems HealthShare Unified Care Record、InterSystems Patient Index、InterSystems Provider Directory 或 InterSystems IRIS,使用 Amazon Elastic Compute Cloud (Amazon EC2) 和 Amazon Elastic Block Store (Amazon EBS)。在实现数据保护需求的自定义工作流程中,用户通常需要花费大量时间和人力管理备份工作流的调度,增加了因人为错误导致错过快照和存储成本上升的风险。
在本文中,我们将概述用户如何创建运行在 EC2 实例上的 IRIS 外部备份,通过生成应用一致性的 Amazon EBS 快照。这些快照是在数据库冻结、暂停数据库写入后初始化的。您将学习如何通过创建简单的 Amazon 数据生命周期管理 策略和利用其 预脚本与后脚本自动化的支持 来自动化快照的创建、保留和管理。我们还已为 InterSystems IRIS 数据库的标准版本创建了包含预脚本和后脚本命令的 模板,您可以将其与 Amazon 数据生命周期管理器结合使用,以简化应用一致性快照的自动化过程。
解决方案概述
在之前的文章中,我们概述了如何 使用 Amazon 数据生命周期管理和自定义脚本创建应用一致性快照,包括创建使用 AWS Systems Manager Agent 在您的 EC2 实例上运行自定义脚本所需的步骤。在本文中,我们将在这些说明的基础上,为 InterSystems IRIS 数据库创建应用一致性快照。我们将概述如何自动化预脚本以暂停 I/O 和刷新磁盘缓冲,和后脚本以解冻 I/O,如下图所示:
先决条件
您必须在所有希望创建应用一致性 EBS 快照的实例上 安装 Systems Manager Agent,并确保该 Agent 正在运行。如果您使用的是 AWS 提供的这些 Amazon Machine Images (AMIs),那么 Systems Manager Agent 已经预装。您还必须 为所有 EC2 实例设置相关权限,以便 AWS Systems Manager 可以执行 Systems Manager 文档。确保用于您的 Amazon Data Lifecycle Manager 策略的 AWS 身份与访问管理 (IAM) 服务角色具有在目标 EC2 实例上运行 Systems Manager 文档的适当权限。最简单的方法是将 AWSDataLifecycleManagerSSMFullAccess IAM 策略附加到该 IAM 角色。如果您使用此角色,则必须为任何自定义 Systems Manager 文档添加 DLMScriptsAccesstrue 标签以便与此功能一起使用。
安易加速器苹果版接下来,您必须有代码能够冻结 IRIS 数据库使用 IRIS 的 ##Class(BackupGeneral)ExternalFreeze() API 类方法并刷新数据到磁盘预脚本,然后在快照初始化后解冻数据库通过使用 ##Class(BackupGeneral)ExternalThaw() API 类方法。您可以使用提供的 模板,或创建满足要求的自定义 AWS Systems Manager 文档 (SSM 文档)。请注意,确保代码能够在您的 IRIS 数据库上执行必要的操作是您的责任。如果代码无效,则创建的快照将不是应用一致性的。
操作指南
为了启用自定义的预脚本和后脚本自动化,请完成以下步骤:
1 创建一个 AWS Systems Manager 文档,执行冻结 I/O、刷新内存到磁盘,然后解冻 IRIS 数据库。该文档需要具备 必要字段,以便 Amazon Data Lifecycle Manager 能够触发操作。
2 创建一个 Amazon Data Lifecycle Manager 策略。该策略负责协调 Systems Manager 文档的执行、初始化快照、将快照标记为应用一致性,并管理其保留以及其他操作。
3 验证创建的快照是否为应用一致性。
第一步:创建 AWS Systems Manager 文档
1 登录到 Systems Manager 控制台,在导航窗格中选择 文档。
2 选择 创建文档 下拉框,然后选择 命令或会话。
3 填写 文档详细信息,并确保 文档类型 设置为 命令。在本示例中,文档名称为 InterSystemsIRISSnapshots。记住这个名称,因为您稍后在创建策略时必须使用相同的文档名称。
4 将您的预脚本和后脚本代码粘贴到 内容 部分的 YAML 中。您可以使用提供的 InterSystems IRIS 模板,或添加自定义代码。
在添加代码时,您必须确保存在 必要字段。Amazon Data Lifecycle Manager 依赖这些字段正确初始化预脚本和后脚本。否则,Amazon Data Lifecycle Manager 将无法创建应用一致性的 EBS 快照。
我们建议您通过修改 提供的 InterSystems Systems Manager 命令文档模板 来开始,而不是从头开始创建您自己的文档。InterSystems IRIS 模板的预脚本和后脚本部分在以下部分进一步说明。

请注意,确保代码能在您的数据库上执行必要操作是您的责任。如果代码不合法,则无法获得应用一致性的 EBS 快照。
如果您计划在创建应用一致性快照集时排除根卷和/或非根卷,请确保您提供的代码在适当的 EBS 卷上执行必要的步骤。
以下是用于冻结 InterSystems IRIS 的示例预脚本,您可以在模板中找到。作为 ExternalFreeze 命令的一部分,我们将 ExternalFreezeTimeOut 设置为 600 秒10 分钟,将 WDSuspendLimit 设置为 300 秒5 分钟。
bash
===============================================================================
MIT 许可证
原版权 (c) 2024 InterSystems
在此特此授权,免费向任何获得本软件及相关文档文件“软件”的人授予使用本软件的权限,无限制,包括但不限于使用、复制、修改、合并、发布、分发、再授权和/或出售本软件的副本,并允许向其提供本软件的人员这样做,且须遵守以下条件:
上述版权声明和本许可声明应包含在所有本软件的副本或重要部分中。
本软件按“现状”提供,不附任何类型的担保,包括但不限于对适销性、适用于特定目的和不侵权的担保。在任何情况下,作者或版权持有者不对因使用本软件或其它交易而产生的任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他相关责任。
===============================================================================
将所有待执行的预脚本动作添加到以下函数中
executeprescript() { echo INFO 开始执行预脚本
# 查找所有运行在 EC2 实例上的 InterSystems IRIS 实例irisinstances=(docker exec DOCKERNAME iris qall 2gt/dev/null tail n 3 grep up cut c5 awk {print 1})echo date 正在运行的 iris 实例 irisinstances# 仅针对正在运行的 InterSystems IRIS 实例for INST in irisinstances do echo date 尝试冻结 INST # 详细实例特定日志 LOGFILE=LOGDIR/INSTprepostlog # 检查冻结状态 docker exec DOCKERNAME irissession INST U SYS ##Class(BackupGeneral)IsWDSuspendedExt() freezestatus= if [ freezestatus eq 5 ] then echo date 错误 INST 已经被冻结 EXITCODE=204 else echo date INST 尚未被冻结 # 冻结 # 文档 https//docsintersystemscom/irislatest/csp/documatic/25CSPDocumaticclsLIBRARY=25SYSampCLASSNAME=BackupGeneral#ExternalFreeze DOCKEREXEC irissession INST U SYS ##Class(BackupGeneral)ExternalFreeze(LOGFILE600300) status= case status in 5) echo date INST 已被冻结 3) echo date INST 冻结失败 EXITCODE=201 ) echo date 错误 未知状态代码 status EXITCODE=201 esac echo date 完成冻结 INST fidoneecho date 预冻结脚本结束}
以下是用于解冻 I/O 并禁用自动解冻的 InterSystems IRIS 的示例后脚本,您可以在模板中找到:
bash
===============================================================================
MIT 许可证
原版权 (c) 2024 InterSystems
在此特此授权,免费向任何获得本软件及相关文档文件“软件”的人授予使用本软件的权限,无限制,包括但不限于使用、复制、修改、合并、发布、分发、再授权和/或出售本软件的副本,并允许向其提供本软件的人员这样做,且须遵守以下条件:
上述版权声明和本许可声明应包含在所有本软件的副本或重要部分中。
本软件按“现状”提供,不附任何类型的担保,包括但不限于对适销性、适用于特定目的和不侵权的担保。在任何情况下,作者或版权持有者不对因使用本软件或其它交易而产生的任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他相关责任。
===============================================================================
将所有待执行的后脚本动作添加到以下函数中
executepostscript() { echo INFO 开始执行后脚本
# 查找所有运行在 EC2 实例上的 InterSystems IRIS 实例irisinstances=(docker exec DOCKERNAME iris qall 2gt/dev/null tail n 3 grep up cut c5 awk {print 1})echo date 正在运行的 iris 实例 irisinstances# 仅针对正在运行的 InterSystems IRIS 实例for INST in irisinstances do echo date 尝试解冻 INST # 详细实例特定日志 LOGFILE=LOGDIR/INSTprepostlog # 检查冻结状态 DOCKEREXEC irissession INST U SYS ##Class(BackupGeneral)IsWDSuspendedExt() freezestatus= if [ freezestatus eq 5 ] then echo date INST 当前处于冻结状态 # 解冻 # 文档 https//docsintersystemscom/irislatest/csp/documatic/25CSPDocumaticclsLIBRARY=25SYSampCLASSNAME=BackupGeneral#ExternalFreeze DOCKEREXEC irissession INST U SYS ##Class(BackupGeneral)ExternalThaw(LOGFILE) status= case status in 5) echo date INST 已解冻 DOCKEREXEC irissession INST U SYS ##Class(BackupGeneral)ExternalSetHistory(LOGFILE) 3) echo date INST 解冻失败 EXITCODE=202 ) echo date 错误 未知状态代码 status EXITCODE=202 esac echo date 完成解冻 INST else echo date 错误 INST 已经解冻 EXITCODE=205 fidoneecho date 后解冻脚本结束}
5 然后,向该文档添加标签键 = DLMScriptsAccess ,值 = true,使策略能够通过 Systems Manager Agent 运行它使用默认 IAM 角色。根据需要向 Systems Manager 文档添加其他标签,然后选择 创建文档。
第二步:创建 Amazon Data Lifecycle Manager 策略
现在,我们创建 Amazon Data Lifecycle Manager 策略,以自动化创建和管理在预脚本和后脚本之间初始化