Exploiter une instance de cluster de basculement sous Linux

S’applique à :SQL Server sur Linux

Cet article explique comment gérer une instance de cluster de basculement (FCI) SQL Server sous Linux. Pour créer une FCI SQL Server sous Linux, voir Configurer l’instance de cluster de basculement sur Linux (RHEL).

Description de l’architecture

La couche de clustering est basée sur l’extension Red Hat Enterprise Linux (RHEL) HA construite sur Pacemaker. Corosync et Pacemaker coordonnent les communications et la gestion des ressources du cluster. L’instance SQL Server est active sur un nœud à la fois.

Le diagramme suivant illustre les composants d’un cluster Linux avec SQL Server.

Schéma d’un cluster de basculement SQL Server à disque partagé sur Linux.

Pour plus d’informations sur la configuration du cluster, les options d’agents de ressources et la gestion, consultez la documentation de référence RHEL.

Failover

Le basculement pour les instances de cluster de basculement est similaire à un cluster de basculement Windows Server (WSFC). Si le nœud de cluster qui héberge la FCI connaît une défaillance, la FCI doit automatiquement basculer vers un autre nœud. Contrairement à un WSFC, il n’existe aucun moyen de définir des propriétaires préférés. Par conséquent, Pacemaker sélectionne le nœud qui sera le nouvel hôte pour le FCI.

Il se peut que vous souhaitiez basculer manuellement le FCI vers un autre nœud. Le processus n'est pas le même que pour les FCI sur un WSFC. Sur un WSFC, vous basculez des ressources au niveau du rôle. Dans Pacemaker, vous choisissez une ressource à déplacer, et si toutes les contraintes sont correctes, tout le reste bouge aussi.

La manière d’effectuer le basculement dépend de la distribution Linux. Suivez les instructions de votre distribution Linux.

Basculement manuel (RHEL ou Ubuntu)

Pour effectuer un basculement manuel sur des serveurs Red Hat Enterprise Linux (RHEL) ou Ubuntu, exécutez les étapes suivantes.

  1. Émettez les commandes suivantes :

    sudo pcs resource move <FCIResourceName> <NewHostNode>
    

    <FCIResourceName>est le nom de ressource Pacemaker pour la FCI SQL Server, et <NewHostNode> c’est le nom du nœud du cluster que vous souhaitez héberger la FCI.

  2. Pendant un basculement manuel, Pacemaker crée une contrainte d’emplacement sur la ressource qui a été choisie pour le déplacement manuel. Pour afficher cette contrainte, exécutez sudo pcs constraint.

  3. Une fois le basculement terminé, supprimez la contrainte :

    sudo pcs resource clear <FCIResourceName>
    

Basculement manuel (SLES)

Note

À compter de SQL Server 2025 (17.x), SUSE Linux Enterprise Server (SLES) n’est pas pris en charge. Pour SQL Server 2022 (16.x) et les versions antérieures, seule SLES 15 est prise en charge.

Dans SUSE Linux Enterprise Server (SLES), utilisez la commande migrate pour basculer manuellement une instance de cluster de basculement SQL Server. Par exemple:

crm resource migrate <FCIResourceName> <NewHostNode>

<FCIResourceName> est le nom de la ressource pour l’instance du cluster de basculement, et <NewHostNode> est le nom du nouvel hôte de destination.

Surveillez un cluster de basculement

Afficher l’état actuel du cluster :

sudo pcs status

Consultez l’état en temps réel du cluster et des ressources :

sudo crm_mon

Consultez les journaux de l’agent de ressources à /var/log/cluster/corosync.log.

