Note :
- Ce tutoriel nécessite l'accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, voir Introduction à l' niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeurs pour les données d'identification, la location et les compartiments Oracle Cloud Infrastructure. À la fin de votre laboratoire, remplacez ces valeurs par celles propres à votre environnement en nuage.
Déployer Microsoft SQL Server distribué toujours sur les groupes disponibles pour la reprise après sinistre sur OCI
Présentation
Distributed Always On Availability Group (Groupe de disponibilité distribuée) est une fonctionnalité puissante de Microsoft SQL Server qui étend les capacités du groupe de disponibilité traditionnel pour SQL Server.
Les groupes de disponibilité répartis vous permettent de créer une solution de récupération après sinistre qui couvre plusieurs grappes de basculement Windows Server (WSFC) exécutées dans différentes régions Oracle Cloud Infrastructure (OCI).
Cela vous permet d'atteindre des niveaux plus élevés de disponibilité, de capacités de récupération après sinistre et de répartition géographique pour vos bases de données SQL Server critiques exécutées sur OCI.
Exclusions pour ce tutoriel
Dans ce tutoriel, nous ne traiterons pas de la création étape par étape du seul groupe de disponibilité Microsoft SQL Server Always On. Pour plus d'informations, voir Déployer Microsoft SQL Server toujours activé sur les groupes de disponibilité pour haute disponibilité et reprise après sinistre sur OCI.
Veuillez consulter la documentation officielle Microsoft suivante :
Objectifs
- Créer une solution de groupe de disponibilité Always On distribuée par Microsoft SQL Server sur OCI.
Préalables
-
Les composants de base d'un groupe de disponibilité distribuée sont les suivants :
-
Réseaux en nuage virtuels : Créez des réseaux en nuage virtuels OCI dans deux régions OCI distinctes et connectez-vous au moyen de passerelles de routage dynamique (DRG) d'appairage distant.
-
AOAG 1 : Cette opération s'exécute dans la région OCI 1. C'est là que la base de données à répliquer s'exécute normalement. Ceci est basé sur un WSFC exécuté sur SQL Server #1 et SQL Server #2 dans l'exemple suivant (région OCI Paris).
-
AOAG 2 : Cette opération s'exécute dans la région OCI 2. Ce groupe de disponibilité Always On est complètement indépendant et s'exécute sur un document WSFC composé par SQL Server #3 et SQL Server #4 dans l'exemple suivant (région OCI de Marseille).
-
AOAG réparti : Construction logique créée dans la base de données SQL à répliquer.
L'illustration suivante présente la représentation logique d'un groupe de disponibilité distribué.
-
-
Créez deux groupes de disponibilité Always On indépendants (l'un dans la première région et l'autre dans la deuxième région). Pour plus d'informations, voir Déployer Microsoft SQL Server toujours activé sur les groupes de disponibilité pour haute disponibilité et reprise après sinistre sur OCI.
Maintenant, nous avons deux groupes de disponibilité Toujours activé indépendants qui s'exécutent dans deux régions OCI différentes appairées. Dans cet exemple, les régions OCI sont Paris et Marseille.
-
Nous avons le premier cluster WSFC (
paris-wsfc
) dans la première région avec le premier groupe de disponibilité SQL Always On (paris-aoag
) et le module d'écoute SQL (paris-sql-list
) pour le groupe de disponibilité SQL Always On.Les deux noeuds Windows sont
sql-srv1
etsql-srv2
. -
Dans la deuxième région, nous avons le deuxième cluster WSFC (
marseille-wsfc
) avec le deuxième groupe de disponibilité SQL Always On (marseille-aoag
) et le module d'écoute SQL (mars-sql-list
) pour le deuxième groupe de disponibilité SQL Always On.Les deux noeuds Windows sont
sql-srv3
etsql-srv4
. -
Du point de vue de SQL Server, à partir de
sql-srv1
(paris-aoag
), nous pouvons voir dans cet exemple DemoDB qui est la base de données répliquée avec le premier groupe de disponibilité Always On et le nouveaudistributed-aoag
. -
Ainsi, en vous connectant à
sql-srv3
(marseille-aoag
), nous pouvons voir dans cet exemple aussi DemoDB qui est la base de données répliquée avec le premier groupe de disponibilité Always On, le nouveaudistributed-aoag
et lemarseille-aoag
qui est le deuxième groupe de disponibilité Always On créé dans le deuxième site (Marseille).
-
Tâche 1 : Créer un groupe de disponibilité répartie
Créez un groupe de disponibilité distribué (distributed-aoag
) composé des deux groupes de disponibilité sous-jacents qui sont déjà en cours d'exécution.
Comme déjà mentionné, nous supposons que deux groupes de disponibilité Always On indépendants sont déjà en cours d'exécution dans deux régions OCI différentes.
Le deuxième groupe de disponibilité Toujours activé (marseille-aoag
), le groupe de disponibilité de secours, ne doit avoir aucune base de données associée, de sorte que pratiquement le deuxième groupe de disponibilité Toujours activé doit être vide avant la création du groupe de disponibilité distribué, de sorte qu'aucune base de données de disponibilité n'est associée. Vous pouvez créer le deuxième groupe de disponibilité Always On comme d'habitude avec une base de données initiale associée, puis supprimer cette base de données qui n'a été utilisée que pour créer le deuxième groupe de disponibilité Always On. En effet, l'interface graphique n'est pas possible de créer un groupe de disponibilité Always On auquel aucune base de données n'est associée.
-
Créez un groupe de disponibilité distribué sur le premier groupe de disponibilité Always On.
Connectez-vous à SQL Server sur le premier serveur (noeud du site Paris
sql-srv1
dans cet exemple) et exécutez les commandes SQL suivantes.Note :
-
Les noms de module d'écoute sont
paris-sql-list
etmars-sql-list
. -
Port TCP à utiliser,
5022
est le port du point d'extrémité et doit être utilisé. Cela diffère généralement du port du module d'écoute (1433
). -
Les noms de groupe de disponibilité doivent être exactement les noms utilisés par le groupe de disponibilité Always On déjà en cours d'exécution.
USE MASTER; CREATE AVAILABILITY GROUP [distributed-aoag] WITH (DISTRIBUTED) AVAILABILITY GROUP ON 'paris-aoag' WITH ( LISTENER_URL = 'tcp://paris-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ), 'marseille-aoag' WITH ( LISTENER_URL = 'tcp://mars-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ); GO
-
-
Rejoignez le groupe de disponibilité distribué sur le deuxième groupe de disponibilité Always On.
Connectez-vous à SQL Server sur le premier serveur du deuxième groupe de disponibilité Always On (serveur du site de Marseille
sql-srv3
) et exécutez les commandes SQL suivantes.USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] JOIN AVAILABILITY GROUP ON 'paris-aoag' WITH ( LISTENER_URL = 'tcp://paris-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ), 'marseille-aoag' WITH ( LISTENER_URL = 'tcp://mars-sql-list.acme.corp:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, FAILOVER_MODE = MANUAL, SEEDING_MODE = AUTOMATIC ); GO
-
Il est important de comprendre que, contrairement aux groupes de disponibilité traditionnels, les groupes de disponibilité distribués ne nécessitent pas de groupes de ressources ou de rôles dans le WSFC. Toutes les métadonnées sont gérées dans SQL Server. Cela signifie que même SQL Server Management Studio n'affiche pas directement les noms des bases de données dans le groupe de disponibilité distribuée.
Pour afficher ces informations, exécutez le script Transact-SQL suivant.
--View metadata and status of the Distributed Availability Group SELECT r.replica_server_name, r.endpoint_url, rs.connected_state_desc, rs.role_desc, rs.operational_state_desc, rs.recovery_health_desc,rs.synchronization_health_desc, r.availability_mode_desc, r.failover_mode_desc FROM sys.dm_hadr_availability_replica_states rs INNER JOIN sys.availability_replicas r ON rs.replica_id=r.replica_id ORDER BY r.replica_server_name
Note : Pour assurer une latence de réseau potentielle entre les régions, nous avons configuré le groupe de disponibilité Toujours activé principal et secondaire avec une réplication de validation asynchrone. Cela réduit la surcharge de performance de la base de données principale. Dans chaque groupe de disponibilité Always On, nous avons opté pour la réplication synchrone-commit entre les répliques afin d'assurer une haute disponibilité. Toutefois, pour le basculement entre les répliques asynchrones-commit (dans le cas d'un groupe de disponibilité distribué), la réduction des pertes de données nécessite un basculement temporaire vers le mode de validation synchrone avant le lancement du basculement. Pour failover_mode, le seul mode disponible pour le groupe de disponibilité répartie est manuel.
Tâche 2 : Procédure de basculement pour un groupe de disponibilité distribué
Dans cette tâche, nous allons parler de basculement entre les deux groupes de disponibilité Always On. La procédure de basculement de la base de données se compose des étapes et vérifications simples suivantes.
-
Vérifications initiales.
-
Remplacez le mode de disponibilité asynchrone par synchrone, pour le groupe de disponibilité principal Always On et le groupe de disponibilité secondaire Always On.
-
Exécutez des scripts pour vérifier si la synchronisation est correcte.
-
Remplacez le rôle du groupe de disponibilité principal Always On (Toujours activé) par le rôle secondaire.
-
Basculement vers le groupe de disponibilité Always On secondaire.
-
Modifiez le mode de disponibilité de synchrone à asynchrone, pour le groupe de disponibilité principal Always On et le groupe de disponibilité secondaire Always On.
Voici la marche à suivre :
-
Exécutez les scripts suivants pour vérifier si la synchronisation est correcte, d'abord sur le SQL principal actuel du site principal actuel, puis sur le SQL principal du site secondaire.
Les résultats exécutés doivent être
CONNECTED_STATE
=CONNECTED
etSYNCHRONIZATION_HEALTH
=HEALTHY
.select ag.name, ag.is_distributed, ar.replica_server_name, ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc, ars.operational_state_desc, ars.synchronization_health_desc from sys.availability_groups ag join sys.availability_replicas ar on ag.group_id=ar.group_id left join sys.dm_hadr_availability_replica_states ars on ars.replica_id=ar.replica_id where ag.is_distributed=1 GO
-
Modifiez le mode de disponibilité. Exécutez d'abord le script suivant sur le serveur SQL principal actuel du site principal actuel, puis sur le serveur SQL principal du site secondaire.
--Run this first on the primary replica of the primary AOAG and then again on the secondary AOAG USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] MODIFY AVAILABILITY GROUP ON 'paris-aoag' WITH ( AVAILABILITY_MODE = SYNCHRONOUS_COMMIT ), 'marseille-aoag' WITH ( AVAILABILITY_MODE = SYNCHRONOUS_COMMIT );
-
Pour éviter toute perte de données, vérifiez les résultats de cette étape. Le statut doit être
SYNCHRONIZED
etlast_hardened_lsn
doit correspondre pour chaque base de données à la fois sur la base principale globale et sur le transitaire.-- Run this query on the Global Primary and the forwarder -- Check the results to see if synchronization_state_desc is SYNCHRONIZED, and the last_hardened_lsn is the same per database on both the global primary and forwarder -- If not rerun the query on both side every 5 seconds until it is the case -- SELECT ag.name , drs.database_id , db_name(drs.database_id) as database_name , drs.group_id , drs.replica_id , drs.synchronization_state_desc , drs.last_hardened_lsn FROM sys.dm_hadr_database_replica_states drs INNER JOIN sys.availability_groups ag on drs.group_id = ag.group_id;
-
Vous êtes maintenant prêt à définir
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
sur le serveur SQL principal courant sur le site principal courant.--Run this script into Primary AOAG USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);
Et maintenant, vous êtes prêt à modifier le rôle du groupe de disponibilité principal Always On de primaire à secondaire.
--Run this script into Primary AOAG, this will terminate client applications connected to the primary replica of the primary AOAG USE MASTER; ALTER AVAILABILITY GROUP [distributed-aoag] SET (ROLE = SECONDARY);
-
Modifiez le rôle du groupe de disponibilité secondaire Always On de secondaire à principal. Le script suivant effectuera cette modification de rôle, permettant à la base de données d'effectuer des opérations de lecture ou d'écriture. En outre, les rôles des groupes de disponibilité Always On au sein du groupe de disponibilité distribué seront également mis à jour en conséquence.
--Run this script into Secondary AOAG, this will terminate client applications connected to the primary replica of the primary AOAG ALTER AVAILABILITY GROUP [distributed-aoag] FORCE_FAILOVER_ALLOW_DATA_LOSS;
Exécutez le script suivant pour vérifier le statut.
--check the status on the new primary (formerly standby site) select ag.name, ag.is_distributed, ar.replica_server_name, ar.availability_mode_desc, ars.connected_state_desc, ars.role_desc, ars.operational_state_desc, ars.synchronization_health_desc from sys.availability_groups ag join sys.availability_replicas ar on ag.group_id=ar.group_id left join sys.dm_hadr_availability_replica_states ars on ars.replica_id=ar.replica_id where ag.is_distributed=1 GO
-
Maintenant, sur le nouveau serveur SQL principal, désactivez
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
.--Run this script into Primary AOAG ALTER AVAILABILITY GROUP [distributed-aoag] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0);
Remplacez le mode de disponibilité par le mode standard en exécutant le script suivant sur les sites principal et secondaire.
--Run this first on the primary replica of the primary AOAG and then again on the secondary AOAG ALTER AVAILABILITY GROUP [distributed-aoag] MODIFY AVAILABILITY GROUP ON 'paris-aoag' WITH ( AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT ), 'marseille-aoag' WITH ( AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT );
Tâche 3 : Procédure de secours pour le groupe distribué toujours activé
Pour restaurer Paris comme site principal et Marseille comme site secondaire, il suffit d'effectuer une nouvelle permutation pour inverser la synchronisation, comme indiqué dans la Tâche 2.
Liens connexes
Confirmation
- Auteurs - Alessandro Volpi (spécialiste de la solution en nuage)
Autres ressources d'apprentissage
Explorez d'autres laboratoires sur la page docs.oracle.com/learn ou accédez à plus de contenu d'apprentissage gratuit sur le canal YouTube d'Oracle Learning. De plus, visitez education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Deploy Microsoft SQL Server Distributed Always On Availability Groups for DR on OCI
G23260-01
December 2024