設定 SQL Server AlwaysOn 可用性群組

如果您在 Compute Engine 上執行多個 SQL Server Enterprise 執行個體,您可以設定讓這些執行個體使用 Windows Server Failover Clustering 與 SQL Server AlwaysOn Availability Groups 來支援高可用性與災難復原功能。

本教學課程將說明如何在必要的網路設定之下使用 SQL Server Enterprise 建立執行個體叢集,以及設定這些執行個體來使用 Windows Server Failover Clustering 與 SQL Server AlwaysOn Availability Groups。您可以使用從 SQL Server 公開映像檔Microsoft 授權行動性建立的 SQL Server Enterprise 執行個體。

必備條件

本教學課程假設您瞭解下列項目:

設定虛擬私人雲端網路

建立含有三個子網路的自訂模式 VPC 網路。然後,設定防火牆規則以允許內部虛擬機器之間的流量。如有必要,您可以針對這項工作使用現有網路,但最佳做法是將系統隔離成不同的網路與子網路。本教學課程預期您會建立下列 VPC 網路與子網路設定:

  1. 建立自訂模式 VPC 網路。

    gcloud compute networks create wsfcnet --subnet-mode custom
    
  2. 將三個子網路新增至虛擬私人雲端網路。

    gcloud compute networks subnets create wsfcsubnet1 --network wsfcnet \
    --region us-central1 --range 10.0.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet2 --network wsfcnet \
    --region us-central1 --range 10.1.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet3 --network wsfcnet \
    --region us-central1 --range 10.2.0.0/24
    
  3. 建立防火牆規則以允許新虛擬私人雲端網路的內部 IP 位址上執行個體之間的流量。

    gcloud compute firewall-rules create allow-internal-ports \
    --network wsfcnet --allow tcp:1-65535,udp:1-65535,icmp \
    --source-ranges 10.0.0.0/24,10.1.0.0/24,10.2.0.0/24
    
  4. 建立防火牆規則以允許虛擬私人雲端網路的通訊埠 3389 上的遠端桌面協定。

    gcloud compute firewall-rules create allow-rdp --network wsfcnet \
    --allow tcp:3389 --source-ranges 0.0.0.0/0
    

建立 Windows 網域控制站

建立 Windows 網域控制站。針對本教學課程,網域為 dbeng.com,網域控制站名稱為 IP位址 10.2.0.100 上的 dc-windows。網域控制站使用 wsfcsubnet3 子網路。

  1. 建立執行個體做為網域控制站使用。在本教學課程中,指定小型 n1-standard-2 機器類型與 windows-2016 映像檔系列中的最新映像檔。

    gcloud compute instances create dc-windows --machine-type n1-standard-2 \
    --boot-disk-type pd-ssd --image-project windows-cloud \
    --image-family windows-2016 --boot-disk-size 200GB \
    --zone us-central1-f --subnet wsfcsubnet3 --private-network-ip=10.2.0.100
    
  2. 產生密碼,這樣您就能使用本機帳戶連線至網域控制站 VM。請記下這組使用者名稱和密碼,以供日後使用。

  3. 使用遠端桌面協定以及您的本機帳戶使用者名稱與密碼,連線至網域控制站 VM。

  4. 在執行個體上,以管理員身分執行 PowerShell 以開啟 PowerShell 終端機。

  5. 設定管理員使用者。

    1. 執行以下指令,接著輸入一組密碼,之後您也將以同組密碼操作管理員帳戶。

      PS C:\> $Password = Read-Host -AsSecureString
      

      請記下您輸入的密碼。您將使用這組密碼登入管理員帳戶。

    2. 設定管理員帳戶密碼。

      PS C:\> Set-LocalUser -Name Administrator -Password $Password
      
    3. 啟用管理員帳戶。

      PS C:\> Enable-LocalUser -Name Administrator
      
  6. 設定下列變數:

    PS C:\> $DomainName = "dbeng.com";
    
    PS C:\> $DomainMode = "Win2012R2";
    
    PS C:\> $ForestMode = "Win2012R2";
    
    PS C:\> $DatabasePath = "C:\Windows\NTDS";
    
    PS C:\> $LogPath = "C:\Windows\NTDS";
    
    PS C:\> $SysvolPath = "C:\Windows\SYSVOL";
    
  7. 安裝下列 Active Directory 工具:

    PS C:\> Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
    
    PS C:\> Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath $DatabasePath -LogPath $LogPath -SysvolPath $SysvolPath -DomainName $DomainName -DomainMode $DomainMode -ForestMode $ForestMode -InstallDNS:$true -NoRebootOnCompletion:$false -SafeModeAdministratorPassword ((Get-Credential).Password) -Force:$true
    
  8. 如果執行個體在建立網域之後未自動重新啟動,請手動重新啟動執行個體。

  9. 執行個體重新啟動後,請使用 Administrator 帳戶重新連線至新建立的網域名稱 (在本教學課程中為 dbeng.com)。

  10. 建立名為「sql_service」的網域帳戶,這個帳戶將用來執行 SQL Server。

    1. 在安全無虞的情況下,輸入要用於 SQL Server 服務帳戶的密碼。

      PS C:\> $Password = Read-Host -AsSecureString
      

      請記下您輸入的密碼。您將使用這組密碼登入 SQL Server 服務帳戶。

    2. 建立 SQL Server 服務帳戶,並設定帳戶的密碼。

      PS C:\> New-LocalUser -Name "sql_service" -Description "SQL Agent and SQL Admin account."  -Password $Password
      

