使用 Terraform 在 Amazon EC2 和 Amazon FSx 上部署 SQL Server 容錯移轉叢集執行個體 - AWS 方案指引

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

使用 Terraform 在 Amazon EC2 和 Amazon FSx 上部署 SQL Server 容錯移轉叢集執行個體

由 Mark Hudson (AWS) 和 Matt Burges (AWS) 建立

Summary

此模式使用 Terraform 在 Amazon Elastic Compute Cloud (Amazon EC2) 上的 Windows Server 容錯移轉叢集 (WSFC) 節點之間部署 SQL Server 容錯移轉叢集執行個體 (FCIs)。此外, 模式會使用 Amazon FSx 共用儲存來儲存資料和日誌檔案。

當 SQL Server 資料庫遷移至 時 AWS,第一個選擇是 Amazon RDS for SQL Server。不過,有時 Amazon RDS for SQL Server 不適合,而且 SQL Server 必須部署在高可用性架構的 Amazon EC2 上。在此解決方案中,SQL Server FCIs會跨 WSFC 節點安裝。

此模式隨附的 Terraform 模組最多可佈建兩個 Amazon EC2 SQL Server 執行個體。Amazon FSx for Windows File Server 檔案系統可做為仲裁見證,並存放共用的資料和日誌檔案。無論設定的執行個體數量為何,SQL Server 執行個體節點一律會建立並加入 FCI 叢集,以確保環境同位。(通常,一個執行個體設定為開發,兩個執行個體用於生產環境。) 對於使用兩個節點以獲得高可用性的組態,會佈建內部 Network Load Balancer。Network Load Balancer 使用 FCI 叢集上設定的運作狀態探查來識別哪個節點是主要節點。

先決條件和限制

先決條件

  • 作用中 AWS 帳戶。

  • 在個別可用區域中具有兩個子網路的 Amazon Virtual Private Cloud (Amazon VPC)。

  • Amazon VPC DHCP 選項集。設定網域名稱以解析您的 Active Directory 網域名稱,以及網域和 NetBIOS 名稱伺服器以指向您的 Active Directory 網域控制站。如需詳細資訊,請參閱其他資訊中的 VPC 組態

  • AWS Directory Service for Microsoft Active Directory (AWS Managed Microsoft AD).

  • 自訂 Amazon Machine Image (AMI)。如需詳細資訊,請參閱其他資訊中的 AMI 組態

  • 包含 SQL Server ISO 映像的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。只有在搭配提供的 component.yaml 檔案使用 EC2 Image Builder 來建置自訂 AMI 時,才需要此先決條件。

  • AWS Key Management Service (AWS KMS) 加密金鑰。

  • 根據預設,SQL Server 是使用開發人員版本產品金鑰進行安裝。生產系統應該使用由相關變數傳遞給模組的有效產品金鑰。

限制

  • 此解決方案需要 AWS Managed Microsoft AD。不過,如果您願意,您可以改用自我管理 Active Directory 實作。若要這麼做,請修改包含的 Amazon FSx Terraform 模組以移除 active_directory_id 屬性。然後,新增自我管理 Active Directory 所需的四個屬性,如 Terraform 文件所示。

  • SQL Server 設定為使用混合模式身分驗證。如果您願意,您可以使用僅限 Windows 的身分驗證。若要這樣做,請在提供的使用者資料指令碼中,移除提供給setup.exe命令的 /SECURITYMODE/SAPWD 參數。您可以移除sql_accounts.tf檔案,也可以修改instances.tf檔案以移除sql_sa_password項目。

  • 刪除部署的叢集時,您必須在 Active Directory 中移除對應的虛擬電腦物件和個別電腦物件。若要移除物件,請使用 Active Directory 管理工具。

  • 有些 AWS 服務 不適用於所有 AWS 區域。如需區域可用性,請參閱AWS 依區域的服務。如需特定端點,請參閱服務端點和配額,然後選擇服務的連結。

產品版本

此解決方案已使用下列版本進行測試:

架構

來源技術堆疊

  • SQL Server

目標技術堆疊

  • 使用 Amazon EC2 的 WSFC 節點上的 SQL Server FCI

  • Amazon FSx for Windows File Server

  • Amazon S3 儲存貯體

  • AWS Secrets Manager

  • AWS Managed Microsoft AD

  • AWS KMS

  • AWS Identity and Access Management (IAM)

