Configurer la réplication avec les groupes de disponibilité Always On
S’applique à :SQL Server - Windows uniquement
La configuration de la réplication SQL Server et des groupes de disponibilité Always On implique sept étapes. Chaque étape est décrite plus en détail dans les sections qui suivent.
1. Configurer les publications et abonnements de base de données
Configurer le serveur de distribution
La base de données de distribution ne peut pas être placée dans un groupe de disponibilité avec SQL Server 2012 et SQL Server 2014. Il est possible de placer la base de données de distribution dans un groupe de disponibilité avec SQL 2016 et les versions ultérieures, sauf si elle est utilisée dans une topologie de réplication de fusion, de réplication bidirectionnelle ou de réplication d’égal à égal. Pour plus d’informations, consultez Configurer la base de données de distribution de réplication dans le groupe de disponibilité Always On.
Configurez la distribution sur le serveur de distribution. Si des procédures stockées sont utilisées pour la configuration, exécutez
sp_adddistributor
Utilisez le paramètre @password pour identifier le mot de passe qui sera utilisé lorsqu’un éditeur distant se connecte au serveur de distribution. Le mot de passe est également nécessaire sur chaque serveur de publication distant lorsque le serveur de distribution distant est configuré.USE master; GO EXECUTE sys.sp_adddistributor @distributor = 'MyDistributor', @password = '**Strong password for distributor**';
Créez la base de données de distribution sur le serveur de distribution. Si des procédures stockées sont utilisées pour la configuration, exécutez
sp_adddistributiondb
USE master; GO EXECUTE sys.sp_adddistributiondb @database = 'distribution', @security_mode = 1;
Configurez le serveur de publication distant. Si des procédures stockées sont utilisées pour configurer le serveur de distribution, exécutez
sp_adddistpublisher
le paramètre @security_mode est utilisé pour déterminer comment la procédure stockée de validation de l’éditeur exécutée à partir des agents de réplication, se connecte au serveur principal actuel. Si la valeur est 1, l'authentification Windows est utilisée pour la connexion au principal actuel. Si la valeur est 0, l’authentification SQL Server est utilisée avec les valeurs @login et @password spécifiées. La connexion et le mot de passe spécifiés doivent être valides sur chaque réplica secondaire pour que la procédure stockée de validation se connecte avec succès à ce réplica.Notes
Si des agents de réplication modifiés s'exécutent sur un ordinateur autre que le serveur de distribution, l'utilisation de l'authentification Windows pour la connexion au principal requiert la configuration de l'authentification Kerberos pour la communication entre les ordinateurs hôtes de réplica. L'utilisation d'une connexion SQL Server pour la connexion au principal actuel ne requiert pas l'authentification Kerberos.
USE master; GO EXECUTE sys.sp_adddistpublisher @publisher = 'AGPrimaryReplicaHost', @distribution_db = 'distribution', @working_directory = '\\MyReplShare\WorkingDir', @login = 'MyPubLogin', @password = '**Strong password for publisher**';
Pour plus d’informations, consultez sp_adddistpublisher.
Configurer l’éditeur sur l’éditeur d’origine
Configurez la distribution à distance. Si des procédures stockées sont utilisées pour configurer l’éditeur, exécutez
sp_adddistributor
Spécifiez la même valeur pour @password que celle utilisée lorsquesp_adddistrbutor
a été exécutée sur le serveur de distribution pour configurer la distribution.EXECUTE sys.sp_adddistributor @distributor = 'MyDistributor', @password = 'MyDistPass';
Activez la base de données pour la réplication. Si des procédures stockées sont utilisées pour configurer l’éditeur, exécutez
sp_replicationdboption
Si la réplication transactionnelle et de fusion doit être configurée pour la base de données, chacune doit être activée.USE master; GO EXECUTE sys.sp_replicationdboption @dbname = 'MyDBName', @optname = 'publish', @value = 'true'; EXECUTE sys.sp_replicationdboption @dbname = 'MyDBName', @optname = 'merge publish', @value = 'true';
Créez la publication, les articles et les abonnements de réplication. Pour plus d'informations sur la configuration de la réplication, consultez « Publication de données et d'objets de base de données ».
2. Configurer le groupe de disponibilité
Dans le principal visé, créez le groupe de disponibilité avec la base de données publiée (ou à publier) en tant que base de données membre. Si vous utilisez l'Assistant Groupe de disponibilité, vous pouvez autoriser l'Assistant à synchroniser pour la première fois les bases de données de réplica secondaire ou vous pouvez effectuer l'initialisation manuellement à l'aide des fonctionnalités de sauvegarde et de restauration.
Créez un écouteur DNS pour le groupe de disponibilité qui sera utilisé par les agents de réplication pour la connexion au principal actuel. Le nom de l'écouteur spécifié sera utilisé comme cible de redirection pour la paire « serveur de publication d'origine/base de données publiée ». Par exemple, si vous utilisez DDL pour configurer le groupe de disponibilité, l’exemple de code suivant peut être utilisé pour spécifier un écouteur de groupe de disponibilité pour un groupe de disponibilité existant nommé MyAG
:
ALTER AVAILABILITY GROUP 'MyAG'
ADD LISTENER 'MyAGListenerName' (WITH IP (('10.120.19.155', '255.255.254.0')));
Pour plus d’informations, consultez Création et configuration des groupes de disponibilité (SQL Server).
3. Vérifiez que tous les hôtes de réplica secondaire sont configurés pour la réplication
Pour chaque hôte de réplica secondaire, vérifiez que SQL Server a été configuré pour prendre en charge la réplication. La requête suivante peut être exécutée sur chaque hôte de réplica secondaire pour déterminer si la réplication est installée :
USE master;
GO
DECLARE @installed AS INT;
EXECUTE @installed = sys.sp_MS_replication_installed;
SELECT @installed;
Si @installed est 0, la réplication doit être ajoutée à l’installation de SQL Server.
4. Configurer les hôtes de réplica secondaires comme éditeurs de réplication
Un réplica secondaire ne peut pas agir comme éditeur ou rééditeur de la réplication, mais la réplication doit être configurée pour que le réplica secondaire puisse prendre le relais après un basculement. Sur le serveur de distribution, configurez la distribution pour chaque hôte de réplica secondaire. Indiquez la même base de données de distribution et le même répertoire de travail spécifiés lorsque le serveur de publication d'origine a été ajouté au serveur de distribution. Si vous utilisez des procédures stockées pour configurer la distribution, utilisez sp_adddistpublisher
pour associer les éditeurs distants au serveur de distribution. Si @login et @password ont été utilisés pour le serveur de publication d'origine, spécifiez les mêmes valeurs lorsque vous ajoutez les hôtes de réplica secondaire comme serveurs de publication.
EXECUTE sys.sp_adddistpublisher
@publisher = 'AGSecondaryReplicaHost',
@distribution_db = 'distribution',
@working_directory = '\\MyReplShare\WorkingDir',
@login = 'MyPubLogin',
@password = '**Strong password for publisher**';
Pour chaque hôte de réplica secondaire, configurez la distribution. Identifiez le serveur de distribution du serveur de publication d'origine comme serveur de distribution distant. Utilisez le même mot de passe que celui utilisé lorsque sp_adddistributor
a été exécuté à l’origine sur le serveur de distribution. Si des procédures stockées sont utilisées pour configurer la distribution, le paramètre @password de sp_adddistributor
est utilisé pour spécifier le mot de passe.
EXECUTE sp_adddistributor
@distributor = 'MyDistributor',
@password = '**Strong password for distributor**';
Pour chaque hôte de réplica secondaire, assurez-vous que les abonnés de transmission de type push des publications dans la base de données apparaissent en tant que serveurs liés. Si des procédures stockées sont utilisées pour configurer les serveurs de publication distants, utilisez sp_addlinkedserver
pour ajouter les abonnés (s’ils ne sont pas déjà présents) en tant que serveurs liés aux éditeurs.
EXECUTE sys.sp_addlinkedserver @server = 'MySubscriber';
5. Rediriger l’éditeur d’origine vers le nom de l'écouteur AG
Sur le serveur de distribution, dans la base de données de distribution, exécutez la procédure stockée sp_redirect_publisher
pour associer le serveur de publication d'origine et la base de données publiée au nom de l'écouteur du groupe de disponibilité.
USE distribution;
GO
EXECUTE sys.sp_redirect_publisher
@original_publisher = 'MyPublisher',
@publisher_db = 'MyPublishedDB',
@redirected_publisher = 'MyAGListenerName';
6. Exécuter la procédure stockée de validation de réplication pour vérifier la configuration
Sur le serveur de distribution, dans la base de données de distribution, exécutez la procédure stockée sp_validate_replica_hosts_as_publishers
pour vérifier que tous les hôtes de réplica sont maintenant configurés pour servir d’éditeurs pour la base de données publiée.
USE distribution;
GO
DECLARE @redirected_publisher AS sysname;
EXECUTE sys.sp_validate_replica_hosts_as_publishers
@original_publisher = 'MyPublisher',
@publisher_db = 'MyPublishedDB',
@redirected_publisher = @redirected_publisher OUTPUT;
La procédure stockée sp_validate_replica_hosts_as_publishers
doit être exécutée à partir d'une connexion disposant d'autorisations suffisantes sur chaque hôte de réplica de groupe de disponibilité pour demander les informations sur le groupe de disponibilité. Contrairement à sp_validate_redirected_publisher
, il utilise les informations d’identification de l’appelant et n’utilise pas non plus la connexion conservée dans msdb.dbo.MSdistpublishers
pour se connecter aux réplicas du groupe de disponibilité.
Erreur lors de la validation des hôtes de réplica secondaire
sp_validate_replica_hosts_as_publishers
échoue avec l’erreur suivante lors de la validation des hôtes de réplique secondaire qui n’autorisent pas l’accès en lecture ou nécessitent une intention de lecture à être spécifiée.
Msg 21899, Niveau 11, État 1, Procédure
sp_hadr_verify_subscribers_at_publisher
, Ligne 109La requête au serveur de publication redirigé 'MyReplicaHostName' pour déterminer s’il y a des entrées sysserver pour les abonnés du serveur de publication d’origine 'MyOriginalPublisher' a échoué avec l’erreur '976', message d’erreur 'Erreur 976, Niveau 14, État 1, Message : La base de données cible, 'MyPublishedDB', est membre d’un groupe de disponibilité et n’est actuellement pas accessible pour les requêtes. Le déplacement des données est suspendu ou le réplica de disponibilité n’est pas configuré pour l’accès en lecture. Pour autoriser l'accès en lecture seule à cette base de données et à d'autres dans le groupe de disponibilité, activez l'accès en lecture sur un ou plusieurs réplicas de disponibilité secondaires dans le groupe. Pour plus d’informations, consultez l’instruction ALTER AVAILABILITY GROUP dans la documentation en ligne de SQL Server.
Une ou plusieurs erreurs de validation de serveur de publication ont été rencontrées pour l'hôte de réplica 'MyReplicaHostName'.
Ce comportement est normal. Vous devez vérifier la présence des entrées de serveur d’abonné sur ces hôtes de réplica secondaire en interrogeant les entrées sysserver directement sur l’hôte.
7. Ajouter l’éditeur d’origine au moniteur de réplication
Pour chaque réplica de groupe de disponibilité, ajoutez le serveur de publication d'origine au moniteur de réplication.
Tâches associées
Réplication
Créer et configurer un groupe de disponibilité
- Utiliser l’Assistant Groupe de disponibilité (SQL Server Management Studio)
- Utiliser la boîte de dialogue Nouveau groupe de disponibilité (SQL Server Management Studio)
- Créer un groupe de disponibilité (Transact-SQL)
- Créer un groupe de disponibilité (SQL Server PowerShell)
- Spécifier l'URL de point de terminaison lors de l'ajout ou lors de la modification d'un réplica de disponibilité (SQL Server)
- Créer un point de terminaison de mise en miroir de bases de données pour les groupes de disponibilité Always On (SQL Server PowerShell)
- Joindre un réplica secondaire à un groupe de disponibilité (SQL Server)
- Préparer manuellement une base de données secondaire pour un groupe de disponibilité (SQL Server)
- Joindre une base de données secondaire à un groupe de disponibilité (SQL Server)
- Créer ou configurer un écouteur de groupe de disponibilité (SQL Server)