Créer et configurer un groupe de disponibilité pour SQL Server sur Linux

S’applique à : SQL Server - Linux

Ce tutoriel traite de la création et de la configuration d’un groupe de disponibilité pour SQL Server sur Linux. Contrairement à SQL Server 2016 (13.x) et aux versions antérieures sur Windows, vous pouvez activer un groupe de disponibilité en commençant ou non par créer le cluster Pacemaker sous-jacent. Si elle est nécessaire, l’intégration au cluster n’est effectuée que plus tard.

Le tutoriel inclut les tâches suivantes :

  • Activer des groupes de disponibilité.
  • Créer des points de terminaison de groupe de disponibilité et des certificats.
  • Utiliser SQL Server Management Studio (SSMS) ou Transact-SQL pour créer un groupe de disponibilité.
  • Créer la connexion SQL Server et les autorisations pour Pacemaker.
  • Créer des ressources de groupe de disponibilité dans un cluster Pacemaker (type externe uniquement).

Prérequis

Déployez le cluster de haute disponibilité de Pacemaker comme décrit dans Déployer un cluster Pacemaker pour SQL Server sur Linux.

Activez la fonctionnalité Groupes de disponibilité

Vous ne pouvez pas utiliser PowerShell ou le Gestionnaire de configuration SQL Server pour activer la fonctionnalité Groupes de disponibilité comme sur Windows. Sous Linux, vous devez utiliser mssql-conf pour activer la fonctionnalité. Il y a deux façons d’activer la fonctionnalité Groupes de disponibilité : utilisez l’utilitaire mssql-conf ou modifiez manuellement le fichier mssql.conf.

Important

La fonctionnalité Groupe de disponibilité doit être activée pour les réplicas de configuration uniquement, même sur SQL Server Express.

Utilisez l’utilitaire mssql-conf

Dans l’invite, exécutez la commande suivante :

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1

Modifiez le fichier mssql-conf

Vous pouvez également modifier le fichier mssql.conf, situé dans le dossier /var/opt/mssql, pour ajouter les lignes suivantes :

[hadr]

hadr.hadrenabled = 1

Redémarrez SQL Server

Après avoir activé les groupes de disponibilité, comme sur Windows, vous devez redémarrer SQL Server à l’aide de la commande suivante :

sudo systemctl restart mssql-server

Créez les points de terminaison du groupe de disponibilité et les certificats

Un groupe de disponibilité utilise des points de terminaison TCP pour la communication. Sous Linux, les points de terminaison d’un groupe de disponibilité ne sont pris en charge que si des certificats sont utilisés pour l’authentification. Vous devez restaurer le certificat d’une instance sur toutes les autres instances, qui participeront en tant que réplicas au même groupe de disponibilité. Le processus de certificat est requis même pour un réplica de configuration uniquement.

La création de points de terminaison et la restauration de certificats ne peuvent être effectuées qu’à l’aide de Transact-SQL. Vous pouvez également utiliser des certificats non générés par SQL Server. Vous avez également besoin d’un processus de gestion et de remplacement des certificats qui arrivent à expiration.

Important

Si vous envisagez l’Assistant SQL Server Management Studio pour créer le groupe de disponibilité, vous devez toujours créer et restaurer les certificats à l’aide de Transact-SQL sur Linux.

Pour obtenir la syntaxe complète des options disponibles pour les différentes commandes (notamment celles portant sur la sécurité), consultez les ressources suivantes :

Remarque

Bien que vous soyez en train de créer un groupe de disponibilité, le type de point de terminaison utilise FOR DATABASE_MIRRORING, car certains aspects sous-jacents ont préalablement été partagés avec cette fonctionnalité maintenant abandonnée.

