Configurare i gruppi di disponibilità AlwaysOn di SQL Server con commit sincrono utilizzando un bilanciatore del carico interno


I gruppi di disponibilità Always On di Microsoft SQL Server consentono di replicare i database in più istanze SQL Server Enterprise.

Analogamente alle istanze del cluster di failover SQL Server, i gruppi di disponibilità Always On utilizzano il clustering di failover di Windows Server (WSFC) per implementare la disponibilità elevata. Tuttavia, le due funzionalità differiscono nei seguenti modi:

Gruppi di disponibilità Always On Istanze del cluster di failover
Ambito del failover Gruppo di database Istanza
Archiviazione Non condiviso Condiviso

Per un confronto più dettagliato, vedi Confronto tra istanze del cluster di failover e gruppi di disponibilità.

I gruppi di disponibilità Always On supportano più modalità di disponibilità. Questo tutorial mostra come eseguire il deployment di gruppi di disponibilità Always On in modalità di commit sincrono per implementare l'alta disponibilità per uno o più database.

Nella configurazione, creerai tre istanze VM. Due istanze VM, node-1 e node-2, fungono da nodi del cluster 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.

Utilizzando un gruppo di disponibilità Always On di SQL Server, un database di esempio, bookshelf, viene replicato in modo sincrono nelle due istanze SQL Server.

In un ambiente cluster Windows on-premise, gli annunci ARP (Address Resolution Protocol) attivano il failover dell'indirizzo IP. Tuttavia,Google Cloudignora gli annunci ARP. Di conseguenza, devi implementare una delle seguenti due opzioni: utilizzare un bilanciatore del carico interno e un nome di rete distribuito (DNN).

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. Per saperne di più su Active Directory su Google Cloud, consulta la sezione Prima di iniziare.

Utilizzando un gruppo di disponibilità Always On di SQL Server, un database di esempio, bookshelf, viene replicato in modo sincrono nelle due istanze SQL Server. Un bilanciatore del carico interno garantisce che il traffico venga indirizzato al nodo attivo.

Per ulteriori informazioni sul clustering di failover di Windows Server con un bilanciatore del carico interno, consulta clustering di failover.

Architettura

Questo diagramma include:

  • Due istanze VM nella stessa regione e in zone diverse per il cluster di failover denominato node-1 e node-2. Uno ospita la replica principale del database SQL Server, mentre l'altro nodo ospita la replica secondaria.
  • Una terza VM denominata witness funge da controllo di condivisione file per fornire un voto decisivo e raggiungere il quorum per il failover.
  • Un bilanciatore del carico interno davanti al cluster fornisce un singolo endpoint per i client SQL Server e utilizza un controllo di integrità per garantire che il traffico venga indirizzato al nodo attivo.

Obiettivi

Questo tutorial ha lo scopo di raggiungere i seguenti obiettivi:

Costi

Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:

Utilizza il calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

Prima di iniziare

Per completare le attività di questo tutorial, assicurati di:

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Hai un dominio Active Directory con almeno un domain controller. 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 con DNS privato che inoltra le query DNS ai tuoi domain controller.
  7. Hai un utente Active Directory che dispone dell'autorizzazione per unire computer al dominio e può accedere utilizzando RDP. Se utilizzi Microsoft AD gestito, puoi utilizzare l'utente setupadmin. Per ulteriori informazioni sul provisioning degli account utente di Active Directory, vedi Provisioning degli account utente di Active Directory
  8. Un progetto Google Cloud e un Virtual Private Cloud (VPC) con connettività ai domain controller Active Directory.
  9. Una subnet da utilizzare per le istanze VM del cluster di failover di Windows Server.
  10. Al termine di questo tutorial, puoi evitare l'addebito di ulteriori costi eliminando le risorse create. Per ulteriori informazioni, consulta Pulizia.

Prepara il progetto e la rete

