使用 Amazon FSx 为 SQL Server Always On FCI 设置多可用区基础设施 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon FSx 为 SQL Server Always On FCI 设置多可用区基础设施

由 Manish Garg (AWS)、T.V.R.L.Phani Kumar Dadi (AWS)、Nishad Mankar (AWS) 和 RAJNEESH TYAGI (AWS) 编写

代码存储库:aws-windows-failover-cluster-自动

环境:PoC 或试点

来源:本地 Microsoft SQL Server 数据库

目标: EC2 上的 Microsoft SQL Server

R 类型:更换主机

工作负载:Microsoft

技术:迁移;基础架构; DevOps

Amazon Web Services: AWS Managed Microsoft AD;Amazon EC2;Amazon FSx;AWS Systems Manager

Summary

如果您需要快速迁移大量 Microsoft SQL Server Always On 失效转移群集实例 (FCI),此模式可以帮助您最大限度地缩短配置时间。通过使用自动化和 适用于 Windows File Server 的 Amazon FSx,它可以减少手动工作、人为错误以及部署大量集群所需时间。

这种模式在 Amazon Web Services (AWS) 的多可用区(多可用区)部署中为 SQL Server FCI 设置基础设施。使用 AWS CloudFormation 模板可以自动配置该基础设施所需的 AWS 服务。使用命令在亚马逊弹性计算云 (Amazon EC2) 实例上安装 SQL Server 和创建集群节点是通过 PowerShell 命令执行的。

该解决方案使用高可用性多可用区 Amazon FSx for Windows 文件系统作为存储 SQL Server 数据库文件的共享见证。托管 SQL Server 的 Amazon FSx 文件系统和 EC2 Windows 实例加入到同一个 AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD) 域。

先决条件和限制

先决条件

  • 一个有效的 Amazon Web Services account

  • 具有足够权限的 AWS 用户,可以使用 AWS CloudFormation 模板配置资源

  • AWS Directory Service for Microsoft Active Directory

  • AWS Secrets Manager 中用于向键值对中的 AWS Managed Microsoft AD 进行身份验证的凭证:

    • ADDomainName: <域名>

    • ADDomainJoinUserName: <域用户名>

    • ADDomainJoinPassword:<域用户密码>

    • TargetOU: <目标 OU 值>

    注意:在 AWS Systems Manager Automation 中,您将在 AWS 托管 Microsoft AD 加入活动中使用相同的密钥名称。

  • 用于创建 SQL Server 安装和 Windows 服务或域账户的 SQL Server 媒体文件,这些文件将在集群创建期间使用

  • 虚拟私有云(VPC),具有位于不同可用区的两个公有子网、可用区中的两个私有子网、一个互联网网关、NAT 网关、路由表关联和一个跳转服务器

产品版本

  • Windows Server 2012 R2 和 Microsoft SQL Server 2016

架构

源技术堆栈

  • 本地 SQL Server 与 FCI 使用共享驱动程序

目标技术堆栈

  • AWS EC2 实例

  • 适用于 Windows File Server 的 Amazon FSx

  • AWS Systems Manager Automation 运行手册

  • 网络配置(VPC、子网、互联网网关、NAT 网关、跳转服务器、安全组)

  • AWS Secrets Manager

  • AWS 托管的 Microsoft AD

  • Amazon EventBridge

  • AWS Identity and Access Management (IAM)

目标架构

下图显示了单个 AWS 区域中的 Amazon Web Services account,其 VPC 包括两个可用区、两个带 NAT 网关的公有子网、第一个公有子网中的跳转服务器、两个私有子网,每个子网都有一个用于 SQL 的 EC2 实例 节点安全组中的服务器节点以及连接到每个 SQL Server 节点的 Amazon FSx 文件系统。还包括 AWS Directory Service EventBridge、亚马逊、AWS Secrets Manager 和 AWS Systems Manager。

多可用区架构,资源位于公有子网和私有子网中,并带有节点安全组。

自动化和扩缩

  • 您可以使用 AWS Systems Manager 加入 AWS 托管 Microsoft AD 并执行 SQL Server 安装。

工具