網域控制站已經設定完成,您可以中斷與 dc-windows 執行個體之間的連線。接下來請建立可用性群組的執行個體

建立可用性群組的執行個體

請建立可用性群組的 SQL Server 執行個體。這些執行個體使用下列 IP 位址設定與別名 IP

  • 執行個體名稱:cluster-sql1
    • 內部 IP 位址:10.0.0.4
    • Windows 容錯移轉叢集名稱:cluster-ag
    • 容錯移轉叢集 IP 位址:10.0.0.5 (別名 IP)
    • 可用性群組名稱:cluster-listener
    • 可用性群組接聽程式位址:10.0.0.6 (別名 IP)
  • 執行個體名稱:cluster-sql2
    • 內部 IP 位址:10.1.0.4
    • Windows 容錯移轉叢集名稱:cluster-ag
    • 容錯移轉叢集 IP 位址:10.1.0.5 (別名 IP)
    • 可用性群組名稱:cluster-listener
    • 可用性群組接聽程式位址:10.1.0.6 (別名 IP)

使用下列其中一種方法建立 SQL Server 執行個體:

SQL Server 公開映像檔

從公開 SQL Server 映像檔建立兩個執行個體。在這個範例中,將執行個體命名為 cluster-sql1cluster-sql2。指定 200GB 開機磁碟大小與 n1-highmem-4 機器類型。SQL Server 執行個體需要的計算資源通常比網域控制站執行個體多。如果您之後需要其他計算資源,可以變更這些執行個體的機器類型。如果您需要其他儲存空間,請新增磁碟或調整永久開機磁碟的大小。您可在較大的可用性群組中建立數個執行個體。

此外,請包含 --metadata sysprep-specialize-script-ps1 標記以在安裝 Failover-Clustering 功能的執行個體建立期間執行 PowerShell 指令。

在這個範例中,使用下列指令建立兩個執行個體:

gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet1,private-network-ip=10.0.0.4,aliases=10.0.0.5;10.0.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet2,private-network-ip=10.1.0.4,aliases=10.1.0.5;10.1.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"

針對較大的可用性群組,您可以使用適當的 IP 位址建立其他執行個體。

現有授權

