Microsoft SQL Server Always On 可用性群組可讓您跨多個 SQL Server Enterprise 執行個體複製資料庫。
與 SQL Server 容錯移轉叢集執行個體類似,Always On 可用性群組會使用 Windows Server 容錯移轉叢集 (WSFC) 實作高可用性。不過,這兩項功能在以下方面有所不同:
Always On 可用性群組 | 容錯移轉叢集執行個體 | |
---|---|---|
容錯移轉範圍 | 資料庫群組 | 執行個體 |
儲存空間 | 未共用 | 共用 |
如需更詳細的比較,請參閱容錯移轉叢集執行個體與可用性群組的比較。
Always On 可用性群組支援多種可用性模式。本教學課程說明如何以同步認可模式部署 Always On 可用性群組,為一或多個資料庫實作高可用性。
在設定過程中,您將建立三個 VM 執行個體。兩個 VM 執行個體 (node-1
和 node-2
) 會做為叢集節點,並執行 SQL Server。第三個 VM 執行個體 witness
用於在容錯移轉情境中達成仲裁。這三個 VM 執行個體分布在三個區域,並共用一個子網路。
使用 SQL Server Always On 可用性群組時,範例資料庫 bookshelf
會在兩個 SQL Server 執行個體之間同步複製。
在內部部署的 Windows 叢集環境中,位址解析通訊協定 (ARP) 公告會觸發 IP 位址容錯移轉。Google Cloud,但會忽略 ARP 公告。因此,您必須實作下列其中一個選項:使用內部負載平衡器和分散式網路名稱 (DNN)。
本文假設您已在 Google Cloud上部署 Active Directory,且具備 SQL Server、Active Directory 和 Compute Engine 的基本知識。如要進一步瞭解 Active Directory,請參閱 Google Cloud「事前準備」一節。
使用 SQL Server Always On 可用性群組時,範例資料庫 bookshelf
會在兩個 SQL Server 執行個體之間同步複製。內部負載平衡器可確保流量導向有效節點。
如要進一步瞭解搭配內部負載平衡器的 Windows Server 容錯移轉叢集,請參閱容錯移轉叢集。
這張圖包含下列項目:
- 兩個 VM 執行個體位於相同區域,但可用區不同,用於容錯移轉叢集,分別稱為
node-1
和node-2
。一個節點會代管 SQL Server 資料庫的主要副本,另一個節點則代管次要副本。 - 第三部 VM 稱為
witness
,做為檔案共用見證,提供關鍵票並達成仲裁,以利容錯移轉。 - 叢集前端的內部負載平衡器會為 SQL Server 用戶端提供單一端點,並使用健康狀態檢查確保流量會導向有效節點。
目標
本教學課程旨在達成下列目標:
費用
本教學課程使用 Google Cloud的計費元件,包括:
使用 Pricing Calculator,根據您的預測使用量來產生預估費用。
事前準備
如要完成本教學課程中的工作,請確認下列事項:
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 您擁有 Active Directory 網域,且至少有一個網域控制器。您可以使用 Managed Microsoft AD 建立 Active Directory 網域。或者,您也可以在 Compute Engine 上部署自訂 Active Directory 環境,並設定私人 DNS 轉送區域,將 DNS 查詢轉送至網域控制站。
-
您有權限將電腦加入網域,並可使用 RDP 登入 Active Directory 使用者。如果您使用受管理的 Microsoft AD,可以透過
setupadmin
使用者。如要進一步瞭解如何佈建 Active Directory 使用者帳戶,請參閱「佈建 Active Directory 使用者帳戶」一文。 - Google Cloud 專案和虛擬私有雲 (VPC),並連線至 Active Directory 網域控制站。
- 用於 Windows Server 容錯移轉叢集 VM 執行個體的子網路。 完成本教學課程後,您可以刪除建立的資源以避免繼續計費。詳情請參閱「清除所用資源」一節。
準備專案和網路
如要部署 SQL Server Always On 可用性群組,您必須先準備Google Cloud 專案和虛擬私有雲,以利部署作業。以下各節將詳細說明如何完成這項操作。
設定專案和區域
如要準備 Google Cloud 專案以部署 SQL Server Always On 可用性群組,請完成下列步驟:
在 Google Cloud 控制台中,按一下「啟用 Cloud Shell」
按鈕,開啟 Cloud Shell。
初始化下列變數。
VPC_NAME=
VPC_NAME
SUBNET_NAME=SUBNET_NAME
更改下列內容:
VPC_NAME
:虛擬私有雲名稱SUBNET_NAME
:子網路名稱
設定預設的專案 ID。
gcloud config set project
PROJECT_ID
將
PROJECT_ID
替換為專案 ID。 Google Cloud設定預設區域。
gcloud config set compute/region
REGION
將
REGION
替換為要部署的地區 ID。
建立防火牆規則
如要允許用戶端連線至 SQL Server,以及叢集節點之間的通訊,您需要建立多項防火牆規則。您可以使用網路標記簡化這些防火牆規則的建立程序,如下所示:
- 兩個叢集節點會以
wsfc-node
標記加上註解。 - 所有伺服器 (包括
witness
) 都以wsfc
標記加上註解。
如要建立使用這些網路標記的防火牆規則,請按照下列步驟操作:
- 返回現有的 Cloud Shell 工作階段。
建立防火牆規則,允許叢集節點之間的流量。
SUBNET_CIDR=$(gcloud compute networks subnets describe $SUBNET_NAME --format=value\('ipCidrRange'\)) gcloud compute firewall-rules create allow-all-between-wsfc-nodes \ --direction=INGRESS \ --action=allow \ --rules=tcp,udp,icmp \ --enable-logging \ --source-tags=wsfc \ --target-tags=wsfc \ --network=$VPC_NAME \ --priority 10000 gcloud compute firewall-rules create allow-sql-to-wsfc-nodes \ --direction=INGRESS \ --action=allow \ --rules=tcp:1433 \ --enable-logging \ --source-ranges=$SUBNET_CIDR \ --target-tags=wsfc-node \ --network=$VPC_NAME \ --priority 10000
建立 VM 執行個體
建立並部署兩個 VM 執行個體,做為容錯移轉叢集。在任何時間點,其中一個 VM 會代管 SQL Server 資料庫的主要副本,另一個節點則代管次要副本。這兩個 VM 執行個體必須符合下列條件:
- 位於相同區域,以便內部直通式網路負載平衡器存取。
- 已安裝 Windows Server 容錯移轉叢集和 SQL Server。
- 啟用 Compute Engine WSFC 支援。
使用預先安裝 SQL Server 2022 的 SQL Server 進階映像檔。
如要針對容錯移轉情境提供關鍵票並達成仲裁,請按照下列步驟部署第三部 VM,做為檔案共用見證:
- 返回現有的 Cloud Shell 工作階段。
為 WSFC 節點建立專用指令碼。這個指令碼會安裝必要的 Windows 功能,並為 WSFC 和 SQL Server 建立防火牆規則。
cat << "EOF" > specialize-node.ps1 $ErrorActionPreference = "stop" # Install required Windows features Install-WindowsFeature Failover-Clustering -IncludeManagementTools Install-WindowsFeature RSAT-AD-PowerShell # Open firewall for WSFC netsh advfirewall firewall add rule name="Allow WSFC health check" dir=in action=allow protocol=TCP localport=59998 # Open firewall for SQL Server netsh advfirewall firewall add rule name="Allow SQL Server" dir=in action=allow protocol=TCP localport=1433 # Open firewall for SQL Server replication netsh advfirewall firewall add rule name="Allow SQL Server replication" dir=in action=allow protocol=TCP localport=5022 # Format data disk Get-Disk | Where partitionstyle -eq 'RAW' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -NewFileSystemLabel 'Data' -Confirm:$false # Create data and log folders for SQL Server md d:\Data md d:\Logs EOF
建立 VM 執行個體。在做為叢集節點的兩個 VM 上,附加額外的資料磁碟,並將中繼資料鍵
enable-wsfc
設為true
,啟用 Windows Server 容錯移轉叢集:REGION=$(gcloud config get-value compute/region) ZONE1=
ZONE1
ZONE2=ZONE2
ZONE3=ZONE3
PD_SIZE=200 MACHINE_TYPE=n2-standard-8 gcloud compute instances create node-1 \ --zone $ZONE1 \ --machine-type $MACHINE_TYPE \ --subnet $SUBNET_NAME \ --image-family sql-ent-2022-win-2022 \ --image-project windows-sql-cloud \ --tags wsfc,wsfc-node \ --boot-disk-size 50 \ --boot-disk-type pd-ssd \ --boot-disk-device-name "node-1" \ --create-disk=name=node-1-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --metadata enable-wsfc=true \ --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1 gcloud compute instances create node-2 \ --zone $ZONE2 \ --machine-type $MACHINE_TYPE \ --subnet $SUBNET_NAME \ --image-family sql-ent-2022-win-2022 \ --image-project windows-sql-cloud \ --tags wsfc,wsfc-node \ --boot-disk-size 50 \ --boot-disk-type pd-ssd \ --boot-disk-device-name "node-2" \ --create-disk=name=node-2-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --metadata enable-wsfc=true \ --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1 gcloud compute instances create "witness" \ --zone $ZONE3 \ --machine-type e2-medium \ --subnet $SUBNET_NAME \ --image-family=windows-2022 \ --image-project=windows-cloud \ --tags wsfc \ --boot-disk-size 50 \ --boot-disk-type pd-ssd \ --metadata sysprep-specialize-script-ps1="add-windowsfeature FS-FileServer"根據您使用的區域,替換 ZONE1、ZONE2、ZONE3。
如要將這三個 VM 執行個體加入 Active Directory,請針對每個 VM 執行個體執行下列操作:
查看 VM 的序列埠輸出內容,監控初始化程序。
gcloud compute instances tail-serial-port-output
NAME
將
NAME
替換為 VM 執行個體名稱。等待幾分鐘,直到看到
Instance setup finished
輸出內容,然後按下 Ctrl+C。此時,VM 執行個體已可供使用。使用遠端桌面連線至 VM,並使用上一步建立的使用者名稱和密碼登入。
以滑鼠右鍵按一下「開始」按鈕 (或按 Win+X 鍵),然後按一下「Windows PowerShell (系統管理員)」。
按一下「是」,確認提升權限提示。
將電腦加入 Active Directory 網域,然後重新啟動。
Add-Computer -Domain
DOMAIN -Restart
將
DOMAIN
換成 Active Directory 網域的 DNS 名稱。輸入有權將 VM 加入網域的帳戶憑證
等待 VM 重新啟動。您現在已將 VM 執行個體加入 Active Directory。
預留靜態 IP 位址
您現在已在虛擬私有雲中保留兩個靜態 IP 位址。一個 IP 位址會做為預設的 WSFC 叢集 IP 位址,另一個則做為 SQL Server 可用性群組接聽程式的靜態 IP。
在 WSFC 叢集中,叢集 IP 位址主要用於管理用途和存取叢集資源。這個虛擬 IP 位址會指派給叢集本身,方便管理員管理叢集及執行各項工作,例如設定叢集設定、監控節點健康狀態,以及管理容錯移轉程序。
在 SQL Server 可用性群組的環境中,接聽程式是虛擬網路名稱 (VNN) 和 IP 位址,可讓用戶端連線至可用性群組,不必知道哪個特定伺服器是主要節點。
內部負載平衡器需要內部 IP 位址,才能有效率地轉送內部流量,並在 WSFC 叢集環境中支援高可用性和負載平衡。內部負載平衡器可確保要求一律導向叢集的目前主要副本。在容錯移轉事件期間,負載平衡器會偵測主要副本的變更,並將用戶端連線重新導向至新的主要副本,無須手動介入,可將停機時間降至最低,並確保資料庫服務持續可用。
在搭配 SQL Server Always On 可用性群組的 WSFC 中,預設 WSFC 叢集 IP 位址和可用性群組接聽程式的保留內部靜態 IP 位址,也會由相關聯的內部負載平衡器使用。
如要在 VPC 中保留兩個靜態 IP 位址,請按照下列步驟操作。
gcloud compute addresses create wsfc-cluster-ip \ --subnet $SUBNET_NAME \ --region $(gcloud config get-value compute/region) && \ CLUSTER_IP=$(gcloud compute addresses describe wsfc-cluster-ip \ --region $(gcloud config get-value compute/region) \ --format=value\(address\)) && \ echo "cluster IP: $CLUSTER_IP"
取代
CLUSTER_IP
變數中的叢集 IP 位址,稍後需要指定為叢集 IP:CLUSTER_IP=
CLUSTER_IP
為可用性群組接聽程式預留另一個靜態 IP,並在名為
LISTENER_IP
的新環境變數中擷取位址。gcloud compute addresses create wsfc-listener-ip \ --subnet $SUBNET_NAME \ --region $(gcloud config get-value compute/region) LISTENER_IP=$(gcloud compute addresses describe wsfc-listener-ip \ --region $(gcloud config get-value compute/region) \ --format=value\(address\)) && \ echo "Listener IP: $LISTENER_IP"
將負載平衡器的保留 IP 位址替換為
LISTENER_IP
變數,稍後設定可用性群組時會用到。LISTENER_IP=
LISTENER_IP
專案和 VPC 現在已準備好部署 Windows Server 容錯移轉叢集和 SQL Server。
部署容錯移轉叢集
現在您可以使用 VM 執行個體部署 Windows Server 容錯移轉叢集和 SQL Server。以下各節將詳細說明如何執行這項操作。
準備 SQL Server
按照下列步驟,在 Active Directory 中為 SQL Server 建立新的使用者帳戶。
node-1
使用遠端桌面連線。 使用網域使用者帳戶登入。- 以滑鼠右鍵按一下「開始」按鈕 (或按下 Win+X 鍵),然後按一下「Windows PowerShell (系統管理員)」。
- 按一下「是」,確認提升權限提示。
為 SQL Server 和 SQL 代理程式建立網域使用者帳戶,並指派密碼:
$Credential = Get-Credential -UserName sql_server -Message 'Enter password' New-ADUser ` -Name "sql_server" ` -Description "SQL Admin account." ` -AccountPassword $Credential.Password ` -Enabled $true -PasswordNeverExpires $true
如要在 node-1
和 node-2
上設定 SQL Server,請按照下列步驟操作:
- 開啟 SQL Server 設定管理員。
- 在導覽窗格中,選取「SQL Server Services」。
- 在服務清單中,以滑鼠右鍵按一下「SQL Server (MSSQLSERVER)」,然後選取「內容」。
在「以以下身分登入」下方,按照下列步驟變更帳戶:
- 帳戶名稱:
DOMAIN\sql_server
其中DOMAIN
是 Active Directory 網域的 NetBIOS 名稱。 - 密碼:輸入先前選擇的密碼。
- 帳戶名稱:
按一下 [確定]。
系統提示重新啟動 SQL Server 時,請選取「是」。
SQL Server 現在會以網域使用者帳戶執行。
<0x0建立檔案共用區
在 VM 執行個體 witness
上建立兩個檔案共用區,以便儲存 SQL Server 備份並做為檔案共用見證:
- 使用遠端桌面連線至
witness
。 使用網域使用者帳戶登入。 - 以滑鼠右鍵按一下「開始」按鈕 (或按 Win+X 鍵),然後按一下「Windows PowerShell (系統管理員)」。
- 按一下「是」,確認提升權限提示。
建立見證檔案共用,並授予自己和兩個叢集節點檔案共用存取權。
New-Item "C:\QWitness" –type directory icacls C:\QWitness\ /grant 'node-1$:(OI)(CI)(M)' icacls C:\QWitness\ /grant 'node-2$:(OI)(CI)(M)' New-SmbShare ` -Name QWitness ` -Path "C:\QWitness" ` -Description "SQL File Share Witness" ` -FullAccess $env:username,node-1$,node-2$
建立另一個檔案共用來儲存備份,並授予 SQL Server 完整存取權:
New-Item "C:\Backup" –type directory New-SmbShare ` -Name Backup ` -Path "C:\Backup" ` -Description "SQL Backup" ` -FullAccess $env:USERDOMAIN\sql_server
建立容錯移轉叢集
如要建立容錯移轉叢集,請按照下列步驟操作:
- 返回
node-1
的遠端桌面工作階段。 - 以滑鼠右鍵按一下「開始」按鈕 (或按 Win+X 鍵),然後按一下「Windows PowerShell (系統管理員)」。
- 按一下「是」,確認提升權限提示。
建立新叢集。
New-Cluster ` -Name sql-cluster ` -Node node-1,node-2 ` -NoStorage ` -StaticAddress
CLUSTER_IP
將
CLUSTER_IP
替換為您先前建立的叢集 IP 位址。返回
witness
上的 PowerShell 工作階段,授予叢集的虛擬電腦物件存取檔案共用區的權限。icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)' Grant-SmbShareAccess ` -Name QWitness ` -AccountName 'sql-cluster$' ` -AccessRight Full ` -Force
返回
node-1
的 PowerShell 工作階段,將叢集設為使用witness
的檔案共用做為叢集仲裁。Set-ClusterQuorum -FileShareWitness \\witness\QWitness
確認叢集已成功建立。
Test-Cluster
您可能會看到下列警告,但可以放心忽略。
WARNING: System Configuration - Validate All Drivers Signed: The test reported some warnings.. WARNING: Network - Validate Network Communication: The test reported some warnings.. WARNING: Test Result: HadUnselectedTests, ClusterConditionallyApproved Testing has completed for the tests you selected. You should review the warnings in the Report. A cluster solution is supported by Microsoft only if you run all cluster validation tests, and all tests succeed (with or without warnings).
您也可以執行
cluadmin.msc
,藉此啟動容錯移轉叢集管理員 MMC 嵌入式管理單元,並查看叢集的健康狀態。如果您使用 Managed AD,請將 Windows 叢集使用的電腦帳戶新增至「Cloud Service Domain Join Accounts」群組,這樣該帳戶就能將電腦加入網域。
Add-ADGroupMember ` -Identity "Cloud Service Domain Join Accounts" ` -Members sql-cluster$
在兩個節點上啟用 Always On 可用性群組。
Enable-SqlAlwaysOn -ServerInstance node-1 -Force Enable-SqlAlwaysOn -ServerInstance node-2 -Force
建立可用性群組
現在請建立範例資料庫 bookshelf
,將其納入名為 bookshelf-ag
的新可用性群組,並設定高可用性。
建立資料庫
建立新的資料庫。為配合本教學課程,資料庫不需要包含任何資料。
- 返回
node-1
的遠端桌面工作階段。 - 開啟 SQL Server Management Studio。
- 在「連線到伺服器」對話方塊中,確認伺服器名稱已設為
node-1
,然後選取「連線」。 - 在選單中,依序選取「檔案」>「新增」>「使用目前連線查詢」。
將下列 SQL 指令碼貼到編輯器中:
-- Create a sample database CREATE DATABASE bookshelf ON PRIMARY ( NAME = 'bookshelf', FILENAME='d:\Data\bookshelf.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB) LOG ON ( NAME = 'bookshelf_log', FILENAME='d:\Logs\bookshelf.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB) GO USE [bookshelf] SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON GO -- Create sample table CREATE TABLE [dbo].[Books] ( [Id] [bigint] IDENTITY(1,1) NOT NULL, [Title] [nvarchar](max) NOT NULL, [Author] [nvarchar](max) NULL, [PublishedDate] [datetime] NULL, [ImageUrl] [nvarchar](max) NULL, [Description] [nvarchar](max) NULL, [CreatedById] [nvarchar](max) NULL, CONSTRAINT [PK_dbo.Books] PRIMARY KEY CLUSTERED ([Id] ASC) WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO -- Create a backup EXEC dbo.sp_changedbowner @loginame = 'sa', @map = false; ALTER DATABASE [bookshelf] SET RECOVERY FULL; GO BACKUP DATABASE bookshelf to disk = '\\witness\Backup\bookshelf.bak' WITH INIT GO
指令碼會建立含有單一資料表的新資料庫,並執行初始備份至
witness
。選取「執行」即可執行 SQL 指令碼。
設定高可用性
您現在可以使用 T-SQL 或 SQL Server Management Studio,為可用性群組設定高可用性。
使用 T-SQL
如要使用 T-SQL 為可用性群組設定高可用性,請按照下列步驟操作:
連線至
node-1
,然後執行下列指令碼,建立 bookshelf-ag 可用性群組。CREATE LOGIN [
NET_DOMAIN
\sql_server] FROM WINDOWS; GO USE [bookshelf]; CREATE USER [NET_DOMAIN
\sql_server] FOR LOGIN [NET_DOMAIN
\sql_server]; GO USE [master]; CREATE ENDPOINT bookshelf_endpoint STATE=STARTED AS TCP (LISTENER_PORT=5022) FOR DATABASE_MIRRORING (ROLE=ALL); GO GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN
\sql_server] GO連線至
node-2
並執行下列指令碼。CREATE LOGIN [
NET_DOMAIN
\sql_server] FROM WINDOWS; GO CREATE ENDPOINT bookshelf_endpoint STATE=STARTED AS TCP (LISTENER_PORT=5022) FOR DATABASE_MIRRORING (ROLE=ALL); GO GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN
\sql_server] GO在
node-1
上執行下列指令碼,建立bookshelf-ag
可用性群組。USE master; GO CREATE AVAILABILITY GROUP [bookshelf-ag] WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY, CLUSTER_TYPE = WSFC, DB_FAILOVER = ON ) FOR DATABASE [bookshelf] REPLICA ON N'node-1' WITH ( ENDPOINT_URL = 'TCP://node-1:5022', AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, FAILOVER_MODE = AUTOMATIC, BACKUP_PRIORITY = 50, SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS = NO) ), N'node-2' WITH ( ENDPOINT_URL = 'TCP://node-2:5022', AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, FAILOVER_MODE = AUTOMATIC, BACKUP_PRIORITY = 50, SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS = NO) ); GO
在下列指令碼中,將
LISTENER_IP
替換為您先前為內部負載平衡器保留的 IP 位址,然後執行指令碼。USE master; GO ALTER AVAILABILITY GROUP [bookshelf-ag] ADD LISTENER N'bookshelf' ( WITH IP ( (N'
', N'255.255.255.0') ), PORT = 1433); GOLISTENER_IP
連線至
node-2
,然後執行下列指令碼,將次要副本加入可用性群組,並啟用自動植入。USE master; GO ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN; ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
檢查可用性群組的狀態。
SELECT * FROM sys.dm_hadr_availability_group_states; GO
畫面上會顯示「
synchronization_health_desc
」為「HEALTHY
」
使用 SQL Server Management Studio
如要使用 SQL Server Management Studio 為可用性群組設定高可用性,請按照下列步驟操作:
- 在「物件總管」視窗中,以滑鼠右鍵按一下「Always On High Availability」,然後選取「New Availability Group Wizard」。
- 在「Specify Options」(指定選項) 頁面上,將可用性群組名稱設為
bookshelf-ag
,然後選取「Next」(下一步)。 - 在「Select Databases」(選取資料庫) 頁面上,選取
bookshelf
資料庫,然後選取「Next」(下一步)。 在「Specify Replicas」(指定副本) 頁面上,選取「Replicas」(副本) 分頁標籤。
- 選取「新增副本」。
在「連線到伺服器」對話方塊中,輸入伺服器名稱
node-2
,然後選取「連線」。可用性副本清單現在包含 SQL Server 執行個體、
node-1
和node-2
。將兩個執行個體的「可用性模式」設為「同步認可」。
將兩個執行個體的「Automatic failover」(自動容錯移轉) 設為「Enabled」(啟用)。
選取「Listener」分頁標籤
- 選取「建立可用性群組接聽程式」。
輸入下列設定。
- 接聽程式 DNS 名稱:
bookshelf
- Port (通訊埠):
1433
- 網路模式:靜態 IP
- 接聽程式 DNS 名稱:
選取「新增」,然後輸入先前為內部負載平衡器預留的接聽程式 IP 位址 (
)。然後選取「確定」。LISTENER_IP
選取「下一步」。
在「Select Data Synchronization」(選取資料同步處理) 頁面上,選取「Automatic Seeding」(自動播種)。
在「驗證」頁面中,確認所有檢查都成功。
在「摘要」頁面選取「完成」。
在「結果」頁面中,選取「關閉」。
建立內部負載平衡器和健康狀態檢查
叢集 IP 代表 Windows 容錯移轉叢集的單一端點。您可以使用這個工具進行管理,以及管理叢集資源。 叢集 IP 一律會指向叢集的主機 (或主要) 節點。您部署內部負載平衡器,並使用健康狀態檢查,確保流量會導向叢集的主機節點。由於 WSFC 工具需要多個通訊協定才能轉送 (ICMP、UDP 和 TCP),建議您部署支援所有通訊埠的多個通訊協定的內部負載平衡器。
如要部署內部負載平衡器,請按照下列步驟操作:
- 返回現有的 Cloud Shell 工作階段。
建立兩個非代管執行個體群組 (每個區域各一個),並將兩個節點新增至群組。
REGION=$(gcloud config get-value compute/region) gcloud compute instance-groups unmanaged create wsfc-group-1 --zone $ZONE1 gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $ZONE1 \ --instances node-1 gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $ZONE2 gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $ZONE2 \ --instances node-2
為叢集 IP 建立健康狀態檢查,供負載平衡器用來判斷哪個是 Windows 叢集角度的有效節點。Compute Engine 訪客代理程式回應健康狀態檢查的預設連接埠為
59998
。健康狀態檢查會在要求中提供叢集 IP 位址,並預期從運作中的節點傳回 1 做為回應。gcloud compute health-checks create tcp wsfc-healthcheck \ --request=$CLUSTER_IP \ --response=1 \ --check-interval="2s" \ --healthy-threshold=2 \ --unhealthy-threshold=2 \ --port=59998 \ --timeout="1s"
建立後端服務,並新增兩個現有的執行個體群組。
gcloud compute backend-services create wsfc-backend \ --load-balancing-scheme internal \ --region $REGION \ --health-checks wsfc-healthcheck \ --protocol UNSPECIFIED gcloud compute backend-services add-backend wsfc-backend \ --instance-group wsfc-group-1 \ --instance-group-zone $ZONE1 \ --region $REGION gcloud compute backend-services add-backend wsfc-backend \ --instance-group wsfc-group-2 \ --instance-group-zone $ZONE2 \ --region $REGION
建立與叢集 IP 相關聯的內部負載平衡器。
gcloud compute forwarding-rules create wsfc \ --load-balancing-scheme internal \ --address $CLUSTER_IP \ --ports ALL \ --network $VPC_NAME \ --subnet $SUBNET_NAME \ --region $REGION \ --ip-protocol L3_DEFAULT \ --backend-service wsfc-backend
如要為想連線至 bookshelf
可用性群組中任何資料庫的 SQL Server 用戶端提供單一端點,請部署專用於該可用性群組的新內部負載平衡器,並按照下列步驟操作:
為可用性群組接聽程式建立健康狀態檢查,供負載平衡器用來判斷
bookshelf
SQL Server 可用性群組中的主要節點。gcloud compute health-checks create tcp wsfc-bookshelf-healthcheck \ --request=$LISTENER_IP \ --response=1 \ --check-interval="2s" \ --healthy-threshold=1 \ --unhealthy-threshold=2 \ --port=59998 \ --timeout="1s"
健康狀態檢查會使用相同的 Compute Engine 訪客代理程式連接埠,但會在要求中提供可用性群組的接聽程式 IP 位址。
bookshelf
建立新的後端服務,並新增兩個執行個體群組。
gcloud compute backend-services create wsfc-bookshelf-backend \ --load-balancing-scheme internal \ --region $REGION \ --health-checks wsfc-bookshelf-healthcheck \ --protocol UNSPECIFIED gcloud compute backend-services add-backend wsfc-bookshelf-backend \ --instance-group wsfc-group-1 \ --instance-group-zone $ZONE1 \ --region $REGION gcloud compute backend-services add-backend wsfc-bookshelf-backend \ --instance-group wsfc-group-2 \ --instance-group-zone $ZONE2 \ --region $REGION
建立與 SQL Server
bookshelf-ag
可用性群組接聽程式相關聯的內部負載平衡器。gcloud compute forwarding-rules create wsfc-bookshelf \ --load-balancing-scheme internal \ --address $LISTENER_IP \ --ports ALL \ --network $VPC_NAME \ --subnet $SUBNET_NAME \ --region $REGION \ --ip-protocol L3_DEFAULT \ --backend-service wsfc-bookshelf-backend
現在,您可以使用 DNS 名稱 bookshelf
和在 bookshelf 可用性群組事件監聽器中定義的通訊埠,連線至 SQL Server 可用性群組事件監聽器。內部負載平衡器會將流量導向bookshelf
可用性群組的主要節點。
如要在單一容錯移轉叢集上建立多個可用性群組,您必須使用個別的後端服務和負載平衡器,每個可用性群組都有自己的健康狀態檢查。
每個可用性群組可能會有不同的節點指定為主要節點,且可能與 Windows 叢集的主機節點不同。如要使用多個可用性群組,請準備下列項目:
內部負載平衡器使用的可用性群組接聽程式專用靜態 IP 位址。為每個可用性群組保留一個位址。
每個可用性群組都有專屬的健康狀態檢查規則。健康檢查要求會提供可用性群組接聽程式的靜態 IP 位址 (也就是上一步保留的 IP 位址)。健康狀態檢查會探測 GCE 代理程式傳回的回應
1
。所有健康狀態檢查都會使用通訊埠59998
。為每個可用性群組建立個別的後端服務,並新增現有的兩個運算執行個體群組。後端服務會使用上一個步驟中定義的健康狀態檢查。
為上一步建立的後端服務,為每個可用性群組建立內部負載平衡器。負載平衡器會與可用性群組接聽程式的靜態 IP 位址建立關聯。
測試容錯移轉
現在可以測試容錯移轉是否正常運作:
- 返回
witness
的 PowerShell 工作階段。 執行下列指令碼。
while ($True){ $Conn = New-Object System.Data.SqlClient.SqlConnection $Conn.ConnectionString = "Server=tcp:bookshelf,1433;Integrated Security=true;Initial Catalog=master" $Conn.Open() $Cmd = New-Object System.Data.SqlClient.SqlCommand $Cmd.Connection = $Conn $Cmd.CommandText = "SELECT SERVERPROPERTY('ServerName')" $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter $Cmd $Data = New-Object System.Data.DataSet $Adapter.Fill($Data) | Out-Null $Data.Tables[0] + (Get-Date -Format "MM/dd/yyyy HH:mm:ss") Start-Sleep -Seconds 2 }
在本指南中,我們在伺服器定義
tcp:bookshelf,1433
中,使用 DNS 名稱bookshelf
和通訊埠值1433
做為可用性群組接聽程式。每隔 2 秒,指令碼就會使用可用性群組接聽程式連線至 SQL Server,並查詢伺服器名稱。
讓指令碼繼續執行。
返回
node-1
上的遠端桌面工作階段,觸發容錯移轉。- 在 SQL Server Management Studio 中,依序前往「Always On High Availability」>「Availability Groups」>「bookshelf-ag (Primary)」,然後以滑鼠右鍵按一下節點。
- 選取「Failover」。
- 在「選取新的主要副本」頁面,確認已選取
node-2
做為新的主要副本,且「容錯移轉準備就緒」欄顯示No data loss
。然後選取「下一步」。 - 在「Connect to replica」(連線至副本) 頁面中,選取「Connect」(連線)。
- 在「連線到伺服器」對話方塊中,確認伺服器名稱為
node-2
,然後按一下「連線」。 - 依序選取「下一步」和「完成」。
- 在「結果」頁面上,確認容錯移轉是否成功。
返回
witness
的 PowerShell 工作階段。觀察執行指令碼的輸出內容,並注意伺服器名稱會因容錯移轉而從
node-1
變更為node-2
。按下
Ctrl+C
鍵停止指令碼。
清除所用資源
完成教學課程後,您可以清除所建立的資源,這樣資源就不會繼續使用配額,也不會產生費用。下列各節將說明如何刪除或關閉這些資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程所建立的專案。
如要刪除專案:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.