延伸叢集
本節逐步執行延伸 Windows Server Failover Cluster (WSFC) 及可用性群組所需的建置作業,以在雙區域部署中使用。
本手冊假設您:
- 已部署雙重 AZ 部署,現在正在針對災難回復使用案例進行延伸。
- 已在另一個區域 (稱為回復區域) 中佈建第二個 VPC ,並將 VPC 與傳輸閘道連接在一起。
- 已配置安全群組,以容許伺服器之間的必要資料流量。
- 已在回復區域中佈建虛擬伺服器,並將它們配置為防禦及作用中目錄伺服器。
- Active Directory 伺服器是現在跨越兩個區域之網域的一部分。
- 已在回復區域中佈建虛擬伺服器,並將它配置成 SQL Server。
安裝失效接手叢集作業功能
-
使用來自 SQL Admins 群組帳戶的使用者,對回復 MZR 中的 SQL Server 執行 RDP ,並開啟 PowerShell 階段作業。
-
將 SQL Admins 群組新增至本端「遠端管理使用者」群組,以便此群組中的使用者可以執行遠端指令。
-
容許入埠 TCP 埠 5022 進入伺服器,因為此埠用於可用性群組資料流量。 安裝「失效接手叢集作業」功能,然後重新啟動伺服器:
$domainnb = "<NB_Domain>" $group = $domainnb + "\SQLAdmins" Add-LocalGroupMember -Group "Remote Management Users" -Member $group New-NetFirewallRule -DisplayName 'SQL-AG-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5022 Install-WindowsFeature –Name Failover-Clustering –IncludeManagementTools Restart-Computer -Force
加入 WSFC 並啟用 SQL Always On
-
使用來自 SQL Admins 群組帳戶的使用者,對回復 MZR 中的 SQL Server 執行 RDP ,並開啟 PowerShell 階段作業。
-
將
<hostname3>
新增至 WSFC 叢集,名稱為<clustername>
例如wsfc01
,然後在新節點上啟用 Always On 可用性群組。$sqldb03 = "<hostname3>" $cluster = "<clustername>" Get-Cluster -Name $cluster | Add-ClusterNode -Name $sqldb03 Enable-SqlAlwaysOn -ServerInstance $sqldb03 -Force
建立端點
-
使用來自 SQL Admins 群組帳戶的使用者,對回復 MZR 中的 SQL Server 執行 RDP ,並開啟 PowerShell 階段作業。
-
若要參與 Always On 可用性群組,伺服器實例需要自己的端點,其使用 TCP 埠 5022 在管理可用性抄本的伺服器實例之間傳送及接收資料流量。
-
下列 PowerShell 指令用來在 SQL Server 上的預設 SQL 實例 (DEFAULT) 上配置端點
Hadr_endpoint
;<hostname3>
會在端點之間啟用加密:$sqldb03 = "<hostname3>" $domainnb = "<NB_Domain>" $user = $domainnb + "\sqlsvc" $pathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + "\DEFAULT" $endpoint3 = New-SqlHadrEndpoint Hadr_endpoint -Port 5022 -Path $pathsqldb03 -Encryption Required -EncryptionAlgorithm Aes -Owner $user Set-SqlHadrEndpoint -InputObject $endpoint3 -State "Started"
若要將連接許可權授與端點所使用的網域服務,需要執行下列步驟。 如果未完成此步驟,端點埠將不會啟動,且不會出現在 netstat -a
清單中:
- 在主要抄本主機上啟動 SQL Server Management Studio (SSMS) ,並連接至主要抄本。
- 展開 安全,然後用滑鼠右鍵按一下 登入 ,並選取 新建登入。
- 按一下 搜尋 並輸入使用者帳戶
\sqlserver\sqlsvc
,然後按一下 確定。 - 用滑鼠右鍵按一下所建立的登入,然後選取 內容。
- 按一下 安全項目,然後按一下 搜尋。
- 在「新增物件」對話框中,選取 特定物件 ,然後按一下 確定。
- 在「選取物件」對話框中,按一下 物件類型 ,然後選取 端點。
- 按一下 瀏覽 以選取物件名稱。
- 選取 Hadr_endpoint ,然後按一下 確定。
- 在 Hadr_endpoint 的許可權中,明確授與此物件的連接許可權。
傳送測試資料庫
-
使用來自 SQL Admins 群組帳戶的使用者,對回復 MZR 中的 SQL Server 執行 RDP ,並開啟 PowerShell 階段作業。
-
Prepare the secondary database by using the
Backup-SqlDatabase
andRestore-SqlDatabase
commands to create a backup of the TestDatabase on<hostname1>
onTempShare
on<file_share_host>
, the SQL server instance that hosts the primary replica. 將備份還原至將管理次要抄本的<hostname3>
。 必須使用NoRecovery
還原參數。$sqldb01 = "<hostname1>" $sqldb03 = "<hostname3>" $filesharehost = "<file_share_host>" $backupfiledata = "\\" + $filesharehost +"\TempShare\TestDatabase.bak" $backupfilelog = "\\" + $filesharehost +"\TempShare\TestDatabase.trn" Backup-SqlDatabase -Database "TestDatabase" -ServerInstance $sqldb01 -BackupFile $backupfiledata -CopyOnly Backup-SqlDatabase -Database "TestDatabase" -BackupFile $backupfilelog -ServerInstance $sqldb01 -BackupAction Log -CopyOnly Restore-SqlDatabase -Database "TestDatabase" -BackupFile $backupfiledata -ServerInstance $sqldb03 -NoRecovery Restore-SqlDatabase -Database "TestDatabase" -BackupFile $backupfilelog -ServerInstance $sqldb03 -RestoreAction Log -NoRecovery
新的次要資料庫會處於 RESTORING 狀態,直到它加入可用性群組為止,將無法存取。
建立可用性群組抄本
新增至可用性群組的資料庫稱為可用性資料庫。 新增資料庫時,資料庫必須是線上讀寫資料庫,並且存在於將在 WSFC 中管理主要抄本的伺服器實例上。 新增時,資料庫會結合可用性群組作為主要資料庫,並保持可供用戶端使用。 除非將主要資料庫的備份還原至將變成次要抄本的伺服器實例,否則不存在次要資料庫。 新的次要資料庫會處於 RESTORING 狀態,直到它加入可用性群組為止。 如果未使用備份及還原方法,請參閱 使用自動植入來起始設定 Always On 可用性群組的次要抄本 。
-
使用來自 SQL Admins 群組帳戶的使用者,對回復 MZR 中的 SQL Server 執行 RDP ,並開啟 PowerShell 階段作業。
-
若要確保您未收到路徑錯誤,請使用
Invoke-SQLCmd
,這會強制載入 SQL PowerShell 程式庫,然後可透過 PowerShell 磁碟機樹狀結構存取該程式庫。 PowerShell 會處理 SQL Server 中的物件,類似於目錄中的檔案。 將<hostname3>
取代為 SQL Server 的主機名稱:invoke-sqlcmd cd SQLSERVER:\SQL\<hostname3>
-
若要建立可用性群組抄本,請使用
New-SqlAvailabilityReplica
指令將可用性模式配置為非同步確定。<hostname1>
是主要抄本的主機名稱,而<hostname3>
是回復 MZR 中伺服器的主機名稱,<fqdn3>
是該伺服器的完整網域名稱。<availability_group>
是先前配置的 Always On 可用性群組的名稱。 如需其他參數的說明,請參閱 New-SqlAvailabilityGroup 文件。$sqldb03 = "<hostname3>" $sqldb03fqdn = "<fqdn3>" $ag = "<availability_group>" $endpointurl3 = "TCP://" + $sqldb03fqdn + ":5022" $pathsqldb01 = "SQLSERVER:\SQL\" + $sqldb01 +" \DEFAULT\AvailabilityGroups\" + $ag New-SqlAvailabilityReplica -Name $sqldb03 -EndpointUrl $endpointurl3 -FailoverMode Manual -AvailabilityMode AsynchronousCommit -ConnectionModeInSecondaryRole AllowNoConnections -Path $pathsqldb01
-
使用下列指令將次要抄本結合至可用性群組。 結合會將次要資料庫置於 ONLINE 狀態,並起始與對應主要資料庫的資料同步化。 資料同步化是在次要資料庫上重新產生主要資料庫變更的程序。 資料同步化包括將交易日誌記錄傳送至次要資料庫的主要資料庫。
$sqldb03 = "<hostname3>" $ag = "<availability_group>" $sqldb03 = "sqldb03" $ag = "AG01" $pathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT" Join-SqlAvailabilityGroup -Path $pathsqldb03 -Name $ag -ClusterType WSFC
-
將每一個次要資料庫結合至可用性群組,以啟動資料同步化:
$sqldb03 = "<hostname3>" $ag = "<availability_group>" $agpathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT\AvailabilityGroups\" + $ag Add-SqlAvailabilityDatabase -Path $agpathsqldb03 -Database "TestDatabase"
-
使用 dir 指令來驗證新可用性群組的內容 (例如,
dir SQLSERVER:\SQL\sqldb01\DEFAULT\AvailabilityGroups\AG01
)。 -
使用下列指令,以容許 TCP 6789 通過 Windows 防火牆:
New-NetFirewallRule -DisplayName 'SQL-dnnlsnr-6789-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 6789