Per eseguire il deployment dei gruppi di disponibilità Always On di SQL Server, devi preparare il progettoGoogle Cloud e il VPC per il deployment. Le sezioni che seguono illustrano come fare in dettaglio.

Configura il progetto e la regione

Per preparare il progetto Google Cloud per il deployment dei gruppi di disponibilità Always On di SQL Server, segui questi passaggi:

  1. Nella console Google Cloud , apri Cloud Shell facendo clic sul pulsante Attiva Cloud Shell Attiva Cloud Shell..

    Vai alla console Google Cloud

  2. Inizializza le seguenti variabili.

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Sostituisci quanto segue:

    • VPC_NAME: il nome del tuo VPC
    • SUBNET_NAME: il nome della tua subnet
  3. Imposta l'ID progetto predefinito.

    gcloud config set project PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud .

  4. 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 e la comunicazione tra i nodi del cluster, devi creare diverse regole firewall. Puoi utilizzare i tag di rete per semplificare la creazione di queste regole firewall, come segue:

  • I due nodi del cluster sono annotati con il tag wsfc-node.
  • Tutti i server (incluso witness) sono annotati con il tag wsfc.

Per creare regole firewall che utilizzano questi tag di rete:

  1. Torna alla sessione di Cloud Shell esistente.
  2. Crea regole firewall per consentire il traffico tra i nodi del cluster.

    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 istanze VM

Crea e implementa 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 per consentire l'accesso di un bilanciatore del carico di rete passthrough interno.
  • Avere installato il cluster di failover di Windows Server e SQL Server.
  • avere abilitato il supporto di WSFC per Compute Engine.

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 controllo di condivisione file seguendo questi passaggi:

  1. Torna alla sessione di Cloud Shell esistente.
  2. Crea uno script specializzato per i nodi WSFC. Questo script installa le funzionalità Windows necessarie 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 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
    
  3. Crea le istanze VM. Sulle due VM che fungono da nodi del cluster, collega un disco dati aggiuntivo e attiva il clustering di failover di Windows Server impostando la chiave dei metadati enable-wsfc su true:

    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"
    

    Sostituisci ZONE1, ZONE2, ZONE3 in base alle zone che utilizzi.

  4. Per unire le tre istanze VM ad Active Directory, segui questi passaggi per ciascuna delle tre istanze VM:

    1. 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 qualche minuto finché non vedi l'output Instance setup finished, poi premi Ctrl+C. A questo punto, l'istanza VM è pronta per essere utilizzata.

    2. Crea un nome utente e una password per l'istanza VM.

    3. Connettiti alla VM utilizzando Remote Desktop e accedi con il nome utente e la password creati nel passaggio precedente.

    4. Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell (Amministratore).

    5. Conferma la richiesta di elevazione facendo clic su .

    6. Unisci il computer al dominio Active Directory ed esegui il riavvio.

      Add-Computer -Domain DOMAIN -Restart
      

      Sostituisci DOMAIN con il nome DNS del tuo dominio Active Directory.

    7. Inserisci le credenziali di un account che dispone delle autorizzazioni per unire una VM al dominio

      Attendi il riavvio della VM. Ora hai unito l'istanza VM ad Active Directory.

Prenota indirizzi IP statici

Ora devi prenotare due indirizzi IP statici nel tuo VPC. Un indirizzo IP viene utilizzato come indirizzo IP del cluster WSFC predefinito, l'altro funge da IP statico per il listener del gruppo di disponibilità di SQL Server.

In un cluster WSFC, l'indirizzo IP del cluster ha principalmente scopi amministrativi e di accesso alle risorse del cluster. Questo indirizzo IP virtuale viene assegnato al cluster stesso, consentendo agli amministratori di gestire il cluster ed eseguire attività come la configurazione delle impostazioni del cluster, il monitoraggio dell'integrità dei nodi e la gestione dei processi di failover.

