Gruppi di disponibilità AlwaysOn di Microsoft SQL Server (AG) consente di replicare i database su più istanze SQL Server Enterprise.
Analogamente a Istanze cluster di failover di SQL Server, I gruppi di disponibilità AlwaysOn utilizzano il Clustering di failover di Windows Server (WSFC) per implementare l'alta disponibilità. Tuttavia, le due funzionalità differiscono in diversi modi, tra cui:
Gruppi di disponibilità AlwaysOn | Istanze cluster di failover | |
---|---|---|
Ambito del failover | Gruppo di database | Istanza |
Archiviazione | Non condiviso | Condiviso |
Per un confronto più dettagliato, vedi Confronto di istanze dei cluster di failover e gruppi di disponibilità.
I gruppi di disponibilità AlwaysOn supportano più modalità di disponibilità. Questo tutorial mostra come eseguire il deployment dei gruppi di disponibilità AlwaysOn in modalità di commit sincrono per implementare l'alta disponibilità per uno o più database.
La configurazione creerà tre istanze VM. Due istanze VM, node-1
e
node-2
, fungono da nodi WSFC ed eseguono SQL Server. Una terza istanza VM,
witness
, viene utilizzata per raggiungere il quorum in uno scenario di failover.
Le tre istanze VM sono distribuite su tre zone e condividono una
subnet comune.
Usando un gruppo di disponibilità AlwaysOn di SQL Server, un database di esempio,
bookshelf
viene replicato in modo sincrono tra le due istanze SQL Server.
In un ambiente on-premise, puoi consentire a WSFC di eseguire annunci ARP se si verifica un failover per avvisare l'apparecchiatura di rete di una modifica dell'indirizzo IP. Google Cloud, tuttavia, ignora l'ARP comunicazioni. Di conseguenza, devi implementare una delle seguenti due opzioni:
- "Bilanciatore del carico interno. Per ulteriori informazioni, consulta Eseguire Windows Server Failover Clustering.
- Nome rete distribuita (DNN). Per ulteriori informazioni, vedi Configura un listener DNN per un gruppo di disponibilità.
L'articolo presuppone che tu abbia già eseguito il deployment di Active Directory su Google Cloud e che tu abbia conoscenze di base di SQL Server, Active Directory e Compute Engine.
Obiettivi
- Esegui il deployment di un cluster WSFC composto da due istanze VM SQL Server e una terza istanza VM che funge da testimone della condivisione file.
- Crea un gruppo di disponibilità con commit sincrono.
- Configurare un bilanciatore del carico o un nome di rete distribuita (DNN) per instradare il traffico al gruppo di disponibilità con SQL Server
- Verifica il funzionamento della configurazione simulando un failover.
Costi
Questo tutorial utilizza i componenti fatturabili di Google Cloud, tra cui:
- Compute Engine
- Cloud Load Balancing (non necessario con una configurazione DNN)
Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.
Prima di iniziare
Per completare questa guida, ti occorrono:
- Un dominio Active Directory con almeno un controller di dominio. Puoi creare un dominio Active Directory utilizzando Microsoft Active Directory gestito. In alternativa, puoi eseguire il deployment di un ambiente Active Directory personalizzato su Compute Engine e configurare una zona di inoltro DNS privata che inoltra le query DNS ai tuoi controller di dominio.
- Un utente Active Directory che dispone dell'autorizzazione per aggiungere computer al dominio
e può accedere utilizzando RDP. Se utilizzi AD Microsoft gestito, puoi utilizzare
l'utente
setupadmin
. - Un progetto e un VPC Google Cloud con connettività ai controller di dominio Active Directory.
- Una subnet da utilizzare per le istanze VM WSFC.
Per completare la guida, devi anche avere un progetto Google Cloud:
- 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.
Al termine di questo tutorial, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.
Preparazione del progetto e della rete
prepara il tuo progetto Google Cloud e il VPC per il deployment di SQL Server Per i gruppi di disponibilità AlwaysOn:
Nella console Google Cloud, apri Cloud Shell facendo clic sul pulsante Attiva Cloud Shell .
Inizializza le seguenti variabili:
VPC_NAME=
VPC_NAME
SUBNET_NAME=SUBNET_NAME
Dove:
VPC_NAME
: nome del VPCSUBNET_NAME
: nome della subnet
Imposta l'ID progetto predefinito:
gcloud config set project
PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID del tuo progetto Google Cloud.Imposta la regione predefinita:
gcloud config set compute/region
REGION
Sostituisci
REGION
con l'ID della regione in cui vuoi eseguire il deployment.
Crea regole firewall
Per consentire ai client di connettersi a SQL Server, consenti la comunicazione tra WSFC nodi e per abilitare il bilanciatore del carico eseguire controlli di integrità, devi creare varie regole firewall. Per semplificare la creazione di queste regole del firewall, utilizza i tag di rete:
- I due nodi WSFC sono annotati con il tag
wsfc-node
. - Tutti i server (incluso il testimone) sono annotati con il tag
wsfc
.
Crea regole firewall che utilizzano questi tag di rete:
- Torna alla sessione Cloud Shell esistente.
Crea regole firewall per i nodi WSFC:
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
Crea una regola firewall che consenta i controlli di integrità dal Intervalli IP dei probe di Google Cloud.
gcloud compute firewall-rules create allow-health-check-to-wsfc-nodes \ --direction=INGRESS \ --action=allow \ --rules=tcp \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=wsfc-node \ --network=$VPC_NAME \ --priority 10000
crea istanze VM
Ora esegui il deployment di due istanze VM per il cluster di failover. In qualsiasi momento, una di queste VM ospita la replica principale del database SQL Server mentre l'altro nodo ospita la replica secondaria. Le due istanze VM devono:
- trovarsi nella stessa regione, in modo che siano accessibili bilanciatore del carico di rete passthrough interno (non applicabile per DNN)
- con WSFC e SQL Server installati.
- Avere il supporto per WSFC di Compute Engine abilitato.
Utilizzi un'immagine premium SQL Server con SQL Server 2022 preinstallato.
Per fornire un voto decisivo e raggiungere il quorum per lo scenario di failover, esegui il deployment di una terza VM che funge da testimone della condivisione file.
- Torna alla sessione di Cloud Shell esistente.
Crea uno script specializzato per i nodi WSFC. Lo script installa la funzionalità Windows necessaria e crea le regole firewall per WSFC e 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 SQL Server health check" dir=in action=allow protocol=TCP localport=59997 # 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
Creare le istanze VM. Sulle due VM che fungono da nodi WSFC, collega un disco di dati aggiuntivo e attiva Windows Server Failover Clustering impostando la chiave dei metadati
enable-wsfc
sutrue
:REGION=$(gcloud config get-value compute/region) PD_SIZE=200 MACHINE_TYPE=n2-standard-8 gcloud compute instances create node-1 \ --zone $REGION-a \ --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 $REGION-b \ --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 $REGION-c \ --machine-type n2-standard-2 \ --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"
Per unire le tre istanze VM ad Active Directory, procedi nel seguente modo per ciascuna delle tre istanze VM:
Monitora il processo di inizializzazione della VM visualizzando l'output della porta seriale:
gcloud compute instances tail-serial-port-output
NAME
Sostituisci
NAME
con il nome dell'istanza VM.Attendi circa 3 minuti finché non viene visualizzato l'output
Instance setup finished
. quindi premi Ctrl+C. A questo punto, l'istanza VM è pronta per essere utilizzata.Crea un nome utente e una password per l'istanza VM
Connettiti alla VM utilizzando Remote Desktop e accedi utilizzando il nome utente e la password creati nella passaggio.
Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell (Amministratore).
Conferma la richiesta di elevazione facendo clic su Sì.
Collega il computer al dominio Active Directory e riavvialo:
Add-Computer -Domain
DOMAIN -Restart
Sostituisci
DOMAIN
con il nome DNS del tuo dominio Active Directory.Attendi circa 1 minuto per il completamento del riavvio.
Prenota indirizzi IP del cluster
Ora prenoti due indirizzi IP statici nel tuo VPC. Un indirizzo IP viene utilizzato come l'indirizzo IP del cluster WSFC, l'altro è utilizzato dal bilanciatore del carico interno.
Prenota un indirizzo IP statico da utilizzare come IP del cluster:
gcloud compute addresses create wsfc-cluster \ --subnet $SUBNET_NAME \ --region $(gcloud config get-value compute/region) && \ CLUSTER_ADDRESS=$(gcloud compute addresses describe wsfc-cluster \ --region $(gcloud config get-value compute/region) \ --format=value\(address\)) && \ echo "Cluster IP: $CLUSTER_ADDRESS"
Prendi nota dell'indirizzo IP, che ti servirà in un secondo momento.
Prenota un altro indirizzo IP statico per il bilanciatore del carico interno e acquisisci l'indirizzo in una nuova variabile di ambiente denominata
LOADBALANCER_ADDRESS
:gcloud compute addresses create wsfc \ --subnet $SUBNET_NAME \ --region $(gcloud config get-value compute/region) LOADBALANCER_ADDRESS=$(gcloud compute addresses describe wsfc \ --region $(gcloud config get-value compute/region) \ --format=value\(address\)) && \ echo "Load Balancer IP: $LOADBALANCER_ADDRESS"
Prendi nota dell'indirizzo IP, che ti servirà in un secondo momento.
Il progetto e la VPC sono ora pronti per il deployment di WSFC e SQL Server.
Eseguire il deployment del cluster di failover
Ora puoi utilizzare le istanze VM per eseguire il deployment di un cluster WSFC e di SQL Server.
Preparazione di SQL Server
Crea un nuovo account utente in Active Directory per SQL Server:
- Connettiti a
node-1
utilizzando Remote Desktop. Accedi con l'account utente del tuo dominio. - Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e fai clic Windows PowerShell (amministratore).
- Conferma la richiesta di elevazione facendo clic su Sì.
Creare un account utente di dominio per SQL Server e l'agente SQL e assegnare una password:
$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
Per configurare SQL Server, esegui questi passaggi sia su node-1
che su node-2
:
Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e fai clic Windows PowerShell (amministratore).
Rinomina l'istanza SQL Server in modo che il suo nome corrisponda al nome host:
$OLD_NAME = Invoke-Sqlcmd -Query " select @@SERVERNAME; GO" | ConvertTo-Csv | SELECT -Skip 2 $OLD_NAME = $OLD_NAME.Replace('"', '') Invoke-Sqlcmd -Query " sp_dropserver '$OLD_NAME'; GO sp_addserver '$env:computername', local; GO" Restart-Service -Name MSSQLSERVER
Apri SQL Server Configuration Manager.
Nel riquadro di navigazione, seleziona SQL Server Services (Servizi SQL Server)
Nell'elenco dei servizi, fai clic con il tasto destro del mouse su SQL Server (MSSQLSERVER) e seleziona Proprietà.
In Accedi come, modifica l'account:
- Nome account:
DOMAIN\sql_server
doveDOMAIN
è il nome NetBIOS del tuo dominio Active Directory. - Password: inserisci la password scelta in precedenza.
- Nome account:
Fai clic su OK.
Quando ti viene chiesto di riavviare SQL Server, seleziona Sì.
SQL Server ora viene eseguito con un account utente di dominio.
Creazione di condivisioni file
Crea due condivisioni file su witness
in modo che l'istanza VM possa
archivia i backup di SQL Server e fungono da testimonianza della condivisione file:
- Connettiti a
witness
utilizzando Remote Desktop. Accedi con l'account utente del tuo dominio. - Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell (Amministratore).
- Conferma la richiesta di elevazione facendo clic su Sì.
Crea una condivisione file di attendibilità e concedi a te stesso e ai due nodi WSFC l'accesso alla condivisione file:
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$
Crea un'altra condivisione file per archiviare i backup e concedi a SQL Server l'accesso completo:
New-Item "C:\Backup" –type directory New-SmbShare ` -Name Backup ` -Path "C:\Backup" ` -Description "SQL Backup" ` -FullAccess $env:USERDOMAIN\sql_server
Esegui il deployment di WSFC
Ora puoi creare il cluster di failover:
- Torna alla sessione di Remote Desktop su
node-1
. - Fai clic con il pulsante destro del mouse sul pulsante Start (o premi Win+X) e fai clic su Windows PowerShell (amministratore).
- Conferma la richiesta di elevazione facendo clic su Sì.
Crea un nuovo cluster:
- Per la configurazione del bilanciatore del carico
New-Cluster ` -Name sql-cluster ` -Node node-1,node-2 ` -NoStorage ` -StaticAddress
CLUSTER_ADDRESS
Sostituisci
CLUSTER_ADDRESS
con l'indirizzo IP del cluster che hai creato in precedenza.- Per la configurazione di DNN
New-Cluster ` -Name sql-cluster ` -Node node-1,node-2 ` -NoStorage ` -ManagementPointNetworkType Distributed
Torna alla sessione PowerShell il giorno
witness
e concedi la oggetto informatico dell'autorizzazione del cluster per accedere alla condivisione file:icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)' Grant-SmbShareAccess ` -Name QWitness ` -AccountName 'sql-cluster$' ` -AccessRight Full ` -Force
Torna alla sessione PowerShell su
node-1
e configura il cluster per utilizzare la condivisione file suwitness
come quorum di cluster:Set-ClusterQuorum -FileShareWitness \\witness\QWitness
Verifica che il cluster sia stato creato correttamente:
Test-Cluster
Potresti visualizzare alcuni avvisi che possono essere ignorati:
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).
Puoi anche avviare lo snapshot MMC di Gestione cluster di failover per esaminare l'integrità del cluster eseguendo
cluadmin.msc
.Se utilizzi AD gestito, aggiungi l'account computer utilizzato da WSFC al gruppo Account di unione al dominio del servizio cloud in modo che possa unire i computer al dominio:
Add-ADGroupMember ` -Identity "Cloud Service Domain Join Accounts" ` -Members sql-cluster$
Abilita i gruppi di disponibilità AlwaysOn su entrambi i nodi:
Enable-SqlAlwaysOn -ServerInstance node-1 -Force Enable-SqlAlwaysOn -ServerInstance node-2 -Force
Creazione di un gruppo di disponibilità
Ora crea un database di esempio bookshelf
, includilo in un nuovo gruppo di disponibilità denominato bookshelf-ag
e configura l'alta disponibilità.
Creazione di un database
Creare un nuovo database. Ai fini di questo tutorial, il database non deve contenere dati.
- Torna alla sessione Remote Desktop su
node-1
. - Apri SQL Server Management Studio.
- Nella finestra di dialogo Connetti al server, verifica che il nome del server sia impostato su
NODE-1
e seleziona Connetti. - Nel menu, seleziona File > Nuovo > Query con connessione corrente.
Incolla il seguente script SQL nell'editor:
-- 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
Lo script crea un nuovo database con una singola tabella ed esegue una backup iniziale su
witness
.Seleziona Esegui per eseguire lo script SQL.
Configurazione dell'alta disponibilità
- Nella finestra Esploratore oggetti, fai clic con il tasto destro del mouse su Alta disponibilità AlwaysOn e poi seleziona Nuova procedura guidata gruppo di disponibilità.
- Nella pagina Specifica opzioni, imposta il nome del gruppo di disponibilità su
bookshelf-ag
, quindi seleziona Avanti. - Nella pagina Seleziona database, seleziona il database
bookshelf
, quindi seleziona Avanti. Nella pagina Specifica repliche, seleziona la scheda Repliche:
- Seleziona Aggiungi replica.
Nella finestra di dialogo Connetti al server, inserisci il nome del server
node-2
e Seleziona Connetti.L'elenco delle repliche di disponibilità ora contiene istanze SQL Server,
node-1
enode-2
.Imposta la Modalità disponibilità su Commit sincrono per entrambe le istanze.
Imposta Failover automatico su Abilitato per entrambe le istanze.
Seleziona la scheda Listener **
- Seleziona Crea un listener del gruppo di disponibilità
Inserisci le seguenti impostazioni:
- Nome DNS del listener:
bookshelf
- Porta:
1433
- Modalità di rete: IP statico
- Nome DNS del listener:
Seleziona Aggiungi e inserisci l'indirizzo IP del bilanciatore del carico che hai creato. in precedenza. Quindi seleziona Ok.
Seleziona Avanti.
Nella pagina Seleziona sincronizzazione dati, scegli Seeding automatico.
Nella pagina Convalida, verifica che tutti i controlli siano andati a buon fine.
Nella pagina Riepilogo, seleziona Fine.
Nella pagina Risultati, seleziona Chiudi.
Configura i controlli di integrità
Come ultimo passaggio, configura il cluster per esporre un endpoint del controllo di integrità può essere utilizzato da un bilanciatore del carico interno:
- Torna alla sessione PowerShell su
node-1
. Inizializza una variabile con l'indirizzo IP del bilanciatore del carico.
$LoadBalancerIP = '
IP_ADDRESS
'Sostituisci
IP_ADDRESS
con l'indirizzo IP diwsfc
che hai prenotato in precedenza.Configura il cluster di failover in modo che risponda al servizio di controllo di integrità:
$SqlIpAddress = Get-ClusterResource | Where-Object {$_.ResourceType -eq "IP Address"} | Where-Object {$_.Name.StartsWith("bookshelf")} $SqlIpAddress | Set-ClusterParameter -Multiple @{ 'Address'= $LoadBalancerIP; 'ProbePort'= 59997; 'SubnetMask'='255.255.255.255'; 'Network'= (Get-ClusterNetwork).Name; 'EnableDhcp'=0; }
Riavvia la risorsa del cluster:
$SqlIpAddress | Stop-ClusterResource $SqlIpAddress | Start-ClusterResource
Crea un bilanciatore del carico interno
Per fornire un singolo endpoint per i client SQL Server, ora esegui il deployment di un bilanciatore del carico interno. Il bilanciatore del carico utilizza un controllo di integrità per garantire che il traffico venga indirizzato il nodo attivo della WSFC.
- Torna alla sessione Cloud Shell esistente.
Creare due gruppi di istanze non gestite, uno per zona e aggiungi i due nodi ai gruppi:
REGION=$(gcloud config get-value compute/region) gcloud compute instance-groups unmanaged create wsfc-group-1 --zone $REGION-a gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $REGION-a \ --instances node-1 gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $REGION-b gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $REGION-b \ --instances node-2
Crea un controllo di integrità che il bilanciatore del carico può utilizzare per determinare quale sia il nodo attivo.
gcloud compute health-checks create tcp wsfc-healthcheck \ --check-interval="2s" \ --healthy-threshold=1 \ --unhealthy-threshold=2 \ --port=59997 \ --timeout="1s"
Il controllo di integrità verifica la porta
59997
, ovvero quella che hai usato in precedenza configurato comeProbePort
per il listener del gruppo di disponibilità.Crea un servizio di backend e aggiungi i due gruppi di istanze:
gcloud compute backend-services create wsfc-backend \ --load-balancing-scheme internal \ --region $(gcloud config get-value compute/region) \ --health-checks wsfc-healthcheck \ --protocol tcp gcloud compute backend-services add-backend wsfc-backend \ --instance-group wsfc-group-1 \ --instance-group-zone $REGION-a \ --region $REGION gcloud compute backend-services add-backend wsfc-backend \ --instance-group wsfc-group-2 \ --instance-group-zone $REGION-b \ --region $REGION
Crea il bilanciatore del carico interno:
gcloud compute forwarding-rules create wsfc-sql \ --load-balancing-scheme internal \ --address $LOADBALANCER_ADDRESS \ --ports 1433 \ --network $VPC_NAME \ --subnet $SUBNET_NAME \ --region $REGION \ --backend-service wsfc-backend
Ora puoi connetterti al listener del gruppo di disponibilità di SQL Server utilizzando
il bilanciatore del carico interno e il nome DNS bookshelf
.
Per creare più gruppi di disponibilità in un singolo cluster di failover, devi utilizzare un bilanciatore del carico separato con il proprio controllo di stato per ogni gruppo di disponibilità. Ciò significa che per ogni gruppo di disponibilità, hai bisogno di:
Un indirizzo IP interno riservato (uno per ogni gruppo di disponibilità) da utilizzare per il listener e per il bilanciatore del carico interno.
Un bilanciatore del carico separato (uno per ogni gruppo di disponibilità) con il proprio IP riservato al passaggio precedente.
Una porta della sonda separata (ad esempio 59997, 59998 e 59999 per ogni disponibilità gruppo) e una regola firewall per consentire il traffico su queste porte del probe.
Una regola per il controllo di integrità separata per ogni gruppo di disponibilità che utilizza rispettive porte del probe.
Configurare un listener DNN per un gruppo di disponibilità
Analogamente alla configurazione del bilanciamento del carico interno, il listener DNN funge da un unico endpoint per i client SQL Server.
- Torna alla sessione PowerShell su
node-1
. Esegui lo script seguente per creare un ascoltatore DNN.
$Ag='bookshelf-ag' $Port='
DNN_PORT
' $Dns='DNN_NAME
' # create the DNN resource with the port as the resource name Add-ClusterResource -Name $Port -ResourceType "Distributed Network Name" -Group $Ag # set the DNS name of the DNN resource Get-ClusterResource -Name $Port | Set-ClusterParameter -Name DnsName -Value $Dns # start the DNN resource Start-ClusterResource -Name $Port # add the Dependency from availability group resource to the DNN resource Set-ClusterResourceDependency -Resource $Ag -Dependency "[$Port]" #bounce the AG resource Stop-ClusterResource -Name $Ag Start-ClusterResource -Name $AgSostituisci
DNN_PORT
con la porta listener DNN. La porta dell'ascoltatore DNN deve essere configurata con una porta univoca. Per ulteriori informazioni, consulta Considerazioni relative alla porta.Sostituisci
DNN_NAME
con il nome dell'ascoltatore DNN.Crea regole firewall per la porta di ascolto DNN sia su
node-1
che sunode-2
.netsh advfirewall firewall add rule name="Allow DNN listener" dir=in action=allow protocol=TCP localport=
DNN_PORT
Test del failover in corso...
Ora puoi verificare se il failover funziona come previsto:
- Torna alla sessione PowerShell il giorno
witness
. Esegui questo script:
while ($True){ $Conn = New-Object System.Data.SqlClient.SqlConnection $Conn.ConnectionString = "Server=
LISTENER
;Integrated Security=true;Initial Catalog=master" $Conn.Open() $Cmd = New-Object System.Data.SqlClient.SqlCommand $Cmd.Connection = $Conn $Cmd.CommandText = "SELECT @@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 }Sostituisci
LISTENER
con il nome DNS dell'ascoltatore o l'ascoltatore DNN e la porta del gruppo di disponibilità.Ogni 2 secondi, lo script si connette a SQL Server utilizzando l'ascoltatore del gruppo di disponibilità o l'ascoltatore DNN ed esegue una query sul nome del server.
Lascia in esecuzione lo script.
Torna alla sessione di Remote Desktop su
node-1
per attivare un failover:- In SQL Server Management Studio, vai a Sempre On Disponibilità elevata > Gruppi di disponibilità > scaffale-ag (principale) e fai clic con il tasto destro del mouse sul nodo.
- Seleziona Failover.
- Nella pagina Seleziona nuova replica principale, verifica che sia selezionato
node-2
come nuova replica principale e che la colonna Idoneità al failover indicaNo data loss
. Poi seleziona Avanti. - Nella pagina Connetti alla replica, seleziona Connetti.
- Nella finestra di dialogo Connetti al server, verifica che il nome del server sia
node-2
e fai clic su Connetti. - Seleziona Avanti e poi Fine.
- Nella pagina Risultati, verifica che il failover sia andato a buon fine.
Torna alla sessione PowerShell su
witness
.Osserva l'output dello script in esecuzione e nota che il nome del server modifiche da
node-1
anode-2
a seguito del failover.Interrompi lo script premendo
Ctrl+C
.
Esegui la pulizia
Al termine del tutorial, puoi eliminare le risorse che hai creato in modo che smettano di utilizzare la quota e di generare addebiti. Le seguenti sezioni descrivono come eliminare o disattivare queste risorse.
Elimina il progetto
Il modo più semplice per eliminare la fatturazione è eliminare il progetto che hai creato per il tutorial.
Per eliminare il progetto:
- 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.