Amazon Web Services

  • AWS CloudFormation 可帮助您设置 AWS 资源,快速一致地配置这些资源,并在 AWS 账户和区域的整个生命周期中对其进行管理。

  • AWS Directory Service 提供多种方式将 Microsoft Active Directory (AD) 与其他 Amazon Web Services 结合使用,例如 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Relational Database Service (Amazon RDS) for SQL Server 和适用于 Windows File Server 的 Amazon FSx。

  • Amazon Elastic Compute Cloud (Amazon EC2) 在 Amazon Web Services Cloud 中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器,并快速扩展或缩减它们。

  • Amazon EventBridge 是一项无服务器事件总线服务,可帮助您将应用程序与来自各种来源的实时数据连接起来。例如,AWS Lambda 函数、使用 API 目标的 HTTP 调用端点或其他 Amazon Web Services account 中的事件总线。

  • AWS Identity and Access Management (AWS IAM) 通过控制验证和授权使用您 AWS 资源的用户,帮助您安全地管理对您 AWS 资源的访问。

  • AWS Secrets Manager 帮助您将代码中的硬编码凭证(包括密码)替换为对 Secrets Manager 的 API 调用,以便以编程方式检索密钥。

  • AWS Systems Manager 可帮助您管理在 Amazon Web Services Cloud 中运行的应用程序和基础设施。它简化了应用程序和资源管理,缩短了检测和解决操作问题的时间,并帮助您大规模安全地管理 AWS 资源。

其他工具

  • PowerShell是一款在 Windows、Linux 和 macOS 上运行的微软自动化和配置管理程序。此模式使用 PowerShell 脚本。

代码存储库

此模式的代码可在 GitHub aws-windows-failover-cluster-automat ion存储库中找到。

最佳实践

操作说明

任务描述所需技能

部署 Systems Manager CloudFormation 堆栈。

  1. 登陆您的 Amazon Web Services account,然后打开 AWS 管理控制台。

  2. 导航到 CloudFormation 控制台,然后通过上传ssm.yaml模板创建 System CloudFormation s Manager 堆栈。为以下参数提供值:

    • StateUnJoinAssociationLoggingBucketName— 提供模板将为记录目的而创建的 S3 存储桶的名称。

    • SSMAssociationAd UnjoinName — 提供资源的名称。AWS::SSM::Association

    • SSM AutomationDocumentName — 为 S ystems Manager 自动化运行手册提供一个名称。

    • EventBridgeName— 提供 EventBridge 活动总线的名称。

  3. 通过启动ssm.yaml CloudFormation 模板来部署 Systems Manager CloudFormation 堆栈。该模板将创建 Systems Manager Atomation 运行手册,该运行手册将在带有标签的新 EC2 实例 ADJoined: FSXADD 启动时启动。自动化运行手册将在 AWS Managed Microsoft AD 目录中添加此实例。

AWS DevOps, DevOps 工程师

部署基础设施堆栈。

成功部署 Systems Manager 堆栈后,创建 infra 堆栈,其中包括 EC2 实例节点、安全组、适用于 Windows File Server 的 Amazon FSx 文件系统和 IAM 角色。

  1. 导航到 CloudFormation 控制台并启动infra-cf.yaml模板。若要部署此堆栈,必需参数:

    • ActiveDirectoryId — AWS 托管的 Microsoft AD ID

    • ADDnsIpAddresses1 — AWS 托管的 Microsoft AD 的主要 DNS IP 地址

    • ADDnsIpAddresses2 — AWS 托管的 Microsoft AD 的辅助 DNS IP 地址

    • FSxSecurityGroupName — Amazon FSx 安全组名称

    • FSxWindowsFileSystemName — Amazon FSx 驱动器名称

    • ImageID — 用于创建 SQL Server 实例节点的基本 Windows 2012 R2 镜像或亚马逊机器映像(AMI)的 ID

    • KeyPairName — 要附加到 EC2 实例节点以进行访问的键值对

    • Node1SecurityGroupName — 第一个节点安全组的名称

    • Node2SecurityGroupName — 第二个节点安全组的名称

    • OUSecretName — 包含 AWS 托管的 Microsoft AD 信息的机密名称

    • PrivateSubnet1 — 第一个私有子网的 ID

    • PrivateSubnet2 — 第二个私有子网的 ID

    • SqlFSxFCIName — 应用于主节点和辅助节点以及 Amazon FSx 的标签名称。

    • SqlFSxServerNetBIOSName1 — 主 EC2 实例节点的名称(最多 15 个字符)

    • SqlFSxServerNetBIOSName2 — 辅助 EC2 实例节点的名称(最多 15 个字符)

    • VPC — VPC ID

    • WorkloadInstanceType — EC2 实例类型

    部署 infra 堆栈。该堆栈将创建设置 Windows SQL Server FCI 所需所有基础结构组件。

  2. EC2 实例节点启动后,将调用 Systems Manager Automation 文档将这些实例加入 AWS Managed Microsoft AD。您可以在 Systems Manager 控制台的自动化页面上跟踪进度。