目標架構

下圖顯示此解決方案的架構。

在 Amazon EC2 上跨 Windows Server 容錯移轉叢集節點部署 SQL Server 容錯移轉叢集執行個體的架構。

上圖顯示以下項目:

  • 提供 EC2 執行個體存取 AWS KMS 和 Secrets Manager 的 IAM 角色

  • 兩個 SQL Server 節點部署在跨兩個可用區域的私有子網路中的 Amazon EC2 執行個體上

  • Network Load Balancer,用於促進與作用中 SQL Server 執行個體的連線 (設定單一節點叢集時未部署)

  • Amazon FSx for Windows File Server 檔案系統部署在兩個私有子網路中,供 SQL Server 節點共用儲存

  • 用於存放 Active Directory 和 SQL Server 登入資料和組態的 Secrets Manager

  • 用於存放 SQL Server 安裝映像的 Amazon S3 儲存貯體

  • AWS Managed Microsoft AD 適用於 Windows 身分驗證的

  • AWS KMS 用於建立加密金鑰

自動化和擴展

您可以使用 GitHub 儲存庫中的 Terraform 模組來自動化目標架構的部署。您必須修改 terraform.tfvars 檔案,以包含您環境特有的變數值。Amazon S3 儲存貯體、 AWS Managed Microsoft AD 元件、 AWS KMS 加密金鑰和一些秘密是此部署的先決條件,不包含在 Terraform 程式碼中。

工具

AWS 服務

  • AWS Directory Service for Microsoft Active Directory 可讓您的目錄感知工作負載 AWS 和資源在 中使用 Microsoft Active Directory AWS 雲端。在此模式中, AWS Managed Microsoft AD 用於 Windows Server 和 SQL Server 身分驗證,以及 DNS。

  • Amazon Elastic Compute Cloud (Amazon EC2) 在 AWS 雲端中提供可擴展的運算容量。您可以視需要啟動任意數量的虛擬伺服器,,並快速進行擴展或縮減。在此模式中,SQL Server 容錯移轉叢集執行個體會安裝在 Amazon EC2 執行個體上。

  • EC2 Image Builder 可協助您自動化自訂伺服器映像的建立、管理和部署。

  • Amazon FSx for Windows File Server 在 Windows Server 上提供全受管共用儲存。在此模式中,FSx for Windows File Server 為 SQL Server 資料和日誌檔案以及規定人數見證提供共用儲存。

  • AWS Identity and Access Management (IAM) 透過控制已驗證並獲授權使用的人員,協助您安全地管理對 AWS 資源的存取。

  • AWS Key Management Service (AWS KMS) 可協助您建立和控制密碼編譯金鑰,以協助保護您的資料。在此模式中,它會用來加密 Secrets Manager 秘密、Amazon Elastic Block Store (Amazon EBS) 磁碟區上的 SQL Server 儲存體,以及 FSx for Windows File Server 檔案系統。

  • AWS Secrets Manager 可協助您將程式碼中的硬式編碼憑證 (包括密碼) 取代為 Secrets Manager 的 API 呼叫,以便透過程式設計方法來擷取機密。在此模式中,用於安裝和執行 SQL Server 的 Active Directory 登入資料、sa使用者登入資料和資料庫連線資訊會儲存在 Secrets Manager 中。

  • Amazon Simple Storage Service (Amazon S3) 是一種雲端型物件儲存服務,可協助您儲存、保護和擷取任何數量的資料。此模式使用 Amazon S3 儲存貯體來存放 SQL Server 安裝映像。

  • Amazon Virtual Private Cloud (Amazon VPC) 可協助您在已定義的虛擬網路中啟動 AWS 資源。此虛擬網路與您在自己的資料中心中操作的傳統網路相似,且具備使用 AWS可擴展基礎設施的優勢。

其他工具

  • Microsoft SQL Server FCIs安裝在 Windows Server 叢集節點之間。此外,它們可以跨多個子網路安裝。在此模式中,SQL Server FCI 執行個體會跨 WSFC 節點安裝。

  • Terraform 是一種基礎設施即程式碼 (IaC) 工具,可協助您使用程式碼來佈建和管理雲端基礎設施和資源。在此模式中,Terraform 用於建立資源和設定 SQL Server FCI 執行個體。

  • Windows Server 容錯移轉叢集提供基礎設施功能,可支援 SQL Server 等託管伺服器應用程式的高可用性。在此模式中,FCI 節點會利用 WSFC 功能,透過執行個體層級的備援提供本機高可用性。