Nel contesto del gruppo di disponibilità SQL Server, un listener è un nome di rete virtuale (VNN) e un indirizzo IP che consente ai client di connettersi al gruppo di disponibilità senza dover sapere quale server specifico è il nodo primario.

Un bilanciatore del carico interno ha bisogno di un indirizzo IP interno per instradare in modo efficiente il traffico interno e supportare l'alta disponibilità e il bilanciamento del carico nel contesto di un cluster WSFC. Il bilanciatore del carico interno garantisce che le richieste vengano sempre indirizzate alla replica primaria corrente del cluster. Durante gli eventi di failover, il bilanciamento del carico rileva le modifiche nella replica primaria e reindirizza le connessioni client alla nuova primaria senza richiedere l'intervento manuale, riducendo al minimo i tempi di inattività e garantendo la disponibilità continua dei servizi di database.

Nel contesto di un cluster WSFC con gruppi di disponibilità Always On di SQL Server, sia gli indirizzi IP statici interni riservati per l'indirizzo IP del cluster WSFC predefinito sia il listener del gruppo di disponibilità vengono utilizzati anche dai bilanciatori del carico interni associati.

  1. Per prenotare due indirizzi IP statici nel tuo VPC, segui questi passaggi.

    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"
    
  2. Sostituisci l'indirizzo IP del cluster nella variabile CLUSTER_IP, ti servirà in seguito per specificarlo come IP del cluster:

    CLUSTER_IP=CLUSTER_IP
    
  3. Prenota un altro IP statico per il listener del gruppo di disponibilità e acquisisci l'indirizzo in una nuova variabile di ambiente denominata 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"
    
  4. Sostituisci l'indirizzo IP riservato del bilanciatore del carico con la variabile LISTENER_IP, ti servirà in seguito per configurare il gruppo di disponibilità.

    LISTENER_IP=LISTENER_IP
    

Il progetto e il VPC sono ora pronti per il deployment del cluster di failover di Windows Server e di SQL Server.

Deployment del cluster di failover

Ora puoi utilizzare le istanze VM per eseguire il deployment di un cluster di failover di Windows Server e di SQL Server. Le sezioni che seguono illustrano in dettaglio come fare.

Preparazione di SQL Server

Crea un nuovo account utente in Active Directory per SQL Server utilizzando i seguenti passaggi.

  1. Connettiti a node-1 utilizzando Remote Desktop. Accedi con il tuo account utente di dominio.
  2. Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell (Amministratore).
  3. Conferma la richiesta di elevazione facendo clic su .
  4. Crea un account utente di dominio per SQL Server e l'agente SQL e assegna 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 i seguenti passaggi sia su node-1 che su node-2:

  1. Apri SQL Server Configuration Manager.
  2. Nel riquadro di navigazione, seleziona Servizi SQL Server.
  3. Nell'elenco dei servizi, fai clic con il tasto destro del mouse su SQL Server (MSSQLSERVER) e seleziona Proprietà.
  4. In Accedi come, modifica l'account nel seguente modo:

    • Nome account: DOMAIN\sql_server dove DOMAIN è il nome NetBIOS del tuo dominio Active Directory.
    • Password:inserisci la password che hai scelto in precedenza.
  5. Fai clic su OK.

  6. Quando ti viene chiesto di riavviare SQL Server, seleziona .

SQL Server viene ora eseguito con un account utente di dominio.

Creare condivisioni file

Crea due condivisioni file sull'istanza VM witness in modo che possa archiviare i backup di SQL Server e fungere da controllo di condivisione file:

  1. Connettiti a witness utilizzando Remote Desktop. Accedi con il tuo account utente di dominio.
  2. Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell (Amministratore).
  3. Conferma la richiesta di elevazione facendo clic su .
  4. Crea un controllo di condivisione file e concedi a te e ai due nodi del cluster 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$
    
  5. Crea un'altra condivisione file per archiviare i backup e concedi l'accesso completo a SQL Server:

    New-Item "C:\Backup" –type directory
    New-SmbShare `
      -Name Backup `
      -Path "C:\Backup" `
      -Description "SQL Backup" `
      -FullAccess  $env:USERDOMAIN\sql_server
    