如果您要透過軟體保證,根據 Microsoft 授權行動性為 SQL Server Enterprise 引用您自己的授權,請在啟用 --guestOSFeatures 的情況下建立 Windows 映像檔。然後,稍後手動安裝 SQL Server Enterprise。

  1. 建立 Windows Server 執行個體
  2. 在該執行個體上,將所有元件更新為最新版本。
  3. 針對該執行個體的開機磁碟,將自動刪除狀態設定false
  4. 刪除執行個體
  5. 使用其上的標準 Windows Server 映像檔建立暫時磁碟。

    gcloud compute disks create windows-2012-disk-new --size 200 \
    --zone us-central1-f --type pd-ssd --image-family windows-2012-r2 \
    --image-project windows-cloud
    
  6. guestOSFeatures 參數中啟用 MULTI_IP_SUBNET 的情況下,從新磁碟建立自訂 Windows Server 映像檔。

    gcloud beta compute images create windows-server-2012-r2-dc-new \
    --source-disk windows-2012-disk-new --source-disk-zone us-central1-f \
    --guest-os-features MULTI_IP_SUBNET
    
  7. 建立映像檔之後,刪除暫時磁碟。

    gcloud compute disks delete windows-2012-disk-new --zone us-central1-f
    
  8. 使用自訂映像檔為您的可用性群組建立新 SQL Server 執行個體。SQL Server 執行個體需要的運算資源通常比網域控制站執行個體多,因此請指定至少一個 n1-highmem-4 機器類型。如果您稍後需要其他運算資源,可以變更這些執行個體的機器類型。如果您需要其他儲存空間,請新增磁碟或調整永久開機磁碟的大小。您可在較大的可用性群組中建立數個執行個體。在這個範例中,建立兩個執行個體。

    gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet1 --private-network-ip=10.0.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
    gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet2 --private-network-ip=10.1.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
  9. 在每個執行個體上,手動安裝 SQL Server Enterprise。

在您建立執行個體之後,設定使其具有像可用性群組一樣的功能。

  1. 使用遠端桌面協定連線方式連線至兩個執行個體
  2. 變更兩個執行個體以使用靜態 IP 位址及將網路遮罩設定為 255.255.0.0。以管理員身分開啟 PowerShell 終端機,並將靜態 IP 位址設定為靜態。這些指令可能會終止您的遠端桌面連線:

    • 執行個體 1:

      PS C:\> netsh interface ip set address name=Ethernet static 10.0.0.4 255.255.0.0 10.0.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
    • 執行個體 2:

      PS C:\> netsh interface ip set address name=Ethernet static 10.1.0.4 255.255.0.0 10.1.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
  3. 將兩個執行個體新增至 Windows 網域。以管理員身分開啟 PowerShell 並在兩個執行個體上執行下列 Add-Computer 指令:

    PS C:\> Add-Computer -DomainName "dbeng.com" -Credential "dbeng.com\Administrator" -Restart -Force
    

    指令會提示您輸入憑證。指令執行結束後,執行個體會重新啟動。

  4. 使用遠端桌面協定重新連線到執行個體,以設定 SQL Server 服務帳戶:

    1. 開啟 SQL Server 組態管理員。
    2. 選取 [SQL Server services] (SQL Server 服務) 分頁標籤,然後在 [SQL Server] 上按一下滑鼠右鍵,接著點選 [Properties] (內容)。
    3. sql_service 設定帳戶和密碼。

現在已經為可用性群組建立完執行個體。接下來,請設定容錯移轉叢集管理員

設定容錯移轉叢集管理員

