Gestire un'istanza del cluster di failover RHEL per SQL Server

Si applica a:SQL Server - Linux

Questo documento descrive come eseguire le attività seguenti per SQL Server in un cluster di failover di dischi condivisi con Red Hat Enterprise Linux.

  • Effettuare il failover manuale del cluster
  • Monitorare un servizio SQL Server del cluster di failover
  • Aggiungere un nodo del cluster
  • Rimuovere un nodo del cluster
  • Modificare la frequenza di monitoraggio delle risorse di SQL Server

Descrizione dell'architettura

Il livello di clustering si basa sul componente aggiuntivo a disponibilità elevata di Red Hat Enterprise Linux (RHEL), basato a sua volta su Pacemaker. Corosync e Pacemaker coordinano le comunicazioni del cluster e la gestione delle risorse. L'istanza di SQL Server è attiva in un nodo o nell'altro.

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

Red Hat Enterprise Linux 7 Shared Disk SQL Cluster.

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

Effettuare il failover manuale del cluster

Il comando resource move crea un vincolo che forza l'avvio della risorsa nel nodo di destinazione.  Dopo l'esecuzione del comando move, l'esecuzione di clear per la risorsa rimuoverà il vincolo e sarà possibile spostare nuovamente la risorsa o effettuare il failover automatico della risorsa.

sudo pcs resource move <sqlResourceName> <targetNodeName>
sudo pcs resource clear <sqlResourceName>

L'esempio seguente sposta la risorsa mssqlha in un nodo denominato sqlfcivm2 e quindi rimuove il vincolo in modo che la risorsa possa passare in un nodo diverso in un secondo momento.

sudo pcs resource move mssqlha sqlfcivm2
sudo pcs resource clear mssqlha

Monitorare un servizio SQL Server del cluster di failover

Visualizzare lo stato corrente del cluster:

sudo pcs status

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

sudo crm_mon

Visualizzare i log degli agenti delle risorse in /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 deve avere un nome univoco di 15 caratteri o meno. Per impostazione predefinita, in Red Hat Linux il nome computer è localhost.localdomain. Questo nome predefinito potrebbe non essere univoco ed è troppo lungo. Impostare il nome computer per il nuovo nodo. Per impostare il nome computer, aggiungerlo a /etc/hosts. Lo script seguente consente di modificare /etc/hosts con vi.

    sudo vi /etc/hosts
    

    L'esempio seguente mostra /etc/hosts con l'aggiunta di tre nodi denominati sqlfcivm1, sqlfcivm2 e sqlfcivm3.

    127.0.0.1      localhost localhost4 localhost4.localdomain4
    ::1            localhost localhost6 localhost6.localdomain6
    10.128.18.128  fcivm1
    10.128.16.77   fcivm2
    10.128.14.26   fcivm3
    

    Il file deve essere lo stesso in ogni nodo.

  3. Arrestare il servizio SQL Server nel nuovo nodo.

  4. Seguire le istruzioni per montare la directory del file di database nel percorso condiviso:

    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/passwd
    sudo echo "<loginName>" >> /var/opt/mssql/secrets/passwd
    sudo echo "<loginPassword>" >> /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/passwd
    sudo chmod 600 /var/opt/mssql/passwd
    
  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 si sta usando un altro firewall che non ha una configurazione a disponibilità elevata predefinita, è necessario aprire le porte seguenti per consentire a Pacemaker di comunicare con altri nodi del 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. In questo modo, il nuovo nodo potrà unirsi nuovamente in join con il cluster dopo il 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 i comandi seguenti nel nuovo nodo.

    sudo yum install mssql-server-ha
    
  11. In un nodo esistente del cluster autenticare il nuovo nodo e aggiungerlo al cluster:

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

    L'esempio seguente aggiunge un nodo denominato vm3 al cluster.

    sudo pcs cluster auth
    sudo pcs cluster start
    

Rimuovere i nodi da un cluster

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

sudo pcs cluster node remove <nodeName>

Modificare la frequenza dell'intervallo di monitoraggio della risorsa sqlservr

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

L'esempio seguente imposta l'intervallo di monitoraggio su 2 secondi per la risorsa mssql:

sudo pcs resource op monitor interval=2s mssqlha

Risolvere i problemi del cluster di dischi condivisi Red Hat Enterprise Linux per SQL Server

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

App Descrizione
Corosync Fornisce l'appartenenza al quorum e la messaggistica tra i nodi del cluster.
Pacemaker Si basa su 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.

Un esempio di output del quorum di Pacemaker integro è:

Cluster name: MyAppSQL
Last updated: Wed Oct 31 12:00:00 2016  Last change: Wed Oct 31 11:00:00 2016 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

Nell'esempio, partition with quorum indica che un quorum di maggioranza 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

    Le porte seguenti devono essere aperte in tutti i nodi perché Pacemaker riesca a comunicare.

    • **TCP: 2224, 3121, 21064
  • Servizi Pacemaker o Corosync in esecuzione

  • Comunicazione tra nodi

  • Mapping dei nomi dei nodi