Crea il cluster di failover

Per creare il cluster di failover:

  1. Torna alla sessione di Desktop remoto su node-1.
  2. Fai clic con il tasto destro del mouse sul pulsante Start (o premi Win+X) e poi su Windows PowerShell (Amministratore).
  3. Conferma la richiesta di elevazione facendo clic su .
  4. Crea un nuovo cluster.

    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_IP
    

    Sostituisci CLUSTER_IP con l'indirizzo IP del cluster che hai creato in precedenza.

  5. Torna alla sessione PowerShell su witness e concedi all'oggetto computer virtuale del cluster l'autorizzazione per accedere alla condivisione file.

    icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)'
    Grant-SmbShareAccess `
      -Name QWitness `
      -AccountName 'sql-cluster$' `
      -AccessRight Full `
      -Force
    
  6. Torna alla sessione PowerShell su node-1 e configura il cluster per utilizzare la condivisione file su witness come quorum del cluster.

    Set-ClusterQuorum -FileShareWitness \\witness\QWitness
    
  7. Verifica che il cluster sia stato creato correttamente.

    Test-Cluster
    

    Potresti visualizzare i seguenti avvisi che puoi ignorare senza problemi.

    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 snap-in Gestione cluster di failover di MMC per esaminare l'integrità del cluster eseguendo cluadmin.msc.

  8. Se utilizzi Active Directory gestito, aggiungi l'account del computer utilizzato dal cluster Windows al gruppo Cloud Service Domain Join Accounts in modo che possa unire i computer al dominio.

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    
  9. Abilita i gruppi di disponibilità Always On 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, lo includi in un nuovo gruppo di disponibilità denominato bookshelf-ag e configura l'alta disponibilità.

Creazione di un database

Crea un nuovo database. Ai fini di questo tutorial, il database non deve contenere dati.

  1. Torna alla sessione di Desktop remoto su node-1.
  2. Apri SQL Server Management Studio.
  3. Nella finestra di dialogo Connettiti al server, verifica che il nome del server sia impostato su node-1 e seleziona Connetti.
  4. Nel menu, seleziona File > Nuovo > Query con la connessione attuale.
  5. 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 un backup iniziale in witness.

  6. Seleziona Esegui per eseguire lo script SQL.

Configura l'alta disponibilità

Ora puoi configurare l'alta disponibilità per il gruppo di disponibilità utilizzando T-SQL o SQL Server Management Studio.

Utilizzo di T-SQL

Per configurare l'alta disponibilità per il gruppo di disponibilità utilizzando T-SQL, segui questi passaggi:

  1. Connettiti a node-1 ed esegui lo script seguente per creare il gruppo di disponibilità 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
    
  2. Connettiti a node-2 ed esegui lo script seguente.

    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
    
  3. Su node-1, esegui lo script seguente per creare il gruppo di disponibilità 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
    
  4. Nello script seguente, sostituisci LISTENER_IP con l'indirizzo IP che hai prenotato in precedenza per il bilanciatore del carico interno ed eseguilo.

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag]
    ADD LISTENER N'bookshelf' (
    WITH IP (
      (N'LISTENER_IP', N'255.255.255.0')
    ),
    PORT = 1433);
    GO
    
  5. Connettiti a node-2 ed esegui questo script per unire la replica secondaria al gruppo di disponibilità e abilitare la sincronizzazione automatica.

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN;
    ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
    
    
  6. Controlla lo stato del gruppo di disponibilità.

    SELECT * FROM sys.dm_hadr_availability_group_states;
    GO
    

    Dovresti vedere synchronization_health_desc come HEALTHY

Utilizzo di SQL Server Management Studio