Cet exemple crée des certificats pour une configuration à trois nœuds. Les noms d’instance sont LinAGN1, LinAGN2 et LinAGN3.

  1. Exécutez le script suivant sur LinAGN1 pour créer la clé principale, le certificat et le point de terminaison, ainsi que pour sauvegarder le certificat. Pour cet exemple, le port TCP standard 5022 est utilisé pour le point de terminaison.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN1_Cert
        WITH SUBJECT = 'LinAGN1 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN1_Cert TO FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP STATE = STARTED AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING(AUTHENTICATION = CERTIFICATE LinAGN1_Cert, ROLE = ALL);
    GO
    
  2. Procédez de la même façon sur LinAGN2 :

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
    WITH SUBJECT = 'LinAGN2 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN2_Cert
    TO FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        AUTHENTICATION = CERTIFICATE LinAGN2_Cert,
        ROLE = ALL);
    GO
    
  3. Enfin, exécutez la même séquence sur LinAGN3 :

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
        WITH SUBJECT = 'LinAGN3 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN3_Cert TO FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP STATE = STARTED AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING(AUTHENTICATION = CERTIFICATE LinAGN3_Cert, ROLE = ALL);
    GO
    
  4. À l’aide de scp ou d’un autre utilitaire, copiez les sauvegardes du certificat sur chaque nœud qui fera partie du groupe de disponibilité.

    Pour cet exemple :

    • Copiez LinAGN1_Cert.cer vers LinAGN2 et LinAGN3.
    • Copiez LinAGN2_Cert.cer vers LinAGN1 et LinAGN3.
    • Copiez LinAGN3_Cert.cer vers LinAGN1 et LinAGN2.
  5. Modifiez la propriété et le groupe associé aux fichiers de certificat copiés sur mssql.

    sudo chown mssql:mssql <CertFileName>
    
  6. Créez les connexions au niveau de l’instance et les utilisateurs associés à LinAGN2 et LinAGN3 sur LinAGN1.

    CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login;
    GO
    
  7. Restaurez LinAGN2_Cert et LinAGN3_Cert sur LinAGN1. Le fait d’avoir les certificats des autres réplicas est un aspect important de la communication et de la sécurité du groupe de disponibilité.

    CREATE CERTIFICATE LinAGN2_Cert AUTHORIZATION LinAGN2_User
    FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert AUTHORIZATION LinAGN3_User
    FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  8. Accordez aux connexions associées à LinAG2 et à LinAGN3 l’autorisation de se connecter au point de terminaison sur LinAGN1.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  9. Créez les connexions au niveau de l’instance et les utilisateurs associés à LinAGN1 et LinAGN3 sur LinAGN2.

    CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login;
    GO
    
  10. Restaurez LinAGN1_Cert et LinAGN3_Cert sur LinAGN2.

    CREATE CERTIFICATE LinAGN1_Cert
    AUTHORIZATION LinAGN1_User
    FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
    AUTHORIZATION LinAGN3_User
    FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  11. Accordez aux connexions associées à LinAG1 et à LinAGN3 l’autorisation de se connecter au point de terminaison sur LinAGN2.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. Créez les connexions au niveau de l’instance et les utilisateurs associés à LinAGN1 et LinAGN2 sur LinAGN3.

    CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login;
    GO
    
  13. Restaurez LinAGN1_Cert et LinAGN2_Cert sur LinAGN3.

    CREATE CERTIFICATE LinAGN1_Cert
    AUTHORIZATION LinAGN1_User
    FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
    AUTHORIZATION LinAGN2_User
    FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
  14. Accordez aux connexions associées à LinAG1 et à LinAGN2 l’autorisation de se connecter au point de terminaison sur LinAGN3.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    

Créez le groupe de disponibilité

Cette section explique comment utiliser SQL Server Management Studio (SSMS) ou Transact-SQL pour créer le groupe de disponibilité pour SQL Server.

Utilisez SQL Server Management Studio.

