Configurare un cluster Pacemaker per i gruppi di disponibilità di SQL Server

Si applica a: SQL Server - Linux

Questo articolo descrive come creare un cluster a tre nodi in Linux usando Pacemaker e come aggiungere un gruppo di disponibilità creato in precedenza come risorsa nel cluster. Per la disponibilità elevata, un gruppo di disponibilità in Linux richiede tre nodi. Vedere Disponibilità elevata e protezione dei dati per le configurazioni del gruppo di disponibilità.

Nota

Comunicazione senza distorsione

Questo articolo contiene riferimenti al termine slave, un termine che Microsoft considera offensivo se usato in questo contesto. Il termine viene visualizzato in questo articolo perché è attualmente incluso nel software. Quando il termine verrà rimosso dal software, verrà rimosso dall'articolo.

SQL Server non è strettamente integrato con Pacemaker in Linux come lo è con il clustering di failover di Windows Server (WSFC). Un'istanza di SQL Server non è in grado di conoscere il cluster e tutte le orchestrazioni provengono dall'esterno. Pacemaker fornisce un'orchestrazione di risorse cluster. Inoltre, il nome della rete virtuale è specifico del clustering di failover di Windows Server. Non esiste un equivalente in Pacemaker. Le DMV del gruppo di disponibilità che eseguono query sulle informazioni del cluster restituiscono righe vuote nei cluster Pacemaker. Per creare un listener per la riconnessione trasparente dopo il failover, registrare manualmente il nome del listener in DNS con l'indirizzo IP usato per creare la risorsa IP virtuale.

È comunque possibile creare un listener per la riconnessione trasparente dopo il failover, ma è necessario registrare manualmente il nome del listener nel server DNS con l'indirizzo IP usato per creare la risorsa IP virtuale, come illustrato nelle sezioni seguenti.

Le sezioni seguenti illustrano i passaggi per configurare un cluster Pacemaker e aggiungere un gruppo di disponibilità come risorsa nel cluster per la disponibilità elevata, per ogni distribuzione di Linux supportata.

Il livello di clustering si basa sul componente aggiuntivo a disponibilità elevata di Red Hat Enterprise Linux (RHEL), basato a sua volta su Pacemaker.

Nota

Per accedere alla documentazione di Red Hat, è necessaria una sottoscrizione.

Per altre informazioni sulla configurazione del cluster, sulle opzioni degli agenti delle risorse e sulla gestione, vedere la documentazione di riferimento di RHEL.

Roadmap

I passaggi da seguire per creare un gruppo di disponibilità sui server Linux per la disponibilità elevata sono diversi da quelli relativi a un cluster di failover di Windows Server. Nell'elenco seguente sono descritti i passaggi principali:

  1. Configurare SQL Server nei nodi del cluster.

  2. Creare il gruppo di disponibilità.

  3. Configurare un modulo per la gestione di risorse cluster, ad esempio Pacemaker. Le istruzioni sono riportate in questo articolo.

    La modalità di configurazione di un modulo per la gestione di risorse cluster dipende dalla specifica distribuzione Linux.

    Importante

    Per la disponibilità elevata, negli ambienti di produzione è necessario un agente di isolamento. Nelle dimostrazioni di questa documentazione non vengono usati agenti di isolamento. Le dimostrazioni sono riportate solo a scopo di test e convalida. Un cluster Linux usa l'isolamento per ripristinare uno stato noto del cluster. La modalità di configurazione dell'isolamento dipende dalla distribuzione e dall'ambiente. Attualmente l'isolamento non è disponibile in alcuni ambienti cloud. Per altre informazioni, vedere Support Policies for RHEL High Availability Clusters - Virtualization Platforms (Criteri di supporto per il cluster RHEL a disponibilità elevata - Piattaforme di virtualizzazione).

  4. Aggiungere il gruppo di disponibilità come risorsa nel cluster.

Configurare la disponibilità elevata per RHEL

Per configurare la disponibilità elevata per RHEL, abilitare la sottoscrizione a disponibilità elevata e quindi configurare Pacemaker.