Per configurare la disponibilità elevata per il gruppo di disponibilità utilizzando SQL Server Management Studio, segui questi passaggi:

  1. Nella finestra Esplora oggetti, fai clic con il tasto destro del mouse su Always On High Availability e poi seleziona Nuova procedura guidata per il gruppo di disponibilità.
  2. Nella pagina Specifica opzioni, imposta il nome del gruppo di disponibilità su bookshelf-ag, quindi seleziona Avanti.
  3. Nella pagina Seleziona database, seleziona il database bookshelf, quindi seleziona Avanti.
  4. Nella pagina Specifica repliche, seleziona la scheda Repliche.

    1. Seleziona Aggiungi replica.
    2. Nella finestra di dialogo Connettiti 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 e node-2.

    3. Imposta la Modalità di disponibilità su Commit sincrono per entrambe le istanze.

    4. Imposta Failover automatico su Attivato per entrambe le istanze.

    5. Seleziona la scheda Ascoltatore.

      1. Seleziona Crea un listener del gruppo di disponibilità.
      2. Inserisci le seguenti impostazioni.

        • Nome DNS del listener: bookshelf
        • Porta: 1433
        • Modalità di rete: IP statico
      3. Seleziona Aggiungi e inserisci l'indirizzo IP del listener (LISTENER_IP) che hai prenotato in precedenza per il bilanciatore del carico interno. Quindi seleziona Ok.

    6. Seleziona Avanti.

  5. Nella pagina Seleziona sincronizzazione dati, seleziona Automatic Seeding.

  6. Nella pagina Convalida, verifica che tutti i controlli siano riusciti.

  7. Nella pagina Riepilogo, seleziona Fine.

  8. Nella pagina Risultati, seleziona Chiudi.

Crea bilanciatori del carico interni e controlli di integrità

L'IP del cluster rappresenta un singolo endpoint per il cluster di failover di Windows. Lo utilizzi per scopi amministrativi e per gestire le risorse del cluster. L'IP del cluster punta sempre al nodo host (o principale) del cluster. Devi deployare un bilanciatore del carico interno che utilizza un controllo di integrità che garantisce che il traffico venga indirizzato al nodo host del cluster. Poiché gli strumenti WSFC richiedono la disponibilità di più protocolli per l'inoltro (ICMP, UDP e TCP), consigliamo di eseguire il deployment di un bilanciatore del carico interno con più protocolli che supportano tutte le porte.

Per eseguire il deployment di un bilanciatore del carico interno:

  1. Torna alla sessione di Cloud Shell esistente.
  2. Crea 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 $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
    
  3. Crea un controllo di integrità per l'IP del cluster che il bilanciatore del carico può utilizzare per determinare quale sia il nodo attivo dal punto di vista del cluster Windows. La porta predefinita a cui l'agente guest di Compute Engine risponde ai controlli di integrità è 59998. Il controllo di integrità fornisce l'indirizzo IP del cluster nella richiesta e prevede 1 come risposta restituita dal nodo attivo.

    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"
    
  4. Crea un servizio di backend e aggiungi i due gruppi di istanze esistenti.

    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
    
  5. Crea il bilanciatore del carico interno associato all'IP del cluster.

    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
    

Per fornire un singolo endpoint per i client SQL Server che vogliono connettersi a qualsiasi database nel gruppo di disponibilità bookshelf, esegui il deployment di un nuovo bilanciatore del carico interno dedicato a quel gruppo di disponibilità utilizzando i seguenti passaggi:

  1. Crea un controllo di integrità per il listener del gruppo di disponibilità che il bilanciatore del carico può utilizzare per determinare quale sia il nodo primario nel gruppo di disponibilità SQL Server bookshelf.

    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"
    

    Il controllo di integrità utilizza la stessa porta dell'agente guest di Compute Engine, ma fornisce nella richiesta l'indirizzo IP del listener del gruppo di disponibilità bookshelf.

  2. Crea un nuovo servizio di backend e aggiungi i due gruppi di istanze.

    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
    
  3. Crea il bilanciatore del carico interno associato al listener del gruppo di disponibilità 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
    

