使用 Amazon FSx 為 SQL 伺服器永遠在 FCI 設定異地同步備份基礎設施 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 Amazon FSx 為 SQL 伺服器永遠在 FCI 設定異地同步備份基礎設施

由馬尼什·加格 (AWS)、法尼庫馬爾·達迪 (AWS)、尼沙德曼卡 (AWS) 和拉傑尼什泰亞吉 (AWS) 創建

代碼存儲庫:aws-windows-failover-cluster-自動化

環境:PoC 或試點

來源:本地 SQL 伺服器資料庫

目標:EC2 上的 Microsoft SQL 服務器

R 類型:重新主機

工作量:Microsoft

技術:遷移; 基礎設施; DevOps

AWS 服務:AWS 管理 Microsoft AD; Amazon EC2; Amazon FSx; AWS Systems Manager

Summary

如果您需要快速移轉大量 Microsoft SQL Server 永遠在容錯移轉叢集執行個體 (FCI),這個模式可以協助您將佈建時間降到最低。藉由使用 Windows 檔案伺服器的自動化和 Amazon FSx,可減少人工作業、人為錯誤,以及部署大量叢集所需的時間。

此模式在 Amazon Web Services(AWS)上的多可用區域(異地同步備份)部署中為 SQL Server FCI 設置基礎設施。此基礎設施所需的 AWS 服務佈建可使用 AWS CloudFormation 範本自動化。在亞馬遜彈性運算雲端 (Amazon EC2) 執行個體上的 SQL Server 安裝和叢集節點建立是透過使用 PowerShell 命令執行的。

此解決方案使用高可用性異地同步備份 Amazon FSx (適用於 Windows) 檔案系統,做為儲存 SQL Server 資料庫檔案的共用見證。託管 SQL 伺服器的 Amazon FSx 檔案系統和 EC2 視窗執行個體會加入 Microsoft 活動目錄 (AWS 受管 Microsoft AD) 網域的相同 AWS Directory Service。

先決條件和限制

先決條件

  • 有效的 AWS 帳戶

  • 具有足夠許可以使用 AWS CloudFormation 範本佈建資源的 AWS 使用者

  • 適用於 Microsoft Active Directory 的 AWS Directory Service

  • AWS Secrets Manager 中的登入資料,可在金鑰值組中向 AWS 受管 Microsoft AD 進行驗證:

    • ADDomainName: <Domain Name>

    • ADDomainJoinUserName: <Domain Username>

    • ADDomainJoinPassword: <Domain User Password>

    • TargetOU: <Target OU Value>

    注意:您將在 AWS Systems Manager 自動化中使用相同的金鑰名稱來進行 AWS 受管 Microsoft AD 加入活動。

  • SQL Server 媒體檔案適用於 SQL Server 安裝和 Windows 服務或建立的網域帳戶,這些檔案將在叢集建立期間使用

  • 虛擬私有雲端 (VPC),在不同的可用區域中具有兩個公用子網路、可用區域中有兩個私有子網路、一個網際網路閘道、NAT 閘道、路由表關聯,以及一個跳躍伺服器

產品版本

  • 視窗服務器 2012 R2 和 Microsoft SQL 服務器

架構

源, 技術, 堆棧

  • 使用共用磁碟機搭配 FCI 的內部部署 SQL 伺服器

目標技術堆疊

  • 執行個體

  • Amazon FSx for Windows File Server

  • AWS Systems Manager Automation 手冊

  • 網路組態 (VPC、子網路、網際網路閘道、NAT 閘道、跳躍伺服器、安全群組)

  • AWS Secrets Manager

  • AWS 受管 Microsoft AD

  • Amazon EventBridge

  • AWS Identity and Access Management (IAM)

目標架構

下圖顯示單一 AWS 區域中的 AWS 帳戶,其 VPC 包含兩個可用區域、兩個具有 NAT 閘道的公有子網路、第一個公有子網路中的跳躍伺服器、兩個私有子網路,每個子網路都有節點安全群組中 SQL Server 節點的 EC2 執行個體,以及連接到每個 SQL Server 節點的 Amazon FSx 檔案系統。AWS Directory Service、Amazon EventBridge、AWS Secrets Manager 和 AWS Systems Manager 也包含在內。

異地同步備份架構包含公有和私有子網路中的資源,並具有節點安全群組。

自動化和規模

  • 您可以使用 AWS Systems Manager 加入 AWS 受管 Microsoft AD 並執行 SQL 伺服器安裝。

工具

AWS 服務

  • AWS 可 CloudFormation協助您設定 AWS 資源、快速且一致地佈建 AWS 資源,並在 AWS 帳戶和區域的整個生命週期中進行管理。

  • AWS Directory Service 提供多種方式,可將 Microsoft 活動目錄 (AD) 與其他 AWS 服務搭配使用,例如 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Relational Database Service 服務 (Amazon RDS) SQL 伺服器,以及適用於 Windows 檔案伺服器的 Amazon FSx。

  • 亞馬遜彈性運算雲 (Amazon EC2) 在 AWS 雲端提供可擴展的運算容量。您可以視需要啟動任意數量的虛擬伺服器,,並快速進行擴展或縮減。

  • Amazon EventBridge 是無伺服器事件匯流排服務,可協助您將應用程式與來自各種來源的即時資料連接起來。例如,AWS Lambda 函數、使用 API 目的地的 HTTP 叫用端點,或其他 AWS 帳戶中的事件匯流排。

  • AWS Identity and Access Management (IAM) 可透過控制誰經過身份驗證和授權使用 AWS 資源,協助您安全地管理對 AWS 資源的存取。

  • AWS Secrets Manager 可協助您透過 API 呼叫秘密管 Secrets Manager 員來取代程式碼中的硬式編碼登入資料 (包括密碼),以程式設計方式擷取密碼。

  • AWS Systems Manager 可協助您管理在 AWS 雲端中執行的應用程式和基礎設施。它可簡化應用程式和資源管理、縮短偵測和解決操作問題的時間,並協助您安全地大規模管理 AWS 資源。

