配置 Azure-SSIS 集成运行时以实现业务连续性和灾难恢复 (BCDR)
适用于:Azure 数据工厂 Azure Synapse Analytics
Azure 数据工厂 (ADF) 或 Synapse Pipelines 中的 Azure SQL 数据库/托管实例和 SQL Server Integration Services (SSIS) 可以组合为 SQL Server 迁移的全套平台即服务 (PaaS) 解决方案。 可以将 SSIS 项目部署到 Azure SQL 数据库/托管实例托管的 SSIS 目录数据库 (SSISDB) 中,并在 ADF 或 Synapse Pipelines 中的 Azure SSIS Integration Runtime (IR) 上运行 SSIS 包。
为实现业务连续性和灾难恢复 (BCDR),可以使用异地复制/故障转移组来配置 Azure SQL 数据库/托管实例,其中,具有读写访问权限(主要角色)的主要 Azure 区域中的 SSISDB 会持续复制到具有只读访问权限(辅助角色)的次要区域。 当主要区域发生灾难时,将触发故障转移,主要和辅助 SSISDB 将在其中交换角色。
对于 BCDR,还可以配置与 Azure SQL 数据库/托管实例故障转移组同步运行的双重备用 Azure SSIS IR 对。 这允许你有一对在任何给定时间运行的 Azure-SSIS IR,只有一个可以访问主要 SSISDB 来提取和执行包,并写入包执行日志(主要角色),而另一个则只能对部署在其他位置的包执行相同操作,例如,在 Azure 文件存储中(辅助角色)。 发生 SSISDB 故障转移时,主要和辅助 Azure-SSIS IR 还将交换角色,如果两者都在运行,那么停机时间近乎为零。
本文介绍如何在 BCDR 的 Azure SQL 数据库/托管实例故障转移组中配置 Azure-SSIS IR。
使用 Azure SQL 数据库故障转移组配置双重备用 Azure-SSIS IR 对
若要配置与 Azure SQL 数据库故障转移组同步运行的双重备用 Azure-SSIS IR 对,请完成以下步骤。
使用 Azure 门户/ADF UI,你可以创建一个带有主要 Azure SQL 数据库服务器的新 Azure-SSIS IR,以在主要区域中托管 SSISDB。 如果现有 Azure-SSIS IR 已附加到 Azure SQL 数据库服务器托管的 SSIDB,并且仍在运行,则需要先将其停止才能重新配置它。 这将是主要 Azure-SSIS IR。
在“集成运行时设置”窗格的“部署设置”页上选择使用 SSISDB时,请选中“结合使用双重备用 Azure-SSIS Integration Runtime 对和 SSISDB 故障转移”复选框。 对于“双重备用对名称”,请输入一个名称以标识主要和辅助 Azure-SSIS IR 对。 完成主要 Azure-SSIS IR 的创建后,它将启动并附加到主要 SSISDB,该 SSISDB 将以你的身份创建,具有读写访问权限。 如果刚重新配置了它,则需要重新启动。
使用 Azure 门户,可以检查是否已在主 Azure SQL 数据库服务器的“概述”页上创建了主要 SSISDB。 创建后,可以在“故障转移组”页上为主要和辅助 Azure SQL 数据库服务器创建故障转移组,并向其添加 SSISDB。 创建故障转移组后,可以检查是否已在辅助 Azure SQL 数据库服务器的“概述”页上将主要 SSISDB 复制到具有只读访问权限的辅助 SSISDB。
使用 Azure 门户/ADF UI,你可以通过辅助 Azure SQL 数据库服务器创建另一个 Azure-SSIS IR 来托管次要区域中的 SSISDB。 这将是你的辅助 Azure-SSIS IR。 对于完整的 BCDR,请确保还会在次要区域中创建它所依赖的所有资源,例如,用于存储自定义安装程序脚本/文件的 Azure 存储、用于业务流程/计划包执行的 ADF 等。
在“集成运行时设置”窗格的“部署设置”页上选择使用 SSISDB时,请选中“结合使用双重备用 Azure-SSIS Integration Runtime 对和 SSISDB 故障转移”复选框。 对于“双重备用对名称”,请输入相同名称以标识主要和辅助 Azure-SSIS IR 对。 完成辅助 Azure-SSIS IR 的创建后,它将启动并附加到辅助 SSISDB。
如果希望在发生 SSISDB 故障转移时停机时间近乎零,请将两个 Azure SSIS IR 保持运行状态。 只有主要 Azure-SSIS IR 可以访问主要 SSISDB 来提取和执行包,还可以写入包执行日志,而辅助 Azure-SSIS IR 只能对部署在其他位置的包(例如在 Azure 文件存储中)执行相同操作。
如果要最大程度地降低运行成本,可以在创建辅助 Azure-SSIS IR 后将其停止。 发生 SSISDB 故障转移时,主要和辅助 Azure-SSIS IR 将交换角色。 如果主要 Azure-SSIS IR 停止,则需要重新启动它。 根据它是否注入到虚拟网络和使用的注入方法,运行时间在 5 分钟或 20 - 30 分钟左右。
如果使用用于业务流程/计划包执行的 ADF,请确保所有带有执行 SSIS 包活动和关联触发器的相关 ADF 管道都复制到辅助 ADF(触发器最初处于禁用状态)。 发生 SSISDB 故障转移时,需要启用它们。
你可以测试 Azure SQL 数据库故障转移组,并在 ADF 门户中查看 Azure-SSIS IR 监视页,无论主要和辅助 Azure SSIS IR 是否已交换角色。
使用 Azure SQL 托管实例故障转移组配置双重备用 Azure-SSIS IR 对
若要配置与 Azure SQL 托管实例故障转移组同步运行的双重备用 Azure-SSIS IR 对,请完成以下步骤。
使用 Azure 门户,可以在主要 Azure SQL 托管实例的“故障转移组”页上为主要和辅助 Azure SQL 托管实例创建故障转移组。
使用 Azure 门户/ADF UI,你可以创建一个带有主要 Azure SQL 托管实例的新 Azure-SSIS IR,以在主要区域中托管 SSISDB。 如果现有 Azure-SSIS IR 已附加到 Azure SQL 托管实例托管的 SSIDB,并且仍在运行,则需要先将其停止才能重新配置它。 这将是主要 Azure-SSIS IR。
在“集成运行时设置”窗格的“部署设置”页上选择使用 SSISDB时,请选中“结合使用双重备用 Azure-SSIS Integration Runtime 对和 SSISDB 故障转移”复选框。 对于“双重备用对名称”,请输入一个名称以标识主要和辅助 Azure-SSIS IR 对。 完成主要 Azure-SSIS IR 的创建后,它将启动并附加到主要 SSISDB,该 SSISDB 将以你的身份创建,具有读写访问权限。 如果刚重新配置了它,则需要重新启动。 还可以检查是否已在辅助 Azure SQL 托管实例的“概述”页上将主要 SSISDB 复制到具有只读访问权限的辅助 SSISDB。
使用 Azure 门户/ADF UI,你可以通过辅助 Azure SQL 托管实例创建另一个 Azure-SSIS IR 来托管次要区域中的 SSISDB。 这将是你的辅助 Azure-SSIS IR。 对于完整的 BCDR,请确保还会在次要区域中创建它所依赖的所有资源,例如,用于存储自定义安装程序脚本/文件的 Azure 存储、用于业务流程/计划包执行的 ADF 等。
在“集成运行时设置”窗格的“部署设置”页上选择使用 SSISDB时,请选中“结合使用双重备用 Azure-SSIS Integration Runtime 对和 SSISDB 故障转移”复选框。 对于“双重备用对名称”,请输入相同名称以标识主要和辅助 Azure-SSIS IR 对。 完成辅助 Azure-SSIS IR 的创建后,它将启动并附加到辅助 SSISDB。
Azure SQL 托管实例可以通过使用数据库主密钥 (DMK) 加密数据库中的敏感数据(例如 SSISDB)来保护这些数据。 默认情况下,DMK 本身使用服务主密钥 (SMK) 进行加密。 从 2021 年 9 月开始,在创建故障转移组期间,SMK 将从主 Azure SQL 托管实例复制到辅助实例。 如果你的故障转移组是在此日期之前创建的,请从辅助 Azure SQL 托管实例中删除所有用户数据库(包括 SSISDB),然后重新创建故障转移组。
如果希望在发生 SSISDB 故障转移时停机时间近乎零,请将两个 Azure SSIS IR 保持运行状态。 只有主要 Azure-SSIS IR 可以访问主要 SSISDB 来提取和执行包,还可以写入包执行日志,而辅助 Azure-SSIS IR 只能对部署在其他位置的包(例如在 Azure 文件存储中)执行相同操作。
如果要最大程度地降低运行成本,可以在创建辅助 Azure-SSIS IR 后将其停止。 发生 SSISDB 故障转移时,主要和辅助 Azure-SSIS IR 将交换角色。 如果主要 Azure-SSIS IR 停止,则需要重新启动它。 根据它是否注入到虚拟网络和使用的注入方法,运行时间在 5 分钟或 20 - 30 分钟左右。
如果使用 Azure SQL 托管实例代理进行业务流程/计划包执行,请确保将所有相关的 SSIS 作业及其作业步骤和关联的计划都复制到辅助 Azure SQL 托管实例(这些计划最初处于禁用状态)。 使用 SSMS 完成以下步骤。
对于每个 SSIS 作业,右键单击并选择“将作业脚本撰写为”、“创建到”以及“新建查询编辑器窗口”下拉菜单项来生成脚本。
对于每个生成的 SSIS 作业脚本,查找用于执行
sp_add_job
存储过程的命令,并根据需要修改/删除@owner_login_name
参数的赋值。对于每个更新的 SSIS 作业脚本,请在辅助 Azure SQL 托管实例上运行该脚本,以复制该作业及其作业步骤和关联的计划。
使用以下脚本创建新的 T-SQL 作业,以在主要和辅助 Azure SQL 托管实例中基于主要/辅助 SSISDB 角色分别启用/禁用 SSIS 作业计划,并定期运行。 发生 SSISDB 故障转移时,将启用禁用的 SSIS 作业计划,反之亦然。
IF (SELECT Top 1 role_desc FROM SSISDB.sys.dm_geo_replication_link_status WHERE partner_database = 'SSISDB') = 'PRIMARY' BEGIN IF (SELECT enabled FROM msdb.dbo.sysschedules WHERE schedule_id = <ScheduleID>) = 0 EXEC msdb.dbo.sp_update_schedule @schedule_id = <ScheduleID >, @enabled = 1 END ELSE BEGIN IF (SELECT enabled FROM msdb.dbo.sysschedules WHERE schedule_id = <ScheduleID>) = 1 EXEC msdb.dbo.sp_update_schedule @schedule_id = <ScheduleID >, @enabled = 0 END
如果使用用于业务流程/计划包执行的 ADF,请确保所有带有执行 SSIS 包活动和关联触发器的相关 ADF 管道都复制到辅助 ADF(触发器最初处于禁用状态)。 发生 SSISDB 故障转移时,需要启用它们。
你可以测试 Azure SQL 托管实例故障转移组,并在 ADF 门户中查看 Azure-SSIS IR 监视页,无论主要和辅助 Azure SSIS IR 是否已交换角色。
将新 Azure-SSIS IR 附加到 Azure SQL 数据库/托管实例所托管的现有 SSISDB 中
如果发生灾难影响现有 Azure-SSIS IR,但不影响同一区域中的 Azure SQL 数据库/托管实例,则可以将其替换为另一个区域中的新 Azure-SSIS IR。 若要将 Azure SQL 数据库/托管实例托管的现有 SSISDB 附加到新 Azure-SSIS IR,请完成以下步骤。
如果现有 Azure-SSIS IR 仍在运行,则需要先使用 Azure 门户/ADF UI 或 Azure PowerShell 停止它。 如果灾难还影响同一区域中的 ADF,则可以跳过此步骤。
使用 SSMS,对 Azure SQL 数据库/托管实例中的 SSISDB 运行以下命令,以更新将允许来自新 ADF/Azure-SSIS IR 的连接的元数据。
EXEC [catalog].[failover_integration_runtime] @data_factory_name = 'YourNewADF', @integration_runtime_name = 'YourNewAzureSSISIR'
使用 Azure 门户/ADF UI 或 Azure PowerShell,在另一个区域中分别创建名为 YourNewADF/YourNewAzureSSISIR 的新 ADF/Azure-SSIS IR。 如果使用 Azure 门户/ADF UI,则可以忽略“集成运行时设置”窗格的“部署设置”页上的测试连接错误。
相关内容
可以考虑 Azure-SSIS IR 的以下其他配置选项: