本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 依區域的服務
。如需特定端點,請參閱服務端點和配額,然後選擇服務的連結。
產品版本
此解決方案已使用下列版本進行測試:
Windows Server 2019
SQL Server 2019
架構
來源技術堆疊
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)
目標架構
下圖顯示此解決方案的架構。

上圖顯示以下項目:
提供 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.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.yam
l 檔案
最佳實務
安全性和修補
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,建立下列使用者
如需詳細資訊,請參閱 AWS 文件中的建立 AWS Managed Microsoft AD 使用者。 | AD 管理員 |
將 Active Directory 登入資料新增至秘密。 | 使用 Secrets Manager 建立四個秘密來存放下列資訊:
如需詳細資訊,請參閱 AWS 文件中的建立 AWS Secrets Manager 秘密。 | AWS 管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
修改 Terraform 變數。 | 更新提供的 例如,更新 | AWS DevOps |
初始化 Terraform。 | 若要查看提議的部署,請導覽至儲存庫的根目錄。使用 Terraform 命令列界面 (CLI) 執行 | AWS DevOps |
部署 資源。 | 若要部署 SQL 叢集和相關聯的資源,請使用 Terraform CLI 來執行 | AWS DevOps、AWS 管理員 |
驗證部署。 | 若要驗證部署,請使用下列步驟:
| DBA、AWS 系統管理員 |
故障診斷
問題 | 解決方案 |
---|---|
Terraform 佈建已完成,但 Windows 容錯移轉叢集管理員未顯示叢集已建立或叢集處於不可操作狀態。 | 叢集的整個資源和組態安裝可能需要 45-60 分鐘。Terraform 完成後,使用者資料指令碼必須執行到完成,這需要多次重新啟動。若要監控進度,您可以使用 |
佈建正常運作的叢集之後,使用 Terraform 刪除並重新建立叢集不會成功。Terraform 完成,但叢集未正確設定。 | 佈建程序的一部分涉及向 Active Directory 和 Active Directory DNS 註冊機器和虛擬物件。當 Amazon EC2 叢集節點和叢集節點存在電腦名稱時,FCI 無法正確初始化,且佈建會失敗。 若要修正此問題,請執行下列步驟:
|
相關資源
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 解析程式
AMI 組態
此模式中使用的 AMI 必須包含下列必要軟體和組態:
下載 SQL Server 2019 安裝檔案並將其展開至
C:\SQL_Install_media
。安裝下列 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
停用 Windows 防火牆,如下所示:
Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled False
啟用 CredSSP 身分驗證方法 (
<domain>
以組織的 Windows 網域名稱取代),如下所示:Enable-WSManCredSSP -Role "Server" -Force
Enable-WSManCredSSP -Role "Client" -DelegateComputer *.<domain>.com -Force
設定下列登錄機碼:
允許 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
設定 PowerShell Gallery
,如下所示: [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted
安裝下列 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 精靈建立映像管道中的指示。若要使用先前的先決條件建立配方的元件,請使用下列步驟:
從 GitHub 儲存庫
的 ami
資料夾下載 component.yaml檔案。 將內容複製到新的映像建置器元件。
使用您的資訊更新下列預留位置:
<domain>
– 您的 Active Directory 網域名稱<bucket_name>
– 包含 SQL Server 映像的 Amazon S3 儲存貯體名稱