程式碼儲存庫

此模式的程式碼可在 GitHub cluster-amazon-elastic-compute-cloud-amazon-fsx-microsoft-sql-server 儲存庫中使用。下列資源可在 儲存庫中使用:

  • 提供解決方案概觀和其他安裝和使用資訊README.md的檔案

  • 一組基本的 Terraform 組態檔案和 Amazon FSx 特定模組,以佈建此模式的元件

  • 做為 Amazon EC2 使用者資料指令碼執行的執行個體設定指令碼

  • Image Builder 可用來建立自訂 AMI 的 component.yaml 檔案

最佳實務

安全性和修補

  • AMI 先決條件安裝和組態是部署 SQL Server FCI 叢集的最低需求。可能需要其他軟體和組態,才能符合組織的標準和安全要求。

  • 部署之後,請持續修補 Windows。您可以直接修補執行中的執行個體,或使用最新的 Windows 修補程式建立新的 AMI,並使用新的 AMI 取代執行個體 (一次一個)。 每月 AWS 發行新的 Windows AMIs,其中包含最新的作業系統修補程式、驅動程式和啟動代理程式。我們建議您在啟動新執行個體或建置自訂映像時,檢查是否有最新的 AMI。

  • Amazon EC2 執行個體設定為允許所有傳出流量。在生產環境中部署時,應設定安全群組中的傳出規則,以將此流量限制在所需的目的地。

  • FSx for Windows File Server 檔案系統可以自動記錄檔案共用和檔案和資料夾存取的稽核日誌,如果這是您環境中的需求,請將它們運送到所需的目的地。

  • 定期自動輪換 Secrets Manager 秘密。對於 Amazon EC2 執行個體金鑰對,請考慮自動輪換解決方案,如如何使用 AWS Secrets Manager 安全地存放和輪換 SSH 金鑰對所述。對於 Active Directory 登入資料和 SQL Server sa登入資料秘密,請根據您的密碼管理政策設定自動輪換。

Active Directory 管理

  • 在 FCI 叢集中,Windows 會在 Active Directory 中產生電腦名稱物件 (CNO)。CNO 會回應 DNS 請求,並將流量轉送至作用中的 SQL 節點。我們不建議使用此 Active Directory 提供的 DNS。TTL 太高,無法提供合理的容錯移轉時間,通常需要 5 分鐘以上才能反映新的主要 IP 地址。相反地,對於高可用性的安裝,內部 Network Load Balancer 設定為在 30 秒內容錯移轉。

  • 建立叢集需要 Active Directory 網域管理員。此需求是因為在 Active Directory 中建立叢集物件和修改許可所需的許可較高。不過,SQL Server 服務不需要以網域管理員身分執行。因此,我們建議您為此目的建立第二個 Active Directory 使用者。不過,如果服務將以網域管理員使用者身分執行,您可以消除此使用者。在這種情況下,網域管理員使用者必須新增至在此模式中建立的 Active Directory 管理員群組。

史詩

任務描述所需的技能

建立 Active Directory 群組。

在 中 AWS Managed Microsoft AD,建立下列群組:

  • 叢集管理員群組 – 此群組將新增至每個叢集節點上的本機管理員群組。

  • 叢集遠端桌面群組 – 此群組將新增至每個叢集節點上的本機遠端桌面使用者群組。

如需詳細資訊,請參閱 AWS 文件中的建立 AWS Managed Microsoft AD 群組

AD 管理員

建立 Active Directory 使用者。

在 中 AWS Managed Microsoft AD,建立下列使用者

  • 網域管理員使用者 – 使用此帳戶建立叢集。

  • 網域使用者 – SQL Server 服務將使用此帳戶執行。將此使用者新增至您在上一個任務中建立的叢集管理員群組。

如需詳細資訊,請參閱 AWS 文件中的建立 AWS Managed Microsoft AD 使用者

AD 管理員

將 Active Directory 登入資料新增至秘密。

使用 Secrets Manager 建立四個秘密來存放下列資訊:

  • 網域管理員使用者的使用者名稱

  • 網域管理員使用者的密碼

  • 網域使用者的使用者名稱

  • 網域使用者的密碼