Abilitare la sottoscrizione a disponibilità elevata per RHEL

Ogni nodo del cluster deve avere una sottoscrizione appropriata per RHEL e il componente aggiuntivo a disponibilità elevata. Esaminare i requisiti riportati in How to install High Availability cluster packages in Red Hat Enterprise Linux (Come installare i pacchetti di cluster a disponibilità elevata in Red Hat Enterprise Linux). Seguire questa procedura per configurare la sottoscrizione e i repository:

  1. Registrare il sistema.

    sudo subscription-manager register
    

    Specificare il nome utente e la password.

  2. Elencare i pool disponibili per la registrazione.

    sudo subscription-manager list --available
    

    Dall'elenco dei pool disponibili, prendere nota dell'ID del pool per la sottoscrizione a disponibilità elevata.

  3. Aggiornare lo script seguente. Sostituire <pool id> con l'ID del pool per la disponibilità elevata nel passaggio precedente. Eseguire lo script per associare la sottoscrizione.

    sudo subscription-manager attach --pool=<pool id>
    
  4. Abilitare il repository.

    RHEL 7

    sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
    

    RHEL 8

    sudo subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms
    

Per altre informazioni, vedere Pacemaker - The Open Source, High Availability Cluster (Pacemaker - Il cluster open source a disponibilità elevata).

Dopo aver configurato la sottoscrizione, completare la procedura seguente per configurare Pacemaker:

Configurare Pacemaker

Dopo aver registrato la sottoscrizione, completare la procedura seguente per configurare Pacemaker:

  1. In tutti i nodi del cluster aprire le porte del firewall di Pacemaker. Per aprire queste porte con firewalld, eseguire il comando seguente:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    Se il firewall non ha una configurazione a disponibilità elevata predefinita, aprire le porte seguenti per Pacemaker.

    • TCP: porte 2224, 3121, 21064
    • UDP: porta 5405
  2. Installare i pacchetti Pacemaker in tutti i nodi.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  3. Impostare la password per l'utente predefinito creato durante l'installazione dei pacchetti Pacemaker e Corosync. Usare la stessa password in tutti i nodi.

    sudo passwd hacluster
    
  4. Per riaggiungere i nodi al cluster dopo il riavvio, abilitare e avviare il servizio pcsd e Pacemaker. Eseguire il comando seguente in tutti i nodi.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  5. Creare il cluster. Per creare il cluster, eseguire il comando seguente:

    RHEL 7

    sudo pcs cluster auth <node1> <node2> <node3> -u hacluster -p <password for hacluster>
    sudo pcs cluster setup --name <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    RHEL 8

    Per RHEL 8, sarà necessario autenticare i nodi separatamente. Immettere manualmente il nome utente e la password per hacluster, quando richiesto.

    sudo pcs host auth <node1> <node2> <node3>
    sudo pcs cluster setup <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    Nota

    Se in precedenza è stato configurato un cluster negli stessi nodi, è necessario usare l'opzione --force quando si esegue pcs cluster setup. Questa opzione equivale a eseguire pcs cluster destroy. Per abilitare nuovamente pacemaker, eseguire sudo systemctl enable pacemaker.

  6. Installare l'agente delle risorse SQL Server per SQL Server. Eseguire i comandi seguenti in tutti i nodi.

    sudo yum install mssql-server-ha
    

Dopo aver configurato Pacemaker, usare pcs per interagire con il cluster. Eseguire tutti i comandi in unico nodo del cluster.

Considerazioni per più schede di interfaccia di rete