其他工具

  • PowerShell是一個 Microsoft 的自動化和配置管理程序,可以在 Windows,Linux 和 macOS 上運行。此模式使用 PowerShell 腳本。

代碼存儲庫

此模式的代碼可在 GitHub aws-windows-failover-cluster-自動化存儲庫中使用。

最佳實務

史诗

任務描述所需技能

部署系 Systems Manager CloudFormation 堆疊。

  1. 登入您的 AWS 帳戶,然後開啟 AWS 管理主控台。

  2. 導覽至主 CloudFormation 控台,然後上傳ssm.yaml範本以建立 Systems Manager CloudFormation 堆疊。提供下列參數的值:

    • StateUnJoinAssociationLoggingBucketName— 為範本將為記錄目的而建立的 S3 儲存貯體提供名稱。

    • SSM 關聯廣告 UnjoinName — 提供資源的名稱。AWS::SSM::Association

    • SSM AutomationDocumentName — 提供 Systems Manager 自動化手冊的名稱。

    • EventBridgeName— 提供 EventBridge 事件匯流排的名稱。

  3. 透過啟動ssm.yaml CloudFormation 範本來部署 Systems Manager CloudFormation 堆疊。範本會建立 Systems Manager Atomation runboook,該執行個體會在具有標籤的新 EC2 執行個體啟動時啟動。ADJoined: FSXADD自動化執行手冊會將執行個體新增至 AWS 受管 Microsoft AD 目錄。

AWS DevOps、 DevOps 工程師

部署基礎架構堆疊。

成功部署 Systems Manager 堆疊後,建立包括 EC2 執行個體節點、安全群組、Windows 檔案伺服器檔案系統的 Amazon FSx 和 IAM 角色的infra堆疊。

  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 伺服器執行個體節點的基礎視窗 2012 R2 映像或 Amazon 機器映像 (AMI) 的識別碼

    • KeyPairName— 要連接到 EC2 執行個體節點以進行存取的鍵值對

    • Node1SecurityGroupName— 第一個節點安全性群組的名稱

    • Node2SecurityGroupName— 第二個節點安全性群組的名稱

    • OUSecretName— 包含 AWS 受管 Microsoft AD 資訊的秘密名稱

    • PrivateSubnet1— 第一個私有子網路的識別碼

    • PrivateSubnet2— 第二個私人子網路的識別碼

    • SqlFSxFCIName— 套用至主節點和次要節點以及 Amazon FSx 的標籤名稱。

    • SqlFSxServerNetBIOSName1— 主 EC2 執行個體節點的名稱 (最多 15 個字元)

    • SqlFSxServerNetBIOSName2— 次要 EC2 執行個體節點的名稱 (最多 15 個字元)

    • VPC— VPC 識別碼

    • WorkloadInstanceType— EC2 執行個體的類型

    部署infra堆疊。堆疊會建立設定視窗 SQL 伺服器 FCI 所需的所有基礎結構元件。

  2. EC2 執行個體節點啟動後,系統會叫用 Systems Manager 自動化文件,將這些執行個體加入 AWS 受管 Microsoft AD。您可以在 Systems Manager 主控台的 [自動化] 頁面上追蹤進度。

AWS DevOps、 DevOps 工程師
任務描述所需技能

安裝視窗工具。

  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

在使用中目錄網域服務中預先安裝叢集電腦物件。

若要在使用中目錄網域服務 (AD DS) 中預先安裝叢集名稱物件 (CNO),並預先安裝叢集角色的虛擬電腦物件 (VCO),請遵循 Windows Server 說明文件中的指示。

AWS DevOps、DBA、工程師 DevOps

建立 WSFC。

若要建立 Windows 伺服器容錯移轉叢集 (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 容錯移轉叢集 (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 叢集設定完成後,請在主要執行個體 (節點 1) 上安裝 SQL Server 叢集。

  1. 在兩個節點的 T 驅動器中,創建tempdblog文件夾。這些文件夾在 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、DBA、工程師 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、DBA、工程師 DevOps

測試 SQL 伺服器 FCI。

  1. 在其中一個節點的 Windows 執行個體上,在 [系統管理工具] 中,啟動容錯移轉叢集管理員

  2. 瀏覽至「節點」,並確認節點狀態為「狀態執行中」。

  3. 選取角色,開啟 SQL Server (MSSQLSERVER) 的內容 (按一下滑鼠右鍵) 功能表,然後選取 [移動並選取節點]。

  4. 選取節點之後,SQL Server 應該會在另一個節點上執行。

DBA,工程師 DevOps
任務描述所需技能

清理資源。

若要清理資源,請使用 AWS CloudFormation 堆疊刪除程序:

  1. 開啟 AWS CloudFormation 主控台

  2. 在「堆疊」頁面上,選取infra堆疊。此堆疊目前必須正在執行。

  3. 在 stack details (堆疊詳細資訊) 窗格中,選擇 Delete (刪除)

  4. 當系統提示時,選取 Delete stack (刪除堆疊)

  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 受管 Microsoft AD 加入失敗

若要疑難排解聯結問題,請依照下列步驟執行:

  1. 開啟 Systems Manager 主控台

  2. 選取部署區域。

  3. 在左窗格中,選擇 [自動化],然後找出故障的自動化工作流程簿。

  4. 打開自動化手冊,並檢查執行狀態和執行步驟

  5. 調查失敗步驟的詳細資訊,以查看確切的錯誤或失敗。

相關資源