Partager via


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

S’applique à :SQL Server sur Linux

Ce tutoriel montre comment créer et configurer un groupe de disponibilité (AG) pour SQL Server sur Linux. Contrairement à SQL Server 2016 (13.x) et les versions antérieures de Windows, vous pouvez activer un groupe de disponibilité avec ou sans créer d’abord le cluster Pacemaker sous-jacent. L’intégration au cluster, si nécessaire, se produit ultérieurement.

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. Sur Linux, vous pouvez activer la fonctionnalité des groupes de disponibilité de deux façons : utiliser l’utilitaire mssql-conf ou modifier le mssql.conf fichier manuellement.

Important

Vous devez activer la fonctionnalité AG pour les réplicas à des fins de configuration seulement, même sur SQL Server Express.

Utilisez l’utilitaire mssql-conf

À une 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 mssql.conf fichier, situé sous le /var/opt/mssql dossier. Ajoutez les lignes suivantes :

[hadr]

hadr.hadrenabled = 1

Redémarrez SQL Server

Après avoir activé des groupes de disponibilité, vous devez redémarrer SQL Server. Utilisez 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 à partir d’une instance sur toutes les autres instances qui participent en tant que réplicas au sein du même groupe de disponibilité. Le processus de certificat est requis même pour un réplica de configuration uniquement.

Vous pouvez uniquement créer des points de terminaison et restaurer des certificats à 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 = '<master-key-password>';
    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 = '<master-key-password>';
    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 = '<master-key-password>';
    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 = '<password>';
    
    CREATE USER LinAGN2_User
    FOR LOGIN LinAGN2_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN3_User
    FOR LOGIN LinAGN3_Login;
    GO
    

    Attention

    Votre mot de passe doit suivre la politique 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.

  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 à LinAGN2 et à LinAGN3 l’autorisation de se connecter au point de terminaison sur LinAGN1.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    
  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 = '<password>';
    
    CREATE USER LinAGN1_User
    FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login
    WITH PASSWORD = '<password>';
    
    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 à LinAGN1 et à LinAGN3 l’autorisation de se connecter au point de terminaison sur LinAGN2.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    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 = '<password>';
    
    CREATE USER LinAGN1_User
    FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN2_Login
    WITH PASSWORD = '<password>';
    
    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;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    

Créez le groupe de disponibilité