Ajouter un nœud à un cluster

  1. Vérifiez l’adresse IP de chaque nœud. Le script suivant affiche l’adresse IP de votre nœud actuel.

    ip addr show
    
  2. Le nouveau nœud a besoin d’un nom unique de 15 caractères ou moins. Définissez le nom de l’ordinateur en l'ajoutant à /etc/hosts. Le script suivant vous permet de modifier /etc/hosts avec vi.

    sudo vi /etc/hosts
    

    L'exemple suivant montre /etc/hosts avec des ajouts pour trois nœuds nommés sqlfcivm1, sqlfcivm2 et 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
    

    Le fichier doit être le même sur chaque nœud.

  3. Arrêtez le service SQL Server sur le nouveau nœud.

  4. Suivez les instructions pour monter le répertoire de fichiers de la base de données à l’emplacement partagé.

    À partir du serveur NFS, installez nfs-utils:

    sudo yum -y install nfs-utils
    

    Ouvrez le pare-feu sur les clients et le serveur 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
    

    Modifiez le fichier /etc/fstab pour inclure la commande Monter :

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

    Exécutez mount -a pour que les modifications soient prises en compte.

  5. Sur le nouveau nœud, créez un fichier pour stocker le nom d’utilisateur et le mot de passe SQL Server pour la connexion à Pacemaker. La commande suivante a pour effet de créer et remplir ce fichier :

    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
    

    Avertissement

    Votre mot de passe doit respecter la stratégie de mot de passe par défaut de SQL Server. Par défaut, le mot de passe doit avoir au moins huit caractères appartenant à trois des quatre groupes suivants : lettres majuscules, lettres minuscules, chiffres de base 10 et symboles. Les mots de passe peuvent comporter jusqu'à 128 caractères. Utilisez des mots de passe aussi longs et complexes que possible.

  6. Sur le nouveau nœud, ouvrez les ports de pare-feu de Pacemaker. Pour ouvrir ces ports avec firewalld, exécutez la commande suivante :

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

    Si vous utilisez un autre pare-feu qui ne dispose pas d’une configuration haute disponibilité intégrée, ouvrez les ports suivants pour que Pacemaker communique avec les autres nœuds du cluster :

    • TCP : Ports 2224, 3121, 21064
    • UDP : Port 5405
  7. Installez les packages Pacemaker sur le nouveau nœud.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  8. Définissez le mot de passe pour l’utilisateur par défaut qui est créé pendant l’installation des packages Pacemaker et Corosync. Utilisez le même mot de passe que les nœuds existants.

    sudo passwd hacluster
    
  9. Activez et démarrez le service pcsd et Pacemaker. Le nouveau nœud peut rejoindre le cluster après un redémarrage. Exécutez la commande suivante sur le nouveau nœud.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  10. Installez l’agent de ressources FCI pour SQL Server. Exécutez la commande suivante sur le nouveau nœud.

    sudo yum install mssql-server-ha
    
  11. Sur un nœud existant du cluster, authentifiez le nouveau nœud et ajoutez-le au cluster :

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

Supprimer des nœuds d’un cluster

Pour supprimer un nœud d’un cluster, exécutez la commande suivante :

sudo pcs cluster node remove <nodeName>

Modifier la fréquence de surveillance des ressources

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

L’exemple suivant fixe l’intervalle de surveillance à 2 secondes pour la mssqlha ressource :

sudo pcs resource op monitor interval=2s mssqlha

Troubleshoot

Pendant la résolution des problèmes du cluster, il peut être utile de comprendre comment les trois démons fonctionnent ensemble pour gérer les ressources de cluster.

Daemon Description
Corosync Fournit la participation au quorum et l’échange de messages entre les nœuds du cluster.
Stimulateur cardiaque Se trouve au-dessus de Corosync et fournit des machines d’état pour les ressources.
PCSD Gère à la fois Pacemaker et Corosync via les outils pcs.

PCSD doit être en cours d’exécution pour pouvoir utiliser les outils pcs.

État actuel du cluster

sudo pcs status renvoie des informations de base sur le cluster, le quorum, les nœuds, les ressources et l’état du démon pour chaque nœud.

L’exemple suivant montre un résultat sain du quorum 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

Dans cet exemple, partition with quorum cela signifie qu’un quorum majoritaire de nœuds est en ligne. Si le cluster perd un quorum de nœuds majoritaire, pcs status retourne partition WITHOUT quorum et toutes les ressources sont arrêtées.

Online: [sqlvmnode1 sqlvmnode2 sqlvmnode3] retourne le nom de tous les nœuds participant actuellement au cluster. Si des nœuds ne sont pas participants, pcs status retourne OFFLINE: [<nodename>].

PCSD Status affiche l’état du cluster pour chaque nœud.

Raisons pour lesquelles un nœud peut être hors connexion

Vérifiez les éléments suivants lorsqu’un nœud est hors connexion.

  • Pare-feu

    Ouvrez les ports suivants sur tous les nœuds pour que Pacemaker communique :

    • TCP : Ports 2224, 3121, 21064
    • UDP : Port 5405
  • Services Pacemaker ou Corosync en cours d’exécution

  • Communication entre nœuds

  • Correspondances des noms de nœuds