Quando si configura la disponibilità elevata con server con più schede di interfaccia di rete, seguire questi suggerimenti:

  • Assicurati che il file hosts sia configurato in modo che gli indirizzi IP del server per più schede di interfaccia di rete vengano risolti nel nome host del server Linux in ogni nodo.

  • Quando si configura il cluster usando Pacemaker, l'uso del nome host dei server deve configurare Corosync per impostare la configurazione per tutte le schede di interfaccia di rete. La comunicazione Pacemaker/Corosync deve avvenire su una singola scheda di interfaccia di rete. Dopo aver configurato il cluster Pacemaker, modifica la configurazione nel file corosync.conf e aggiorna l'indirizzo IP per la scheda di interfaccia di rete dedicata da usare per la comunicazione Pacemaker/Corosync.

  • Il valore <hostname> specificato nel file corosync.conf deve essere uguale all'output specificato durante l'operazione di ricerca inversa (ping -a <ip_address>) e deve essere il nome breve configurato nell'host. Assicurati che il file hosts rappresenti anche l'indirizzo IP appropriato per la risoluzione dei nomi.

Di seguito sono evidenziate le modifiche apportate all'esempio del file corosync.conf:

  nodelist {
    node {
        ring0_addr: <ip_address_of_node1_NIC1>
        name: <hostname_of_node1>
        nodeid: 1
    }
    node {
        ring0_addr: <ip_address_of_node2_NIC1>
        name: <hostname_of_node2>
        nodeid: 2
    }
    node {
        ring0_addr: <ip_address_of_node3_NIC1>
        name: <hostname_of_node3>
        nodeid: 3
    }
  }

Configurare un dispositivo di isolamento

I fornitori di cluster Pacemaker richiedono l’isolamento di un nodo non riuscito, usando un dispositivo di isolamento impostato per una configurazione di cluster supportata. Quando il modulo per la gestione di risorse cluster non riesce a determinare lo stato di un nodo o di una risorsa in un nodo, è possibile ripristinare uno stato noto del cluster tramite l'isolamento.

Un dispositivo di isolamento fornisce un agente di isolamento. La configurazione di Pacemaker in Red Hat Enterprise Linux in Azure offre un esempio di come creare un dispositivo di isolamento per questo cluster in Azure. Modificare le istruzioni per l'ambiente.

L'isolamento a livello di risorsa garantisce che i dati non subiscano danni in caso di interruzione tramite la configurazione di una risorsa. È ad esempio possibile usare l'isolamento a livello di risorsa per contrassegnare come obsoleto il disco su un nodo quando il collegamento di comunicazione diventa inattivo.

L'isolamento a livello di nodo consente di assicurarsi che un nodo non esegua alcuna risorsa. Questa operazione viene eseguita tramite il reset del nodo. Pacemaker supporta un'ampia gamma di dispositivi di isolamento, ad esempio un alimentatore di continuità o schede di interfaccia di gestione per i server.

Per informazioni sull'isolamento di un nodo non riuscito, vedi gli articoli seguenti:

Nota

Poiché la configurazione dell'isolamento a livello di nodo dipende principalmente dall'ambiente in uso, disabilitarlo per questa esercitazione. Potrà essere configurato in un secondo momento. Lo script seguente disabilita l'isolamento a livello di nodo:

sudo pcs property set stonith-enabled=false

La disabilitazione dell’isolamento viene eseguita solo a scopo di test. Se si prevede di usare Pacemaker in un ambiente di produzione, è consigliabile pianificare un'implementazione dell’isolamento in base all'ambiente e mantenerla abilitata.

Impostare la proprietà del cluster cluster-recheck-interval

cluster-recheck-interval indica l'intervallo di polling in base al quale il cluster verifica se sono state apportate modifiche ai parametri delle risorse, ai vincoli o ad altre opzioni del cluster. Se una replica diventa inattiva, il cluster prova a riavviare la replica in base a un intervallo associato ai valori di failure-timeout e cluster-recheck-interval. Se, ad esempio, failure-timeout è impostato su 60 secondi e cluster-recheck-interval su 120, viene eseguito un tentativo di riavvio in base a un intervallo superiore a 60 secondi ma inferiore a 120. È consigliabile impostare failure-timeout su 60 secondi e cluster-recheck-interval su un valore superiore a 60 secondi. L'impostazione di cluster-recheck-interval su un valore inferiore non è consigliata.

Per aggiornare il valore della proprietà su 2 minutes, eseguire il comando seguente:

sudo pcs property set cluster-recheck-interval=2min

Se è già presente una risorsa del gruppo di disponibilità gestita da un cluster Pacemaker, il pacchetto Pacemaker 1.1.18-11.el7 ha introdotto una modifica del comportamento per l'impostazione del cluster start-failure-is-fatal quando il relativo valore è false. Questa modifica influisce sul flusso di lavoro del failover. Se si verifica un'interruzione in una replica primaria, è previsto il failover del cluster in una delle repliche secondarie disponibili. Al contrario, gli utenti noteranno che il cluster continuerà a provare ad avviare la replica primaria che ha subito l'interruzione. Se la replica primaria non torna mai online, a causa di un'interruzione permanente, il cluster non esegue mai il failover in un'altra replica secondaria disponibile. A causa di questa modifica, una configurazione precedentemente consigliata per impostare start-failure-is-fatal non è più valida e l'impostazione deve essere ripristinata sul valore true predefinito.

La risorsa del gruppo di disponibilità deve inoltre essere aggiornata in modo da includere la proprietà failure-timeout.

Per aggiornare il valore della proprietà su true, eseguire il comando seguente:

sudo pcs property set start-failure-is-fatal=true

Per aggiornare la proprietà failure-timeout della risorsa ag_cluster impostandola su 60s, esegui il comando seguente:

pcs resource update ag_cluster meta failure-timeout=60s

Per informazioni sulle proprietà del cluster Pacemaker, vedere Pacemaker Cluster Properties (Proprietà del cluster Pacemaker).

Creare un account di accesso di SQL Server per Pacemaker

  1. In tutte le istanze di SQL Server crea un account di accesso al server per Pacemaker.

    Il codice Transact-SQL seguente crea un account di accesso:

    USE [master]
    GO
    CREATE LOGIN [pacemakerLogin] with PASSWORD= N'ComplexP@$$w0rd!';
    
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin];
    

    Al momento della creazione del gruppo di disponibilità, l'utente Pacemaker richiederà le autorizzazioni ALTER, CONTROL, e VIEW DEFINITION per il gruppo di disponibilità, dopo che è stato creato, ma prima che vi vengano aggiunti nodi.

  2. In tutte le istanze di SQL Server salva le credenziali per l'account di accesso di SQL Server.

    echo 'pacemakerLogin' >> ~/pacemaker-passwd
    echo 'ComplexP@$$w0rd!' >> ~/pacemaker-passwd
    sudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 400 /var/opt/mssql/secrets/passwd # Only readable by root
    

Creare una risorsa del gruppo di disponibilità

Per creare la risorsa del gruppo di disponibilità, usare il comando pcs resource create e impostare le proprietà della risorsa. Il comando seguente crea una risorsa di tipo master/subordinato ocf:mssql:ag per il gruppo di disponibilità con il nome ag1.

RHEL 7

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s master notify=true

RHEL 8

Con la disponibilità di RHEL 8, la sintassi CREATE è cambiata. Se si usa RHEL 8, il termine master è stato modificato in promotable. Usare il comando di creazione seguente invece del comando precedente:

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s promotable notify=true

Nota

Quando si crea la risorsa, e periodicamente dopo la creazione, l'agente delle risorse Pacemaker imposta automaticamente il valore di REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT nel gruppo di disponibilità in base alla configurazione del gruppo di disponibilità. Se ad esempio il gruppo di disponibilità contiene tre repliche sincrone, l'agente imposterà REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT su 1. Per informazioni dettagliate e altre opzioni di configurazione, vedere High availability and data protection for availability group configurations (Disponibilità elevata e protezione dati per le configurazioni del gruppo di disponibilità).

Creare una risorsa IP virtuale

Per creare la risorsa indirizzo IP virtuale, eseguire il comando seguente in un nodo. Usare un indirizzo IP statico disponibile nella rete. Sostituire l'indirizzo IP <10.128.16.240> con un indirizzo IP valido.

sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<10.128.16.240>

Non esiste un nome di server virtuale equivalente in Pacemaker. Per usare una stringa di connessione che punta a un nome di server in formato stringa anziché a un indirizzo IP, registrare l'indirizzo della risorsa IP virtuale e il nome di server virtuale desiderato in DNS. Per le configurazioni di ripristino di emergenza, registrare il nome e l'indirizzo IP del server virtuale desiderato nei server DNS sia del sito primario sia del sito di ripristino di emergenza.

Aggiungere un vincolo di condivisione percorso

Quasi tutte le decisioni di un cluster Pacemaker, come la scelta della posizione in cui deve essere eseguita una risorsa, vengono eseguite tramite il confronto di punteggi. I punteggi vengono calcolati per singola risorsa. Il modulo per la gestione di risorse cluster sceglie il nodo con il punteggio più alto per una determinata risorsa. Se un nodo ha un punteggio negativo per una risorsa, questa non può essere eseguita su tale nodo.

In un cluster Pacemaker, è possibile modificare le decisioni del cluster applicando vincoli. I vincoli hanno un punteggio. Se un vincolo ha un punteggio inferiore a INFINITY, Pacemaker lo interpreta come suggerimento. Un vincolo con punteggio INFINITY è obbligatorio.

Per assicurarsi che la replica primaria e la risorsa IP virtuale vengano eseguite nello stesso host, definire un vincolo di condivisione percorso con punteggio INFINITY. Per aggiungere un vincolo di condivisione percorso, eseguire il comando seguente in un nodo.

RHEL 7

Quando si crea la risorsa ag_cluster in RHEL 7, viene creata come ag_cluster-master. Usare il comando seguente per RHEL 7:

sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master

RHEL 8

Quando si crea la risorsa ag_cluster in RHEL 8, viene creata come ag_cluster-clone. Usare il comando seguente per RHEL 8:

sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=Master

Aggiungere un vincolo di ordinamento

Il vincolo di condivisione percorso ha un vincolo di ordinamento implicito. Sposta la risorsa IP virtuale prima di spostare la risorsa del gruppo di disponibilità. Di seguito è indicata la sequenza di eventi predefinita:

  1. L'utente invia pcs resource move alla replica primaria del gruppo di disponibilità dal nodo 1 al nodo 2.

  2. La risorsa IP virtuale viene arrestata sul nodo 1.

  3. La risorsa IP virtuale viene avviata sul nodo 2.

    Nota

    A questo punto, l'indirizzo IP punta temporaneamente al nodo 2, mentre il nodo 2 è ancora una replica secondaria preliminare al failover.

  4. La replica primaria del gruppo di disponibilità nel nodo 1 viene abbassata di livello e diventa secondaria.

  5. La replica secondaria del gruppo di disponibilità nel nodo 2 viene alzata di livello e diventa primaria.

Per evitare che l'indirizzo IP punti temporaneamente al nodo con la replica secondaria preliminare al failover, aggiungere un vincolo di ordinamento.

Per aggiungere un vincolo di ordinamento, eseguire il comando seguente in un nodo:

RHEL 7

sudo pcs constraint order promote ag_cluster-master then start virtualip

RHEL 8

sudo pcs constraint order promote ag_cluster-clone then start virtualip

Importante

Dopo aver configurato il cluster e aggiunto il gruppo di disponibilità come risorsa cluster, non è possibile usare Transact-SQL per eseguire il failover delle risorse del gruppo di disponibilità. Le risorse cluster di SQL Server in Linux non sono strettamente associate al sistema operativo come in un cluster WSFC (Windows Server Failover Cluster). Il servizio SQL Server non è a conoscenza della presenza del cluster. Tutta l'orchestrazione viene eseguita tramite gli strumenti per la gestione di cluster. In RHEL o Ubuntu usare pcs e in SLES usare crm.

Per eseguire manualmente il failover per il gruppo di disponibilità, usare pcs. Non avviare il failover con Transact-SQL. Per istruzioni, vedere Failover.