Cette section montre 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. Utilisez EXTERNAL lorsque vous déployez Pacemaker. Utiliser NONE pour des scénarios spécialisés, tels que le scale-out en lecture. La sélection de l’option pour la 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 l’ajouter à un groupe de disponibilité (AG). Cliquez sur 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 apparaissent dans la boîte de dialogue Définir les répliques. Si vous utilisez un type de cluster Externe, pour le réplica secondaire authentique, 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 fichiers secondaires lisibles ou créez un groupe de disponibilité avec un type de cluster None pour la mise à l’échelle de lecture, vous pouvez créer un écouteur en sélectionnant l’onglet Écouteur . Vous pouvez également ajouter un écouteur ultérieurement. Pour créer un écouteur, choisissez l’option Créer un écouteur de groupe de disponibilité et entrez un nom, un port TCP/IP et indiquez s’il faut utiliser une adresse IP DHCP statique ou automatiquement affectée. 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 serveur principal.

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

  11. Si vous créez un listener pour des scénarios de lecture, SSMS permet de créer le routage en lecture seule dans l'assistant. Vous pouvez également l’ajouter 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 la façon dont les répliques secondaires sont initialisées. 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). Comme pour les certificats, si vous effectuez manuellement des sauvegardes et les copiez, définissez des autorisations sur les fichiers de sauvegarde sur les autres copies de sauvegarde. 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. Vous pouvez configurer le listener et le routage en lecture seule après avoir créé le groupe de disponibilité. Vous pouvez modifier le groupe de disponibilité AG en utilisant ALTER AVAILABILITY GROUP, mais vous ne pouvez pas changer le type de cluster 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. Exécutez l’instruction suivante sur le nœud qui agit comme réplica principal et qui contient une copie complète des bases de données en lecture/écriture. 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 l’instruction suivante pour joindre le réplica au groupe de disponibilité et lancer le processus d’amorçage du réplica principal vers le 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 uniquement au réplica de configuration, exécutez l’instruction suivante pour l'ajouter au groupe de disponibilité (AG).

    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 comment configurer le routage en lecture seule dans le cadre de la création initiale du groupe de disponibilité (AG).

  1. Exécutez la commande suivante sur un nœud qui agit comme réplique principale et contient la copie complète avec droits de lecture et d'écriture 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 que vous utilisez 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 l’un des serveurs ou nœuds sous-jacents. Il est inscrit dans DNS avec IPAddress.
    • IPAddress est une adresse IP associée à ListenerName. Il est également unique et non identique à l’un des serveurs ou 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 précédentes, cette valeur est 255.255.255.255. Dans SQL Server 2022 (16.x) et versions ultérieures, cette valeur est 0.0.0.0.
  2. Dans une fenêtre de requête connectée à l'autre réplique, exécutez l'instruction suivante pour ajouter la réplique au groupe de disponibilité et lancer le processus de seeding de la réplique principale vers la réplique 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. Utilisez cette configuration pour le scénario de mise à l’échelle de lecture où aucun basculement n’est attendu. Cette étape crée l'écouteur qui est effectivement la réplique principale et met en œuvre le routage en lecture seule, en utilisant la fonctionnalité round robin.

  1. Exécutez l’instruction suivante sur le nœud qui sert de réplique principale et qui possède la copie complète en lecture/écriture 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
    

    Dans cet exemple :

    • AGName est le nom du groupe de disponibilité.
    • DBName est le nom de la base de données que vous utilisez 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 que vous créez.
      • PortOfInstance est le numéro de port utilisé par l’instance de SQL Server.
    • ListenerName est un nom différent de l’un des réplicas sous-jacents, mais qui n'est en réalité pas 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 précédentes, cette valeur est 255.255.255.255. Dans SQL Server 2022 (16.x) et versions ultérieures, cette valeur est 0.0.0.0.
  2. 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 à haute disponibilité Pacemaker qui utilise SQL Server sur Linux a besoin d’accéder à l’instance SQL Server et des autorisations sur le groupe de disponibilité lui-même. 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 ='<password>';
    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
    

    Cette commande ouvre l’éditeur Emacs.

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

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

  5. Exécutez :

    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 servent de réplicas.

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

Après avoir créé un groupe de disponibilité dans SQL Server, vous devez créer les ressources correspondantes dans Pacemaker lorsque vous spécifiez un type de cluster Externe. Deux ressources sont associées à un groupe de disponibilité : le groupe de disponibilité lui-même et une adresse IP. La configuration de la ressource d’adresse IP est facultative si vous n’utilisez pas la fonctionnalité d’écouteur, mais il est recommandé.

La ressource AG que vous créez est un type de ressource appelé clone. La ressource AG a des copies sur chaque nœud et une ressource de contrôle 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.

  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 promotable notify=true
    

    Dans cet exemple, NameForAGResource est le nom unique que vous attribuez à cette ressource de cluster pour le groupe de disponibilité et AGName est le nom du groupe de disponibilité que vous avez créé.

  2. Créez la ressource d'adresse IP pour la passerelle d'application que vous associez à la fonctionnalité d'écoute.

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

    Dans cet exemple, NameForIPResource il s’agit du nom unique de la ressource IP et IPAddress de l’adresse IP statique que vous affectez à la ressource.

  3. Pour vous assurer que l’adresse IP et la ressource AG s’exécutent sur le même nœud, configurez une contrainte de colocalisation.

    sudo pcs constraint colocation add <NameForIPResource> with promoted <NameForAGResource>-clone INFINITY
    

    Dans cet exemple, NameForIPResource il s’agit du nom de la ressource IP et NameForAGResource du 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. Bien que la contrainte de colocation implique une contrainte d'ordonnancement, cette étape la renforce.

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

    Dans cet exemple, NameForIPResource est le nom de la ressource IP et NameForAGResource est le nom de la ressource AG.

É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 :