Cette section montre comment créer un groupe de disponibilité avec un type de cluster externe à l’aide de SSMS avec l’Assistant Nouveau groupe de disponibilité.

  1. Dans SSMS, développez Haute disponibilité Always On, cliquez avec le bouton droit sur Groupes de disponibilité et sélectionnez Assistant Nouveau groupe de disponibilité.

  2. Dans la boîte de dialogue Introduction, sélectionnez Suivant.

  3. Dans la boîte de dialogue Spécifier les options du groupe de disponibilité, entrez un nom pour le groupe de disponibilité et sélectionnez un type de cluster EXTERNAL (externe) ou NONE (aucun) dans la liste déroulante. Externe doit être utilisé lorsque Pacemaker est déployé. Aucun est destiné à des scénarios spécialisés, tels que l’échelle horizontale de lecture. La sélection de l’option de détection d’intégrité au niveau de la base de données est facultative. Pour plus d’informations sur cette option, consultez Option de détection de l’intégrité au niveau base de données du groupe de disponibilité pour le basculement. Cliquez sur Suivant.

    Capture d’écran de Créer un groupe de disponibilité montrant le type de cluster.

  4. Dans la boîte de dialogue Sélectionner les bases de données, sélectionnez les bases de données qui participeront au groupe de disponibilité. Chaque base de données doit avoir une sauvegarde complète avant de pouvoir être ajoutée à un groupe de disponibilité. Sélectionnez Suivant.

  5. Dans la boîte de dialogue Spécifier les réplicas, sélectionnez Ajouter un réplica.

  6. Dans la boîte de dialogue Se connecter au serveur, entrez le nom de l'instance Linux de SQL Server qui sera le réplica secondaire ainsi que les informations d’identification pour se connecter. Sélectionnez Connecter.

  7. Répétez les deux étapes précédentes pour l’instance qui contiendra un réplica de configuration uniquement ou un autre réplica secondaire.

  8. Les trois instances doivent maintenant être répertoriées dans la boîte de dialogue Spécifier les réplicas. Si vous utilisez un type de cluster externe, pour le réplica secondaire qui sera vraiment secondaire, assurez-vous que le mode de disponibilité correspond à celui du réplica principal et que le mode de basculement est défini sur Externe. Pour le réplica de configuration uniquement, sélectionnez un mode de disponibilité de configuration uniquement.

    L’exemple suivant montre un groupe de disponibilité avec deux réplicas, un type de cluster externe et un réplica de configuration uniquement.

    Capture d’écran de Créer un groupe de disponibilité montrant l’option secondaire lisible.

    L’exemple suivant montre un groupe de disponibilité avec deux réplicas, un type de cluster None et un réplica de configuration uniquement.

    Capture d’écran de Créer un groupe de disponibilité montrant la page Réplicas.

  9. Si vous souhaitez modifier les préférences de sauvegarde, sélectionnez l’onglet Préférences de sauvegarde. Pour plus d’informations sur les préférences de sauvegarde dans le cadre des groupes de disponibilité, consultez Configurer des sauvegardes sur des réplicas secondaires d’un groupe de disponibilité Always On.

  10. Si vous utilisez des réplicas secondaires lisibles ou créez un groupe de disponibilité avec un type de cluster None pour l’échelle lecture, vous pouvez créer un écouteur en sélectionnant l’onglet Écouteur. Un écouteur peut également être ajouté ultérieurement. Pour créer un écouteur, choisissez l’option Créer un écouteur de groupe de disponibilité, entrez un nom, un port TCP/IP et indiquez si vous souhaitez utiliser une adresse IP DHCP affectée automatiquement ou statique. N’oubliez pas que pour un groupe de disponibilité avec un type de cluster None, l’adresse IP doit être statique et définie sur l’adresse IP du principal.

    Capture d’écran de Créer un groupe de disponibilité montrant l’option d’écouteur.

  11. Si un écouteur est créé pour des scénarios lisibles, SSMS 17.3 ou version ultérieure autorise la création du routage en lecture seule dans l’Assistant. Il peut également être ajouté ultérieurement via SSMS ou Transact-SQL. Pour activer le routage en lecture seule maintenant :

    1. Sélectionnez l’onglet Routage en lecture seule.

    2. Entrez les URL pour les réplicas en lecture seule. Ces URL sont similaires aux points de terminaison, sauf qu’elles utilisent le port de l’instance et non le point de terminaison.

    3. Sélectionnez chaque URL et, dans la partie inférieure, sélectionnez les réplicas lisibles. Pour sélectionner plusieurs réplicas, maintenez la touche MAJ enfoncée ou effectuez un cliquer-glisser.

  12. Cliquez sur Suivant.

  13. Choisissez comment les réplicas secondaires seront initialisés. La valeur par défaut consiste à utiliser l'amorçage automatique, qui requiert le même chemin sur tous les serveurs participant au groupe de disponibilité. L’assistant peut également sauvegarder, copier et restaurer (deuxième option) ; joindre si vous avez sauvegardé, copié et restauré manuellement la base de données sur les réplicas (troisième option) ; ou ajouter ultérieurement la base de données (dernière option). Quant aux certificats, si vous faites manuellement des sauvegardes et que vous les copiez, les autorisations sur les fichiers de sauvegarde doivent être définies sur les autres réplicas. Cliquez sur Suivant.

  14. Dans la boîte de dialogue Validation, si tout ne réussit pas, examinez les détails. Certains avertissements sont acceptables et ne sont pas éliminatoires, par exemple si vous ne créez pas d’écouteur. Cliquez sur Suivant.

  15. Sur la boîte de dialogue Résumé, sélectionnez Terminer. Le processus de création du groupe de disponibilité commence.

  16. Lorsque la création du groupe de disponibilité est terminée, sélectionnez Fermer sur les résultats. Vous pouvez maintenant voir le groupe de disponibilité sur les réplicas dans les vues de gestion dynamique, ainsi que dans le dossier Haute disponibilité Always On dans SSMS.