AWS DevOps, DevOps 工程师
任务描述所需技能

安装 Windows 工具。

  1. 登录主 EC2 实例,即节点 1。要安装 Windows 功能(Active Directory 和 FCI 工具),请运行以下 PowerShell 脚本。

    Install-WindowsFeature -Name RSAT-AD-Powershell,Failover-Clustering -IncludeManagementTools Install-WindowsFeature -Name RSAT-Clustering,RSAT-ADDS-Tools,RSAT-AD-Powershell,RSAT-DHCP,RSAT-DNS-Server
  2. 登录节点 2 的辅助 EC2 实例,然后运行相同的脚本,以启用节点 2 上的功能。

AWS DevOps, DevOps 工程师,数据库管理员

在 Active Directory 域服务中预存集群计算机的对象。

要在 Active Directory 域服务 (AD DS) 中预存集群名称对象 (CNO) 并为集群角色预留虚拟计算机对象 (VCO),请按照 Windows Server 文档中的说明进行操作。

AWS DevOps、数据库管理员、工程师 DevOps

创建 WSFC。

要创建 Windows Server Failover Clustering (WSFC) 集群,请执行以下操作:

  1. 登录主 EC2 实例,即节点 1。若要创建 Amazon FSx 文件共享并授予对列出的 AD 服务账户的完全访问权限,请运行以下代码。

    Invoke-Command -ComputerName "<FSx Windows Remote PowerShell Endpoint>" -ConfigurationName FSxRemoteAdmin -scriptblock { New-FSxSmbShare -Name "SQLDB" -Path "D:\share" -Description "SQL Databases Share" -ContinuouslyAvailable $true -FolderEnumerationMode AccessBased -EncryptData $true grant-fsxsmbshareaccess -name SQLDB -AccountName "<domain\user>" -accessRight Full }

    此命令还将创建持续可用 (CA) 文件共享,该共享已针对 Microsoft SQL Server 使用进行优化。

  2. 要在主实例(节点 1)上创建失效转移群集,请运行以下命令。

    New-Cluster -Name <CNO Name> -Node  <Node1 Name>, <Node2 Name> -StaticAddress <Node1 Secondary Private IP>, <Node2 Secondary Private IP>

    命令需要使用以下参数:

    • Name — 集群 (CNO) 的名称。

    • Node — 分别是主节点和辅助节点的名称

    • StaticAddress — 分别是主节点和辅助节点的辅助 IP 地址

    重要提示:域管理员或普通用户必须对两个节点都具有管理员权限才能创建 Windows Server Failover Clustering (WSFC) 集群。否则,前面的命令将失败并返回消息 You do not have administrator privilege on servers

  3. 集群创建后,运行以下命令,以附加文件共享见证。

    Set-ClusterQuorum -FileShareWitness \\<FSx Windows Remote PowerShell Endpoint>\share\witness
AWS DevOps、数据库管理员、工程师 DevOps

安装 SQL Server 失效转移群集。

设置 WSFC 集群后,在主实例 (节点 1) 上安装 SQL Server 集群。

  1. 在两个节点上的 T 盘中,创建 tempdb log 文件夹。 PowerShell 命令中使用文件夹。

  2. 在两个节点上复制用于安装 SQL Server 的 SQL Server 媒体文件后,在节点 1 上运行以下 PowerShell 命令,在节点 1 上安装 SQL Server。