如需詳細資訊,請參閱 AWS 文件中的建立 AWS Secrets Manager 秘密

AWS 管理員
任務描述所需的技能

建立 Windows AMI。

建立包含必要軟體和組態的自訂 Windows AMI。如需詳細資訊,請參閱其他資訊

AWS 管理員、AWS DevOps

安裝 Terraform。

若要安裝 Terraform,請遵循 Terraform 網站上的說明。

AWS DevOps

複製儲存庫。

複製此模式的儲存庫。如需詳細資訊,請參閱 GitHub 網站上的複製儲存庫

AWS DevOps
任務描述所需的技能

修改 Terraform 變數。

更新提供的terraform.tfvars檔案,將所有變數設定為適合您環境的值。

例如,更新 domain_group_administratorsdomain_group_rdp_users變數以使用您的 Active Directory 網域名稱和先前建立的 Active Directory 群組名稱。

AWS DevOps

初始化 Terraform。

若要查看提議的部署,請導覽至儲存庫的根目錄。使用 Terraform 命令列界面 (CLI) 執行 terraform init ,然後執行 terraform plan

AWS DevOps

部署 資源。

若要部署 SQL 叢集和相關聯的資源,請使用 Terraform CLI 來執行 terraform apply

AWS DevOps、AWS 管理員

驗證部署。

若要驗證部署,請使用下列步驟:

  1. 使用遠端桌面連線至其中一個已部署的 Windows Amazon EC2 執行個體。

  2. 如需詳細資訊,請參閱 AWS 文件中的使用 RDP 連線至 Windows 執行個體

  3. 開啟 Windows 容錯移轉叢集管理員。驗證叢集是否已建立,以及 SQL Server 角色是否已建立且正在執行。

  4. 若要使用 SQL Server 測試連線和身分驗證,請使用資料庫工具,例如 SQL Server Management Studio 來連線至 SQL Server 端點。(端點值存放在 Secrets Manager 中。) 如需詳細資訊,請參閱 AWS 文件中的連線至 Amazon EC2 上的 Microsoft SQL Server

DBA、AWS 系統管理員

故障診斷

問題解決方案

Terraform 佈建已完成,但 Windows 容錯移轉叢集管理員未顯示叢集已建立或叢集處於不可操作狀態。

叢集的整個資源和組態安裝可能需要 45-60 分鐘。Terraform 完成後,使用者資料指令碼必須執行到完成,這需要多次重新啟動。若要監控進度,您可以使用C:\磁碟機中的 Checkpoints目錄和 中的 SQL Server 安裝日誌C:\Program Data\Microsoft SQL Server\150\Log。完成後, C:\ProgramData\Amazon\EC2-Windows\Launch\Log\UserdataExecution.log 檔案中會提供安裝完成訊息。

佈建正常運作的叢集之後,使用 Terraform 刪除並重新建立叢集不會成功。Terraform 完成,但叢集未正確設定。

佈建程序的一部分涉及向 Active Directory 和 Active Directory DNS 註冊機器和虛擬物件。當 Amazon EC2 叢集節點和叢集節點存在電腦名稱時,FCI 無法正確初始化,且佈建會失敗。

若要修正此問題,請執行下列步驟:

  1. 刪除 Active Directory 使用者和電腦中的 Amazon EC2 節點、叢集虛擬電腦和叢集 ID。

  2. 在 Active Directory DNS 中刪除叢集虛擬電腦的 DNS 項目。

  3. 執行下列命令來刪除叢集 ID 隨機字串 Terraform 資源 terragrunt destroy -target=random_string.cluster_id。此動作將刪除現有的 Amazon EC2 執行個體。

  4. 執行 terraform apply,並預期以下三個新資源:兩個 FCI Amazon EC2 執行個體和 1 個隨機字串叢集 ID。

相關資源

AWS 文件

其他資訊

Terraform 模組資訊

此模組使用混合 AMI 組態和使用者資料組態,以取得佈建時間和穩定性的良好組合。在佈建期間,Windows 需要多次重新啟動和等待。已實作檢查點方法,以防止持久性使用者資料重新啟動期間無限迴圈。使用者資料設定為持久性。因此,使用者資料組態指令碼具有且必須繼續開發為等冪。冪等性可簡化更新程序,允許在更新週期期間交換執行個體,無需手動設定即可重新加入或重新建立 FCI 叢集。