為可用性群組中的執行個體啟用容錯移轉叢集,並將一個執行個體設定為透過容錯移轉叢集管理員的身分執行動作。為群組中的所有執行個體啟用「AlwaysOn 高可用性」。

  1. 使用遠端桌面協定重新連線至執行個體,但使用網域管理員憑證。在這個範例中,網域為 dbeng,管理員帳戶為 Administrator。如果您使用 Google Cloud Platform 適用的 Chrome 遠端桌面協定擴充功能,請在「Options」(選項) 選單的「Certificates」(憑證) 清單下刪除這些位址的現有遠端桌面協定憑證。

  2. 選取其中一個執行個體,並將其設定為以容錯移轉叢集管理員的身分執行。

    1. 以管理員的身分開啟 PowerShell,並設定能夠反映出叢集環境的變數。在這個範例中,設定下列變數:

      PS C:\> $node1 = "cluster-sql1"
      
      PS C:\> $node2 = "cluster-sql2"
      
      PS C:\> $nameWSFC = "cluster-dbclus" #Name of cluster
      
      PS C:\> $ipWSFC1 = "10.0.0.5" #IP address of cluster in subnet 1
      
      PS C:\> $ipWSFC2 = "10.1.0.5" #IP address of cluster in subnet 2
      
    2. 建立容錯移轉叢集:

      PS C:\> New-Cluster -Name $nameWSFC -Node $node1, $node2 -NoStorage -StaticAddress $ipWSFC1, $ipWSFC2
      
    3. 為叢集中的兩個節點啟用「AlwaysOn 高可用性」:

      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node1 -Force
      
      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node2 -Force
      
  3. 在沒有叢集管理員的第二個執行個體上,在 C:\SQLBackup 建立備份資料夾並將資料夾共用為 sql_service 帳戶的 \\cluster-sql2\SQLBackup,並授予讀寫權限。

  4. 在兩個執行個體上建立 C:\SQLDataC:\SQLLog 這兩個資料夾。請針對資料庫資料與記錄檔使用這些資料夾。

容錯移轉叢集管理員已準備就緒。接下來,請建立可用性群組

建立可用性群組

建立測試資料庫,並將其設定為使用新的可用性群組。 您也可為可用性群組指定現有資料庫。

  1. 如果您尚未設定好資料庫,請建立測試資料庫。在叢集管理員執行個體上,執行 SQL Server Management Studio 並使用下列 SQL 指令建立測試資料庫:

    CREATE DATABASE TestDB
    ON PRIMARY (NAME = 'TestDB_Data', FILENAME='C:\SQLData\TestDB_Data.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    LOG ON (NAME = 'TestDB_Log', FILENAME='C:\SQLLog\TestDB_Log.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    GO
    USE [TestDB]
    Exec dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [TestDB] SET RECOVERY FULL;
      GO
      BACKUP DATABASE TestDB to disk = '\\cluster-sql2\SQLBackup\TestDB.bak' WITH INIT
    GO
    
  2. 在叢集管理員執行個體上,執行 SQL Server Management Studio。

  3. 在 [AlwaysOn High Availability] (AlwaysOn 高可用性) 上按一下滑鼠右鍵,選取 [New Availability Group Wizard] (新增可用性群組精靈)

  4. 在「Specify Name」(指定名稱) 頁面上,設定可用性群組名稱。在這個範例中,請指定 cluster-ag

  5. 在「Select Databases」(選取資料庫) 頁面上,指定您要複製的資料庫。在這個範例中,請指定 TestDB 資料庫。

  6. 在「Specify Replicas」(指定複本) 頁面上,將兩個執行個體都設定為具有自動容錯移轉及同步認可功能的複本。

  7. 在「Select Data Synchronization」(選取資料同步處理) 頁面上,指定網路共用以保留資料庫備份供進行初始同步處理。在這個範例中,指定 \\cluster-sql2\SQLBackup

  8. 「Validation」(驗證) 頁面會產生警告,因為沒有接聽程式,但您可以忽略這個警告。

  9. 精靈執行完成後,在新可用性群組上按一下滑鼠右鍵並選取 [Add Listener]

  10. 指定此接聽程式的參數:

    • Listener DNS Name (接聽程式 DNS 名稱):cluster-listener
    • Network Port (網路連接埠):1433
    • Network Mode (網路模式):Static IP
  11. 新增兩個子網路與 IP 位址欄位。在這個範例中,使用下列子網路與 IP 位址組合:

    • 10.0.0.0/1610.0.0.6
    • 10.1.0.0/1610.1.0.6

現在您可以使用 cluster-listener 做為 SQL Server 資料庫的名稱取代執行個體的名稱連線至 SQL Server。此連線指向目前有效的執行個體。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件