D:\setup.exe /Q ` /ACTION=InstallFailoverCluster ` /IACCEPTSQLSERVERLICENSETERMS ` /FEATURES="SQL,IS,BC,Conn" ` /INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server” ` /INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server" ` /RSINSTALLMODE="FilesOnlyMode" ` /INSTANCEID="MSSQLSERVER" ` /INSTANCENAME="MSSQLSERVER" ` /FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)" ` /FAILOVERCLUSTERIPADDRESSES="IPv4;<2nd Sec Private Ip node1>;Cluster Network 1;<subnet mask>" ` /FAILOVERCLUSTERNETWORKNAME="<Fail over cluster Network Name>" ` /INSTANCEDIR="C:\Program Files\Microsoft SQL Server" ` /ENU="True" ` /ERRORREPORTING=0 ` /SQMREPORTING=0 ` /SAPWD=“<Domain User password>” ` /SQLCOLLATION="SQL_Latin1_General_CP1_CI_AS" ` /SQLSYSADMINACCOUNTS="<domain\username>" ` /SQLSVCACCOUNT="<domain\username>" /SQLSVCPASSWORD="<Domain User password>" ` /AGTSVCACCOUNT="<domain\username>" /AGTSVCPASSWORD="<Domain User password>" ` /ISSVCACCOUNT="<domain\username>" /ISSVCPASSWORD="<Domain User password>" ` /FTSVCACCOUNT="NT Service\MSSQLFDLauncher" ` /INSTALLSQLDATADIR="\\<FSX DNS name>\share\Program Files\Microsoft SQL Server" ` /SQLUSERDBDIR="\\<FSX DNS name>\share\data" ` /SQLUSERDBLOGDIR="\\<FSX DNS name>\share\log" ` /SQLTEMPDBDIR="T:\tempdb" ` /SQLTEMPDBLOGDIR="T:\log" ` /SQLBACKUPDIR="\\<FSX DNS name>\share\SQLBackup" ` /SkipRules=Cluster_VerifyForErrors ` /INDICATEPROGRESS
AWS DevOps、数据库管理员、工程师 DevOps

向集群添加一个辅助节点。

要将 SQL Server 添加到辅助节点(节点 2),请运行以下PowerShell 命令。

D:\setup.exe /Q ` /ACTION=AddNode ` /IACCEPTSQLSERVERLICENSETERMS ` /INSTANCENAME="MSSQLSERVER" ` /FAILOVERCLUSTERGROUP="SQL Server (MSSQLSERVER)" ` /FAILOVERCLUSTERIPADDRESSES="IPv4;<2nd Sec Private Ip node2>;Cluster Network 2;<subnet mask>" ` /FAILOVERCLUSTERNETWORKNAME="<Fail over cluster Network Name>" ` /CONFIRMIPDEPENDENCYCHANGE=1 ` /SQLSVCACCOUNT="<domain\username>" /SQLSVCPASSWORD="<Domain User password>" ` /AGTSVCACCOUNT="domain\username>" /AGTSVCPASSWORD="<Domain User password>" ` /FTSVCACCOUNT="NT Service\MSSQLFDLauncher" ` /SkipRules=Cluster_VerifyForErrors ` /INDICATEPROGRESS
AWS DevOps、数据库管理员、工程师 DevOps

测试 SQL Server FCI。

  1. 在其中一个节点的 Windows 实例上,在管理工具中启动失效转移群集管理器

  2. 导航到节点,确认节点状态为运行状态

  3. 选择角色,打开 SQL Server (MSSQLSERVER) 的上下文(右键单击)菜单,然后选择移动和选择节点

  4. 选择节点后,SQL Server 应在另一节点上运行。

数据库管理员、工程师 DevOps
任务描述所需技能

清理资源。

要清理资源,请使用 AWS CloudFormation 堆栈删除流程:

  1. 打开 A WS CloudFormation 控制台

  2. 堆栈页面,选择 infra 堆栈。该堆栈当前必须处于运行状态。

  3. 在堆栈详细信息窗格中,选择删除

  4. 在系统提示时,选择删除堆栈

  5. ssm 堆栈重复步骤 2-4。

堆栈删除过程完成之后,堆栈将处于 DELETE_COMPLETE 状态。默认情况下,处于该DELETE_COMPLETE状态的堆栈不会显示在 CloudFormation 控制台中。要显示已删除的堆栈,您必须按照在 AWS CloudFormation 控制台上查看已删除堆栈中所述更改堆栈视图筛选条件。

如果删除失败,则堆栈将处于 DELETE_FAILED 状态。有关解决方案,请参阅 CloudFormation 文档中的删除堆栈失败

AWS DevOps、数据库管理员、工程师 DevOps

故障排除

问题解决方案

AWS CloudFormation 模板失败

如果 CloudFormation 模板在部署期间失败,请执行以下操作:

  1. 打开 A WS CloudFormation 控制台

  2. 在 CloudFormation 控制台的堆栈页面上,选择堆栈。

  3. 选择事件,然后检查堆栈状态

AWS Managed Microsoft AD

若要解决加入问题,请执行以下步骤:

  1. 打开 Systems Manager 控制台

  2. 选择部署区域。

  3. 在左侧窗格中,选择自动化,然后找到失败的自动化运行手册。

  4. 打开自动化运行手册,检查执行状态和执行步骤

  5. 调查失败步骤的详细信息,以查看确切的错误或失败。

相关资源