Ora puoi connetterti al listener del gruppo di disponibilità SQL Server utilizzando il nome DNS bookshelf e la porta definita nel listener del gruppo di disponibilità bookshelf. Il bilanciatore del carico interno indirizza il traffico al nodo primario del gruppo di disponibilità bookshelf.

Per creare più gruppi di disponibilità su un singolo cluster di failover, devi utilizzare servizi di backend separati e un bilanciatore del carico separato con un proprio controllo di integrità per gruppo di disponibilità.

Ogni gruppo di disponibilità potrebbe avere nodi diversi designati come primari e potrebbero essere diversi dal nodo host del cluster Windows. Per più gruppi di disponibilità, devi disporre di quanto segue:

  • Un indirizzo IP statico riservato per il listener del gruppo di disponibilità utilizzato dal bilanciatore del carico interno. Prenota un indirizzo per ogni gruppo di disponibilità.

  • Una regola di controllo di integrità separata per ogni gruppo di disponibilità. La richiesta del controllo di integrità fornisce l'indirizzo IP statico del listener del gruppo di disponibilità (che è anche l'indirizzo IP riservato nel passaggio precedente). Il controllo di integrità esegue il probe della risposta 1 restituita dall'agente GCE. Tutti i controlli di integrità utilizzano la porta 59998.

  • Un servizio di backend separato per ogni gruppo di disponibilità a cui aggiungi i due gruppi di istanze di calcolo esistenti. Il servizio di backend utilizza il controllo di integrità definito nel passaggio precedente.

  • Un bilanciatore del carico interno per ogni gruppo di disponibilità per il servizio di backend creato nel passaggio precedente. Il bilanciatore del carico è associato all'indirizzo IP statico del listener del gruppo di disponibilità.

Testa il failover

Ora puoi verificare se il failover funziona come previsto:

  1. Torna alla sessione PowerShell su witness.
  2. Esegui lo script seguente.

    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
    }
    

    In questa guida abbiamo utilizzato il nome DNS bookshelf e il valore della porta 1433 per il listener del gruppo di disponibilità nella definizione del server tcp:bookshelf,1433.

    Ogni 2 secondi, lo script si connette a SQL Server utilizzando il listener del gruppo di disponibilità ed esegue una query sul nome del server.

    Lascia in esecuzione lo script.

  3. Torna alla sessione di Remote Desktop su node-1 per attivare un failover.

    1. In SQL Server Management Studio, vai a Always On High Availability > Availability Groups > bookshelf-ag (Primary) e fai clic con il tasto destro del mouse sul nodo.
    2. Seleziona Failover.
    3. Nella pagina Seleziona nuova replica primaria, verifica che node-2 sia selezionata come nuova replica primaria e che la colonna Disponibilità per il failover indichi No data loss. Poi seleziona Avanti.
    4. Nella pagina Connetti alla replica, seleziona Connetti.
    5. Nella finestra di dialogo Connettiti al server, verifica che il nome del server sia node-2 e fai clic su Connetti.
    6. Seleziona Avanti e poi Fine.
    7. Nella pagina Risultati, verifica che il failover sia andato a buon fine.
  4. Torna alla sessione PowerShell su witness.

  5. Osserva l'output dello script in esecuzione e nota che il nome del server cambia da node-1 a node-2 a seguito del failover.

  6. Interrompi lo script premendo Ctrl+C.

Esegui la pulizia

Al termine del tutorial, puoi liberare spazio eliminando le risorse che hai creato in modo che non utilizzino più la quota e non generino addebiti. Le seguenti sezioni descrivono come eliminare o disattivare queste risorse.

Eliminazione del progetto

Il modo più semplice per eliminare la fatturazione è quello di eliminare il progetto creato per il tutorial.

Per eliminare il progetto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi