Operare un'istanza di cluster failover su Linux

Si applica a:SQL Server su Linux

Questo articolo illustra come gestire un'istanza del cluster di failover di SQL Server in Linux. Per creare una FCI di SQL Server su Linux, vedere Configurare un'istanza del cluster di failover su Linux (RHEL).

Descrizione dell'architettura

Il livello di clustering si basa sull'add-on Red Hat Enterprise Linux (RHEL) HA costruito sopra Pacemaker. Corosync e Pacemaker coordinano le comunicazioni del cluster e la gestione delle risorse. L'istanza di SQL Server è attiva su un nodo alla volta.

Il diagramma seguente illustra i componenti in un cluster Linux con SQL Server.

Diagramma di un cluster di failover di SQL Server con disco condiviso in Linux.

Per maggiori informazioni sulla configurazione del cluster, sulle opzioni degli agent delle risorse e sulla gestione, visita la documentazione di riferimento RHEL.

Failover

Il failover per le istanze del cluster di failover è simile a quello di un Windows Server Failover Cluster (WSFC). Se il nodo del cluster che ospita l'FCI subisce un guasto, l'FCI dovrebbe eseguire automaticamente il failover su un altro nodo. A differenza di un cluster WSFC, non esiste alcun modo per impostare proprietari preferiti. Il nodo che sarà il nuovo host per l'istanza del cluster di failover (FCI) viene quindi scelto da Pacemaker.

A volte potresti voler eseguire manualmente il failover dell'FCI su un altro nodo. Il processo non è uguale a quello delle istanze di failover del cluster in un WSFC. In un cluster WSFC, il failover delle risorse avviene a livello di ruolo. In Pacemaker, scegli una risorsa da spostare e, se tutti i vincoli sono corretti, anche tutto il resto si sposta.

Il modo di eseguire il failover dipende dalla distribuzione Linux. Segui le istruzioni per la tua distribuzione Linux.

Failover manuale (RHEL o Ubuntu)

Per eseguire un failover manuale, nei server Red Hat Enterprise Linux (RHEL) o Ubuntu eseguire la procedura seguente.

  1. Immettere il comando seguente:

    sudo pcs resource move <FCIResourceName> <NewHostNode>
    

    <FCIResourceName>è il nome della risorsa Pacemaker per la FCI di SQL Server, ed <NewHostNode> è il nome del nodo del cluster che vuoi ospitare la FCI.

  2. Durante un failover manuale, Pacemaker crea un vincolo di posizione per la risorsa scelta per lo spostamento manuale. Per visualizzare questo vincolo, eseguire sudo pcs constraint.

  3. Dopo il completamento del failover, rimuovere il vincolo:

    sudo pcs resource clear <FCIResourceName>
    

Failover manuale (SLES)

Note

A partire da SQL Server 2025 (17.x), SUSE Linux Enterprise Server (SLES) non è supportato. Per SQL Server 2022 (16.x) e versioni precedenti, è supportata solo SLES 15.

In SUSE Linux Enterprise Server (SLES) usare il comando migrate per effettuare manualmente il failover di un'istanza del cluster di failover di SQL Server. Per esempio:

crm resource migrate <FCIResourceName> <NewHostNode>

<FCIResourceName> è il nome della risorsa per l'istanza del cluster di failover, ed <NewHostNode> è il nome del nuovo host di destinazione.

Monitorare un cluster di failover

Visualizzare lo stato corrente del cluster:

sudo pcs status

Visualizza lo stato in tempo reale del cluster e delle risorse:

sudo crm_mon

Visualizza i log degli agenti di risorse su /var/log/cluster/corosync.log.