Utiliser Transact-SQL

Cette section présente des exemples de création d’un groupe de disponibilité à l’aide de Transact-SQL. L’écouteur et le routage en lecture seule peuvent être configurés après la création du groupe de disponibilité. Le groupe de disponibilité proprement dit peut être modifié avec ALTER AVAILABILITY GROUP, mais la modification du type de cluster ne peut pas être effectuée dans SQL Server 2017 (14.x). Si vous ne vouliez pas créer de groupe de disponibilité avec un type de cluster externe, vous devez le supprimer et le recréer avec un type de cluster « None ». Pour plus d’informations et d’autres options, consultez les liens suivants :

Exemple A : deux réplicas avec un réplica à configuration uniquement (type de cluster externe)

Cet exemple montre comment créer un groupe de disponibilité à deux réplicas qui utilise un réplica de configuration uniquement.

  1. Lancez l’exécution sur le nœud qui sera le réplica principal contenant la copie en lecture et en écriture entière des bases de données. Cet exemple utilise l’amorçage automatique.

    CREATE AVAILABILITY GROUP [<AGName>]
    WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE <DBName>
    REPLICA ON N'LinAGN1' WITH (
       ENDPOINT_URL = N' TCP://LinAGN1.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
    N'LinAGN2' WITH (
       ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
       SEEDING_MODE = AUTOMATIC),
    N'LinAGN3' WITH (
       ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
       AVAILABILITY_MODE = CONFIGURATION_ONLY);
    GO
    
  2. Dans une fenêtre de requête connectée à l’autre réplica, exécutez la commande suivante pour joindre le réplica au groupe de disponibilité et initier le processus d’amorçage du réplica principal au réplica secondaire.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. Dans une fenêtre de requête connectée au réplica de configuration uniquement, joignez-le au groupe de disponibilité.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    

Exemple B : trois réplicas avec routage en lecture seule (type de cluster externe)

Cet exemple montre trois réplicas complets et la manière dont le routage en lecture seule peut être configuré dans le cadre de la création initiale du groupe de disponibilité.

  1. Lancez l’exécution sur le nœud qui sera le réplica principal contenant la copie en lecture et en écriture entière des bases de données. Cet exemple utilise l’amorçage automatique.

    CREATE AVAILABILITY GROUP [<AGName>] WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE < DBName > REPLICA ON
        N'LinAGN1' WITH (
            ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN2.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:1433')
        ),
        N'LinAGN2' WITH (
            ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:1433')
        ),
        N'LinAGN3' WITH (
            ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN2.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN3.FullyQualified.Name:1433')
        )
        LISTENER '<ListenerName>' (
            WITH IP = ('<IPAddress>', '<SubnetMask>'), Port = 1433
        );
    GO
    

    Voici quelques points à noter concernant cette configuration :

    • AGName est le nom du groupe de disponibilité.
    • DBName est le nom de la base de données qui est utilisée avec le groupe de disponibilité. Il peut également s’agir d’une liste de noms séparés par des virgules.
    • ListenerName est un nom différent de celui des serveurs/nœuds sous-jacents. Il sera inscrit dans le DNS avec IPAddress.
    • IPAddress est une adresse IP associée à ListenerName. Elle est également unique et différente de celle des serveurs/nœuds. Les applications et les utilisateurs finaux utilisent soit ListenerName, soit IPAddress pour se connecter au groupe de disponibilité.
    • SubnetMask est le masque de sous-réseau de IPAddress. Dans SQL Server 2019 (15.x) et les versions antérieures, il s’agit de 255.255.255.255. Dans SQL Server 2022 (16.x) et les versions ultérieures, il s’agit de 0.0.0.0.
  2. Dans une fenêtre de requête connectée à l’autre réplica, exécutez la commande suivante pour joindre le réplica au groupe de disponibilité et initier le processus d’amorçage du réplica principal au réplica secondaire.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. Répétez l’étape 2 pour le troisième réplica.

Exemple C : deux réplicas avec routage en lecture seule (type de cluster « None »)

Cet exemple illustre la création d’une configuration à deux réplicas à l’aide d’un type de cluster None. Il est utilisé pour le scénario de l’échelle lecture, où aucun basculement n’est attendu. Cela crée l’écouteur qui est en fait le réplica principal, ainsi que le routage en lecture seule, à l’aide de la fonctionnalité de tournoi toutes rondes.

  1. Lancez l’exécution sur le nœud qui sera le réplica principal contenant la copie en lecture et en écriture entière des bases de données. Cet exemple utilise l’amorçage automatique.
CREATE AVAILABILITY
GROUP [<AGName>]
WITH (CLUSTER_TYPE = NONE)
FOR DATABASE <DBName> REPLICA ON
    N'LinAGN1' WITH (
        ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name: <PortOfEndpoint>',
        FAILOVER_MODE = MANUAL,
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        PRIMARY_ROLE(
            ALLOW_CONNECTIONS = READ_WRITE,
            READ_ONLY_ROUTING_LIST = (('LinAGN1.FullyQualified.Name'.'LinAGN2.FullyQualified.Name'))
        ),
        SECONDARY_ROLE(
            ALLOW_CONNECTIONS = ALL,
            READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:<PortOfInstance>'
        )
    ),
    N'LinAGN2' WITH (
        ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfEndpoint>',
        FAILOVER_MODE = MANUAL,
        SEEDING_MODE = AUTOMATIC,
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                 ('LinAGN1.FullyQualified.Name',
                    'LinAGN2.FullyQualified.Name')
                 )),
        SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfInstance>')
    ),
    LISTENER '<ListenerName>' (WITH IP = (
             '<PrimaryReplicaIPAddress>',
             '<SubnetMask>'),
            Port = <PortOfListener>
    );
