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
.
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
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
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
À 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
versLinAGN2
etLinAGN3
. - Copiez
LinAGN2_Cert.cer
versLinAGN1
etLinAGN3
. - Copiez
LinAGN3_Cert.cer
versLinAGN1
etLinAGN2
.
- Copiez
Modifiez la propriété et le groupe associé aux fichiers de certificat copiés sur
mssql
.sudo chown mssql:mssql <CertFileName>
Créez les connexions au niveau de l’instance et les utilisateurs associés à
LinAGN2
etLinAGN3
surLinAGN1
.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
Restaurez
LinAGN2_Cert
etLinAGN3_Cert
surLinAGN1
. 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
Accordez aux connexions associées à
LinAG2
et àLinAGN3
l’autorisation de se connecter au point de terminaison surLinAGN1
.GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login; GO GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login; GO
Créez les connexions au niveau de l’instance et les utilisateurs associés à
LinAGN1
etLinAGN3
surLinAGN2
.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
Restaurez
LinAGN1_Cert
etLinAGN3_Cert
surLinAGN2
.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
Accordez aux connexions associées à
LinAG1
et àLinAGN3
l’autorisation de se connecter au point de terminaison surLinAGN2
.GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login; GO GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login; GO
Créez les connexions au niveau de l’instance et les utilisateurs associés à
LinAGN1
etLinAGN2
surLinAGN3
.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
Restaurez
LinAGN1_Cert
etLinAGN2_Cert
surLinAGN3
.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
Accordez aux connexions associées à
LinAG1
et àLinAGN2
l’autorisation de se connecter au point de terminaison surLinAGN3
.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é.
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é.
Dans la boîte de dialogue Introduction, sélectionnez Suivant.
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) ouNONE
(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.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.
Dans la boîte de dialogue Spécifier les réplicas, sélectionnez Ajouter un réplica.
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.
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.
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.
L’exemple suivant montre un groupe de disponibilité avec deux réplicas, un type de cluster None et un réplica de configuration uniquement.
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.
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.
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 :
Sélectionnez l’onglet Routage en lecture seule.
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.
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.
Cliquez sur Suivant.
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.
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.
Sur la boîte de dialogue Résumé, sélectionnez Terminer. Le processus de création du groupe de disponibilité commence.
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 :
- CREATE AVAILABILITY GROUP (Transact-SQL)
- ALTER AVAILABILITY GROUP (Transact-SQL)
- Configurer le routage en lecture seule pour un groupe de disponibilité Always On
- Configurer un écouteur Always On pour un groupe de disponibilité
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.
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
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
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é.
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 avecIPAddress
.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 soitListenerName
, soitIPAddress
pour se connecter au groupe de disponibilité.SubnetMask
est le masque de sous-réseau deIPAddress
. Dans SQL Server 2019 (15.x) et les versions antérieures, il s’agit de255.255.255.255
. Dans SQL Server 2022 (16.x) et les versions ultérieures, il s’agit de0.0.0.0
.
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
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.
- 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 deIPAddress
. Dans SQL Server 2019 (15.x) et les versions antérieures, il s’agit de255.255.255.255
. Dans SQL Server 2022 (16.x) et les versions ultérieures, il s’agit de0.0.0.0
.
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.
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
Sur le nœud 1, entrez la commande
sudo emacs /var/opt/mssql/secrets/passwd
L’éditeur Emacs s’ouvre.
Dans l’éditeur, entrez les deux lignes suivantes :
PMLogin <StrongPassword>
Maintenez la touche
Ctrl
enfoncée et appuyez surX
, puis surC
, pour quitter et enregistrer le fichier.Execute
sudo chmod 400 /var/opt/mssql/secrets/passwd
pour verrouiller le fichier.
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.
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
Où
NameForAGResource
est le nom unique donné à cette ressource de cluster pour le groupe de disponibilité etAGName
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 quesqlag_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
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>
Où
NameForIPResource
est le nom unique de la ressource IP etIPAddress
est l’adresse IP statique attribuée à la ressource.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
Où
NameForIPResource
est le nom de la ressource IP etNameForAGResource
le nom de la ressource de groupe de disponibilité.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>
Où
NameForIPResource
est le nom de la ressource IP etNameForAGResource
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 :