SQL Server 連線字串和容錯移轉叢集

模組將發佈秘密,其中包含應用於此資料庫連線字串的端點地址。秘密名稱遵循格式 {environment_name}/sqlserver/{cluster_name}/endpoint。對於只使用一個節點的安裝,您可以預期這是 Amazon EC2 執行個體 SQL Server 介面的 IP 地址。對於高可用性安裝 (兩個執行個體),您可以預期這是內部 Network Load Balancer 的 DNS 名稱。

此模組不支援容錯移轉叢集虛擬 IPs。虛擬 IP 必須保留在相同的子網路中,才能運作。在 中 AWS,單一子網路無法跨越多個可用區域。因此,使用虛擬 IPs 會移除將此模組視為高度可用的能力。

每個 Amazon EC2 執行個體都會獲得三個私有 IP 地址。它們的 usai 如下所示:

  • 網路流量的主要 IP – 輸出流量的來源 IP。

  • FCI 通訊 – 用來維護容錯移轉叢集的狀態和同步。

  • SQL Server (TCP 連接埠 1433) – 接聽程式和 也會接聽活動訊號流量,以判斷哪個執行個體是主要執行個體。

VPC 組態

先決條件會列出設定為使用 Active Directory 進行 DNS 解析的 DHCP 選項集。不過,此先決條件並非硬性要求。硬性要求是 EC2 執行個體必須能夠解析您的 Active Directory 網域名稱。您可以透過其他方式達成此要求,例如使用 Amazon Route 53 Resolver 端點。如需詳細資訊,請參閱整合 Directory Service 的 DNS 解析與 Amazon Route 53 解析程式 (AWS 部落格文章)。

AMI 組態

此模式中使用的 AMI 必須包含下列必要軟體和組態:

  1. 下載 SQL Server 2019 安裝檔案並將其展開至 C:\SQL_Install_media

  2. 安裝下列 Windows 功能:

    • Install-WindowsFeature Failover-Clustering

    • Install-WindowsFeature RSAT-AD-PowerShell

    • Install-WindowsFeature RSAT-AD-Tools

    • Install-WindowsFeature RSAT-Clustering-Mgmt

    • Install-WindowsFeature RSAT-Clustering-PowerShell

    • Install-WindowsFeature RSAT-Clustering-CmdInterface

  3. 停用 Windows 防火牆,如下所示:

    • Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled False

  4. 啟用 CredSSP 身分驗證方法 (<domain>以組織的 Windows 網域名稱取代),如下所示:

    • Enable-WSManCredSSP -Role "Server" -Force

    • Enable-WSManCredSSP -Role "Client" -DelegateComputer *.<domain>.com -Force

  5. 設定下列登錄機碼:

    • 允許 NTLM 身分驗證憑證:

      • HKLM:\Software\Policies\Microsoft\Windows\CredentialsDelegation

        • 名稱:AllowFreshCredentialsWhenNTLMOnly

        • 值:1

        • 類型:REG_DWORD

    • 允許本機網域電腦從 PowerShell 使用 NTLM:

      • 路徑: HKLM:\Software\Policies\Microsoft\Windows\CredentialsDelegation\AllowFreshCredentialsWhenNTLMOnly

        • 名稱:1

        • 值:wsman/*.<domain>.com

        • 類型:REG_SZ

  6. 設定 PowerShell Gallery,如下所示:

    • [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

    • Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force

    • Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

  7. 安裝下列 Windows PowerShell 模組*

    • Install-Module -Name ComputerManagementDsc

    • Install-Module -Name FailOverClusterDsc

    • Install-Module -Name PSDscResources

    • Install-Module -Name xSmbShare

    • Install-Module -Name xActiveDirectory

    • Install-Module -Name SqlServer

若要使用映像建置器建立 AMI,請遵循映像建置器文件中使用 EC2 Image Builderconsole 精靈建立映像管道中的指示。若要使用先前的先決條件建立配方的元件,請使用下列步驟:

  1. GitHub 儲存庫ami 資料夾下載 component.yaml 檔案。

  2. 將內容複製到新的映像建置器元件。

  3. 使用您的資訊更新下列預留位置:

    • <domain> – 您的 Active Directory 網域名稱

    • <bucket_name> – 包含 SQL Server 映像的 Amazon S3 儲存貯體名稱