GO

Où :

  • AGName est le nom du groupe de disponibilité.
  • DBName est le nom de la base de données qui sera utilisée avec le groupe de disponibilité. Il peut également s’agir d’une liste de noms séparés par des virgules.
  • PortOfEndpoint est le numéro de port utilisé par le point de terminaison créé.
  • PortOfInstance est le numéro de port utilisé par l’instance de SQL Server.
  • ListenerName est un nom différent de celui des réplicas sous-jacents, mais il n’est pas réellement utilisé.
  • PrimaryReplicaIPAddress est l’adresse IP du réplica principal.
  • SubnetMask est le masque de sous-réseau de IPAddress. Dans SQL Server 2019 (15.x) et les versions antérieures, il s’agit de 255.255.255.255. Dans SQL Server 2022 (16.x) et les versions ultérieures, il s’agit de 0.0.0.0.
  1. Joignez le réplica secondaire au groupe de disponibilité et lancez l’amorçage automatique.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = NONE);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    

Créer la connexion SQL Server et les autorisations pour Pacemaker

Un cluster de haute disponibilité Pacemaker sous-jacent à SQL Server sur Linux doit avoir accès à l’instance SQL Server ainsi qu’aux autorisations du groupe de disponibilité proprement dit. Ces étapes permettent de créer la connexion et les autorisations associées, ainsi qu’un fichier qui indique à Pacemaker comment se connecter à SQL Server.

  1. Dans une fenêtre de requête connectée au premier réplica, exécutez le script suivant :

    CREATE LOGIN PMLogin WITH PASSWORD ='<StrongPassword>';
    GO
    
    GRANT VIEW SERVER STATE TO PMLogin;
    GO
    
    GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::<AGThatWasCreated> TO PMLogin;
    GO
    
  2. Sur le nœud 1, entrez la commande

    sudo emacs /var/opt/mssql/secrets/passwd
    

    L’éditeur Emacs s’ouvre.

  3. Dans l’éditeur, entrez les deux lignes suivantes :

    PMLogin
    
    <StrongPassword>
    
  4. Maintenez la touche Ctrl enfoncée et appuyez sur X, puis sur C, pour quitter et enregistrer le fichier.

  5. Execute

    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

    pour verrouiller le fichier.

  6. Répétez les étapes 1 à 5 sur les autres serveurs qui serviront de réplicas.