Aggiungere un nodo a un cluster

  1. Controllare l'indirizzo IP per ogni nodo. Lo script seguente mostra l'indirizzo IP del nodo corrente.

    ip addr show
    
  2. Il nuovo nodo ha bisogno di un nome unico che abbia 15 caratteri o meno. Imposta il nome del computer aggiungilo a /etc/hosts. Lo script seguente consente di modificare /etc/hosts con vi.

    sudo vi /etc/hosts
    

    L'esempio seguente mostra /etc/hosts con aggiunte per tre nodi denominati sqlfcivm1, sqlfcivm2e sqlfcivm3.

    127.0.0.1      localhost localhost4 localhost4.localdomain4
    ::1            localhost localhost6 localhost6.localdomain6
    10.128.18.128  sqlfcivm1
    10.128.16.77   sqlfcivm2
    10.128.14.26   sqlfcivm3
    

    Il file deve essere lo stesso in ogni nodo.

  3. Arrestare il servizio SQL Server nel nuovo nodo.

  4. Segui le istruzioni per montare la directory del file di database nella posizione condivisa.

    Dal server NFS, installare nfs-utils:

    sudo yum -y install nfs-utils
    

    Aprire il firewall nei client e nel server NFS:

    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --permanent --add-service=mountd
    sudo firewall-cmd --permanent --add-service=rpc-bind
    sudo firewall-cmd --reload
    

    Modificare il file /etc/fstab per includere il comando mount:

    <IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=14,intr
    

    Eseguire mount -a per rendere effettive le modifiche.

  5. Nel nuovo nodo creare un file per archiviare nome utente e password di SQL Server per l'accesso a Pacemaker. Il comando seguente crea e popola questo file:

    sudo touch /var/opt/mssql/secrets/passwd
    echo "<loginName>" | sudo tee -a /var/opt/mssql/secrets/passwd
    echo "<password>" | sudo tee -a /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    

    Caution

    La password deve seguire la politica predefinita di SQL Server password. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.

  6. Nel nuovo nodo 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 stai usando un altro firewall che non ha una configurazione ad alta disponibilità integrata, apri le seguenti porte per Pacemaker per comunicare con altri nodi nel cluster:

    • TCP: porte 2224, 3121, 21064
    • UDP: porta 5405
  7. Installare i pacchetti Pacemaker nel nuovo nodo.

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

    sudo passwd hacluster
    
  9. Abilitare e avviare il servizio pcsd e Pacemaker. Il nuovo nodo può rientrare nel cluster dopo un riavvio. Eseguire il comando seguente nel nuovo nodo.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  10. Installare l'agente delle risorse FCI per SQL Server. Eseguire il comando seguente nel nuovo nodo.

    sudo yum install mssql-server-ha
    
  11. Su un nodo esistente nel cluster, autentica il nuovo nodo e aggiungilo al cluster:

    sudo pcs cluster auth <nodeName3> -u hacluster
    sudo pcs cluster node add <nodeName3>
    

Rimuovere i nodi da un cluster

Per rimuovere un nodo da un cluster, eseguire il comando seguente:

sudo pcs cluster node remove <nodeName>

Modifica la frequenza di monitoraggio delle risorse

sudo pcs resource op monitor interval=<interval>s <sqlResourceName>

Il seguente esempio imposta l'intervallo di monitoraggio a 2 secondi per la mssqlha risorsa:

sudo pcs resource op monitor interval=2s mssqlha

Troubleshoot

Nella risoluzione dei problemi del cluster, può essere utile conoscere il modo in cui i tre daemon interagiscono per gestire le risorse cluster.

Daemon Description
Corosync Fornisce l'appartenenza al quorum e la messaggistica tra i nodi del cluster.
Stimolatore cardiaco Funziona sopra Corosync e fornisce le macchine a stati per le risorse.
PCSD Gestisce sia Pacemaker che Corosync tramite gli strumenti pcs

Per usare gli strumenti pcs, è necessario che PCSD sia in esecuzione.

Stato corrente del cluster

sudo pcs status restituisce le informazioni di base sullo stato di cluster, quorum, nodi, risorse e daemon per ogni nodo.

L'esempio seguente mostra un output corretto del quorum di Pacemaker:

Cluster name: MyAppSQL
Last updated: Wed Oct 31 12:00:00 2024  Last change: Wed Oct 31 11:00:00 2024 by root via crm_resource on sqlvmnode1
Stack: corosync
Current DC: sqlvmnode1  (version 1.1.13-10.el7_2.4-44eb2dd) - partition with quorum
3 nodes and 1 resource configured

Online: [ sqlvmnode1 sqlvmnode2 sqlvmnode3 ]

Full list of resources:

mssqlha (ocf::sql:fci): Started sqlvmnode1

PCSD Status:
sqlvmnode1: Online
sqlvmnode2: Online
sqlvmnode3: Online

Daemon Status:
corosync: active/disabled
pacemaker: active/enabled

In questo esempio, partition with quorum significa che la maggioranza dei quorum dei nodi è online. Se il cluster perde un quorum di maggioranza dei nodi, pcs status restituisce partition WITHOUT quorum e tutte le risorse vengono arrestate.

Online: [sqlvmnode1 sqlvmnode2 sqlvmnode3] restituisce il nome di tutti i nodi che attualmente partecipano al cluster. Se un nodo non partecipa, pcs status restituisce OFFLINE: [<nodename>].

PCSD Status mostra lo stato del cluster per ogni nodo.

Motivi per cui un nodo potrebbe essere offline

Quando un nodo è offline, controllare gli elementi seguenti.

  • Firewall

    Apri le seguenti porte su tutti i nodi affinché Pacemaker possa comunicare:

    • TCP: porte 2224, 3121, 21064
    • UDP: porta 5405
  • Servizi Pacemaker o Corosync in esecuzione

  • Comunicazione tra nodi

  • Mappatura dei nomi dei nodi