使用 Amazon FCI 为SQL服务器设置多可用区基础架构 FSx - AWS Prescriptive Guidance

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

使用 Amazon FCI 为SQL服务器设置多可用区基础架构 FSx

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

摘要

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

此模式为FCIs在 Amazon Web Services () 上部署的多可用区(多可用区)中的SQL服务器设置基础架构。AWS使用AWS CloudFormation模板可以自动配置此基础架构所需的AWS服务。 SQL使用 PowerShell 命令在亚马逊弹性计算云 (AmazonEC2) 实例上安装服务器和创建集群节点。

该解决方案使用高度可用的多可用区 A mazon FSx for Windows 文件系统作为存储SQL服务器数据库文件的共享见证。亚马逊FSx文件系统和托管SQL服务器的 EC2 Windows 实例加入了微软 Active Directory(AWS托管微软 AD)域的同一个AWS目录服务。

先决条件和限制

先决条件

  • 一个活跃的AWS账户

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

  • AWS微软 Active Directory 的目录服务

  • S AWS ecrets Manager 中用于通过键值对向AWS托管 Microsoft AD 进行身份验证的凭据:

    • ADDomainName: <域名>

    • ADDomainJoinUserName: <域用户名>

    • ADDomainJoinPassword:<域用户密码>

    • TargetOU: <目标 OU 值>

    注意

    在 Sy AWS stems Manager 自动化中,你将在AWS托管的 Microsoft AD 加入活动中使用相同的密钥名称。

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

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

产品版本

  • Windows Server 2012 R2 和微软 SQL Server 2016

架构

源技术堆栈

  • FCIs使用共享云SQL端硬盘的本地服务器

目标技术堆栈

  • AWSEC2实例

  • FSx适用于 Windows 文件服务器的亚马逊

  • AWSSystems Manager 自动化操作手册

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

  • AWS Secrets Manager

  • AWS Managed Microsoft AD

  • Amazon EventBridge

  • AWSIdentity and Access Management (IAM)

目标架构

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

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

自动化和扩缩

  • 你可以使用 S AWS ystems Manager 加入AWS托管的 Microsoft AD 并执行SQL服务器安装。

工具

AWS 服务

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

  • AWSD irectory S SQL ervice 提供了多种使用微软活动目录 (AD) 与其他AWS服务的方式,例如亚马逊弹性计算云 (亚马逊EC2)、适用于服务器的亚马逊关系数据库服务 (亚马逊RDS) 和FSx适用于Windows文件服务器的亚马逊。

  • 亚马逊弹性计算云 (AmazonEC2) 在AWS云中提供可扩展的计算容量。您可以根据需要启动任意数量的虚拟服务器,并快速扩展或缩减它们。

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

  • AWSIdentity and Access Management (IAM) 通过控制谁经过身份验证并有权使用AWS资源,从而帮助您安全地管理对资源的访问权限。

  • AWSS@@ ecrets Manager 可帮助您将代码中的硬编码凭据(包括密码)替换为API调用 Secrets Manager 以编程方式检索密钥。

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

其他工具

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

代码存储库

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

最佳实践

操作说明

任务描述所需技能

部署 Systems Manager CloudFormation 堆栈。

  1. 登录您的AWS账户,然后打开AWS管理控制台。

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

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

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

    • SSMAutomationDocumentName— 为 Systems Manager 自动化运行手册提供一个名称。

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

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

AWS DevOps, DevOps 工程师

部署基础设施堆栈。

成功部署 Systems Manager infra 堆栈后,创建堆栈,其中包括EC2实例节点、安全组、Amazon FSx for Windows 文件服务器文件系统和IAM角色。

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

    • ActiveDirectoryId— Microsoft AWS 托管 AD 的 ID

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

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

    • FSxSecurityGroupName— Amazon FSx 安全组的名称

    • FSxWindowsFileSystemName— Amazon FSx 硬盘的名称

    • ImageID— 用于创建SQL服务器实例节点的基本 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 身份证

    • WorkloadInstanceType— EC2 实例类型

    部署 infra 堆栈。该堆栈将创建设置 Windows SQL 服务器所需的所有基础架构组件FCI。

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

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

安装 Windows 工具。

  1. 登录主EC2实例,即节点 1。要安装 Windows 功能(活动目录和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. 登录到辅助EC2实例(节点 2),然后运行相同的脚本以启用节点 2 上的功能。

AWS DevOps, DevOps 工程师,DBA

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

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

AWS DevOps,DBA, DevOps 工程师

创建 WSFC。

要创建 Windows 服务器故障转移群集 (WSFC) 群集,请执行以下操作:

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

    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) 文件共享,该共享已针对微软SQL服务器使用进行了优化。

  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 故障转移群集 (WSFC) 群集。否则,前面的命令将失败并返回消息 You do not have administrator privilege on servers

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

    Set-ClusterQuorum -FileShareWitness \\<FSx Windows Remote PowerShell Endpoint>\share\witness
AWS DevOps,DBA, DevOps 工程师

安装SQL服务器故障转移群集。

WSFC集群设置完成后,在主实例(node1)上安装SQL服务器群集。

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

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

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,DBA, DevOps 工程师

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

要将SQL服务器添加到辅助节点(节点 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,DBA, DevOps 工程师

测试SQL服务器FCI。

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

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

  3. 选择 “角色”,打开 “SQL服务器” () 的上下文(右键单击MSSQLSERVER)菜单,然后选择 “移动并选择节点”

  4. 选择节点后,SQL服务器应在另一个节点上运行。

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

清理资源。

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

  1. 打开 AWS CloudFormation 管理控制台

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

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

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

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

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

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

AWS DevOps,DBA, DevOps 工程师

故障排除

事务解决方案

AWS CloudFormation 模板失败

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

  1. 打开 AWS CloudFormation 管理控制台

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

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

AWS托管微软 AD 加入失败

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

  1. 打开 Systems Manager 控制台

  2. 选择部署区域。

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

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

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

相关资源