Créer les ressources de groupe de disponibilité dans le cluster Pacemaker (externe uniquement)

Après la création d’un groupe de disponibilité dans SQL Server, les ressources correspondantes doivent être créées dans Pacemaker lorsqu’un type de cluster externe est spécifié. Il existe deux ressources associées à un groupe de disponibilité : le groupe de disponibilité proprement dit et l’adresse IP. La configuration de la ressource d’adresse IP est facultative si vous n’utilisez pas la fonctionnalité d’écouteur, mais elle est recommandée.

La ressource de groupe de disponibilité que vous avez créée est un type spécial de ressource appelé clone. La ressource de groupe de disponibilité a des copies sur chaque nœud, une ressource de contrôle étant appelée maître. Le maître est associé au serveur qui héberge le réplica principal. Les réplicas secondaires hôtes d’autres ressources (standard ou de configuration uniquement) peuvent être promus maître dans un basculement.

Notes

Communication sans stéréotype

Cet article contient des références au terme esclave, un terme que Microsoft considère comme choquant lorsqu’il est utilisé dans ce contexte. Le terme apparaît dans cet article, car il apparaît actuellement dans le logiciel. Lorsque le terme sera supprimé du logiciel, nous le supprimerons de l’article.

  1. Créez la ressource de groupe de disponibilité avec la syntaxe suivante :

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s --master meta notify=true
    

    NameForAGResource est le nom unique donné à cette ressource de cluster pour le groupe de disponibilité et AGName le nom du groupe de disponibilité qui a été créé.

    Sur RHEL 7.7 et Ubuntu 18.04 et versions ultérieures, vous pouvez rencontrer un avertissement avec l’utilisation de --master, ou une erreur telle que sqlag_monitor_0 on ag1 'not configured' (6): call=6, status=complete, exitreason='Resource must be configured with notify=true'. Pour éviter cette situation, utilisez :

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s master notify=true
    
  2. Créez la ressource d’adresse IP pour le groupe de disponibilité qui sera associé à la fonctionnalité d’écouteur.

    sudo pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
    

    NameForIPResource est le nom unique de la ressource IP et IPAddress est l’adresse IP statique attribuée à la ressource.

  3. Pour vous assurer que l’adresse IP et la ressource de disponibilité de groupe s’exécutent sur le même nœud, une contrainte de colocalisation doit être configurée.

    sudo pcs constraint colocation add <NameForIPResource> <NameForAGResource>-master INFINITY with-rsc-role=Master
    

    NameForIPResource est le nom de la ressource IP et NameForAGResource le nom de la ressource de groupe de disponibilité.

  4. Créez une contrainte de classement pour vous assurer que la ressource de groupe de disponibilité est active et en cours d’exécution avant l’adresse IP. Alors que la contrainte de colocalisation implique une contrainte de classement, elle l’applique.

    sudo pcs constraint order promote <NameForAGResource>-master then start <NameForIPResource>
    

    NameForIPResource est le nom de la ressource IP et NameForAGResource le nom de la ressource de groupe de disponibilité.

Étape suivante

Dans ce tutoriel vous avez appris comment créer et configurer un groupe de disponibilité pour SQL Server sur Linux. Vous avez appris à :

  • Activer des groupes de disponibilité.
  • Créer des points de terminaison et des certificats de groupes de disponibilité.
  • Utiliser SQL Server Management Studio (SSMS) ou Transact-SQL pour créer un groupe de disponibilité.
  • Créer la connexion SQL Server et les autorisations pour Pacemaker.
  • Créer des ressources de groupe de disponibilité dans un cluster Pacemaker.

Pour la plupart des tâches d’administration du groupe de disponibilité, notamment les mises à niveau et le basculement, consultez :