IBM Cloud Docs
延伸叢集

延伸叢集

本節逐步執行延伸 Windows Server Failover Cluster (WSFC) 及可用性群組所需的建置作業,以在雙區域部署中使用。

本手冊假設您:

  • 已部署雙重 AZ 部署,現在正在針對災難回復使用案例進行延伸。
  • 已在另一個區域 (稱為回復區域) 中佈建第二個 VPC ,並將 VPC 與傳輸閘道連接在一起。
  • 已配置安全群組,以容許伺服器之間的必要資料流量。
  • 已在回復區域中佈建虛擬伺服器,並將它們配置為防禦及作用中目錄伺服器。
  • Active Directory 伺服器是現在跨越兩個區域之網域的一部分。
  • 已在回復區域中佈建虛擬伺服器,並將它配置成 SQL Server。

安裝失效接手叢集作業功能

  1. 使用來自 SQL Admins 群組帳戶的使用者,對回復 MZR 中的 SQL Server 執行 RDP ,並開啟 PowerShell 階段作業。

  2. 將 SQL Admins 群組新增至本端「遠端管理使用者」群組,以便此群組中的使用者可以執行遠端指令。

  3. 容許入埠 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

  1. 使用來自 SQL Admins 群組帳戶的使用者,對回復 MZR 中的 SQL Server 執行 RDP ,並開啟 PowerShell 階段作業。

  2. <hostname3> 新增至 WSFC 叢集,名稱為 <clustername> 例如 wsfc01 ,然後在新節點上啟用 Always On 可用性群組。

    $sqldb03 = "<hostname3>"
    $cluster = "<clustername>"
    Get-Cluster -Name $cluster | Add-ClusterNode -Name $sqldb03
    Enable-SqlAlwaysOn -ServerInstance $sqldb03 -Force
    

建立端點

  1. 使用來自 SQL Admins 群組帳戶的使用者,對回復 MZR 中的 SQL Server 執行 RDP ,並開啟 PowerShell 階段作業。

  2. 若要參與 Always On 可用性群組,伺服器實例需要自己的端點,其使用 TCP 埠 5022 在管理可用性抄本的伺服器實例之間傳送及接收資料流量。

  3. 下列 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 清單中:

  1. 在主要抄本主機上啟動 SQL Server Management Studio (SSMS) ,並連接至主要抄本。
  2. 展開 安全,然後用滑鼠右鍵按一下 登入 ,並選取 新建登入
  3. 按一下 搜尋 並輸入使用者帳戶 \sqlserver\sqlsvc,然後按一下 確定
  4. 用滑鼠右鍵按一下所建立的登入,然後選取 內容
  5. 按一下 安全項目,然後按一下 搜尋
  6. 在「新增物件」對話框中,選取 特定物件 ,然後按一下 確定
  7. 在「選取物件」對話框中,按一下 物件類型 ,然後選取 端點
  8. 按一下 瀏覽 以選取物件名稱。
  9. 選取 Hadr_endpoint ,然後按一下 確定
  10. 在 Hadr_endpoint 的許可權中,明確授與此物件的連接許可權。

傳送測試資料庫

  1. 使用來自 SQL Admins 群組帳戶的使用者,對回復 MZR 中的 SQL Server 執行 RDP ,並開啟 PowerShell 階段作業。

  2. Prepare the secondary database by using the Backup-SqlDatabase and Restore-SqlDatabase commands to create a backup of the TestDatabase on <hostname1> on TempShare 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 可用性群組的次要抄本

  1. 使用來自 SQL Admins 群組帳戶的使用者,對回復 MZR 中的 SQL Server 執行 RDP ,並開啟 PowerShell 階段作業。

  2. 若要確保您未收到路徑錯誤,請使用 Invoke-SQLCmd ,這會強制載入 SQL PowerShell 程式庫,然後可透過 PowerShell 磁碟機樹狀結構存取該程式庫。 PowerShell 會處理 SQL Server 中的物件,類似於目錄中的檔案。 將 <hostname3> 取代為 SQL Server 的主機名稱:

    invoke-sqlcmd
    cd SQLSERVER:\SQL\<hostname3>
    
  3. 若要建立可用性群組抄本,請使用 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
    
  4. 使用下列指令將次要抄本結合至可用性群組。 結合會將次要資料庫置於 ONLINE 狀態,並起始與對應主要資料庫的資料同步化。 資料同步化是在次要資料庫上重新產生主要資料庫變更的程序。 資料同步化包括將交易日誌記錄傳送至次要資料庫的主要資料庫。

    $sqldb03 = "<hostname3>"
    $ag = "<availability_group>"
    $sqldb03 = "sqldb03"
    $ag = "AG01"
    $pathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT"
    Join-SqlAvailabilityGroup -Path $pathsqldb03 -Name $ag -ClusterType WSFC
    
  5. 將每一個次要資料庫結合至可用性群組,以啟動資料同步化:

    $sqldb03 = "<hostname3>"
    $ag = "<availability_group>"
    $agpathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT\AvailabilityGroups\" + $ag
    Add-SqlAvailabilityDatabase -Path $agpathsqldb03 -Database "TestDatabase"
    
  6. 使用 dir 指令來驗證新可用性群組的內容 (例如, dir SQLSERVER:\SQL\sqldb01\DEFAULT\AvailabilityGroups\AG01)。

  7. 使用下列指令,以容許 TCP 6789 通過 Windows 防火牆:

    New-NetFirewallRule -DisplayName 'SQL-dnnlsnr-6789-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 6789