Cette page vous explique comment gérer les instances dupliquées avec accès en lecture. Ces opérations incluent la désactivation et l'activation de la réplication, la promotion d'une instance dupliquée, la configuration de la réplication parallèle et la vérification de l'état de réplication.
Pour en savoir plus sur le fonctionnement de la réplication, consultez la page Réplication dans Cloud SQL.
Désactiver la duplication
La réplication est activée par défaut au démarrage d'une instance dupliquée. Toutefois, vous avez la possibilité de désactiver la réplication, par exemple à des fins de débogage ou d'analyse de l'état d'une instance. Lorsque vous êtes prêt, vous pouvez la réactiver de façon explicite. La désactivation ou la réactivation de la réplication ne redémarre pas l'instance dupliquée.
La désactivation de la réplication n'arrête pas l'instance dupliquée. Celle-ci devient une instance avec accès en lecture seule qui ne réplique plus son instance maître. Les frais liés à l'instance continuent de vous être facturés. Sur l'instance dupliquée, vous pouvez réactiver la réplication, la supprimer, ou la promouvoir en instance autonome.
Pour désactiver la réplication, procédez comme suit :
Console
-
Dans Google Cloud Console, accédez à la page Instances Cloud SQL.
- Sélectionnez une instance dupliquée en cliquant sur son nom.
- Cliquez sur Désactiver la duplication dans la barre de boutons.
- Cliquez sur OK.
gcloud
gcloud sql instances patch REPLICA_NAME \ --no-enable-database-replication
REST v1
Pour exécuter cette commande cURL dans une invite de ligne de commande, vous devez obtenir un jeton d'accès à l'aide de la commande gcloud auth print-access-token. Vous pouvez également utiliser APIs Explorer sur la page dédiée à la méthode "instances.patch" pour envoyer la requête d'API REST.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- project-id : ID du projet
- replica-name : nom de l'instance dupliquée
Méthode HTTP et URL :
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name
Corps JSON de la requête :
{ "settings": { "databaseReplicationEnabled": "False" } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
REST v1beta4
Pour exécuter cette commande cURL dans une invite de ligne de commande, vous devez obtenir un jeton d'accès à l'aide de la commande gcloud auth print-access-token. Vous pouvez également utiliser APIs Explorer sur la page dédiée à la méthode "instances.patch" pour envoyer la requête d'API REST.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- project-id : ID du projet
- replica-name : nom de l'instance dupliquée
Méthode HTTP et URL :
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name
Corps JSON de la requête :
{ "settings": { "databaseReplicationEnabled": "False" } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
Activer la duplication
Lorsqu'une instance dupliquée ne réplique aucune donnée pendant une longue période, il lui faut plus de temps pour rattraper l'instance maître. Dans ce cas, supprimez l'instance dupliquée et créez-en une autre.
Pour activer la réplication, procédez comme suit :
Console
-
Dans Google Cloud Console, accédez à la page Instances Cloud SQL.
- Sélectionnez une instance dupliquée en cliquant sur son nom.
- Cliquez sur Activer la duplication.
- Cliquez sur OK.
gcloud
gcloud sql instances patch REPLICA_NAME \ --enable-database-replication
REST v1
Pour exécuter cette commande cURL dans une invite de ligne de commande, vous devez obtenir un jeton d'accès à l'aide de la commande gcloud auth print-access-token. Vous pouvez également utiliser APIs Explorer sur la page dédiée à la méthode "instances.patch" pour envoyer la requête d'API REST.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- project-id : ID du projet
- replica-name : nom de l'instance dupliquée
Méthode HTTP et URL :
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name
Corps JSON de la requête :
{ "settings": { "databaseReplicationEnabled": "True" } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
REST v1beta4
Pour exécuter cette commande cURL dans une invite de ligne de commande, vous devez obtenir un jeton d'accès à l'aide de la commande gcloud auth print-access-token. Vous pouvez également utiliser APIs Explorer sur la page dédiée à la méthode "instances.patch" pour envoyer la requête d'API REST.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- project-id : ID du projet
- replica-name : nom de l'instance dupliquée
Méthode HTTP et URL :
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name
Corps JSON de la requête :
{ "settings": { "databaseReplicationEnabled": "True" } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
Promouvoir une instance dupliquée
La promotion d'une instance dupliquée avec accès en lecture entraîne l'arrêt de la réplication et la transformation de l'instance en instance principale Cloud SQL autonome avec accès en lecture et écriture.
Lorsque elles sont promues, les instances dupliquées avec accès en lecture sont automatiquement configurées avec des sauvegardes, mais elles ne sont pas configurées en tant qu'instances à haute disponibilité. Vous pouvez activer la haute disponibilité après leur promotion, comme vous le feriez avec n'importe quelle instance non répliquée. La configuration d'une instance dupliquée avec accès en lecture pour la haute disponibilité s'effectue de la même manière que pour une instance principale. Découvrez comment configurer l'instance pour la haute disponibilité.
Si l'instance principale est toujours disponible et traite les requêtes des clients, vous devez effectuer les opérations suivantes avant de promouvoir une instance dupliquée avec accès en lecture :
- Arrêtez toutes les opérations en écriture sur l'instance principale.
- Vérifiez l'état de réplication de l'instance dupliquée (suivez les instructions de l'onglet Client MySQL).
- Vous devez vérifier que l'instance dupliquée est en cours de duplication, puis attendre que le délai de duplication signalé par la métrique
Seconds_Behind_Master
atteigne 0.
Sinon, il est possible que certaines des transactions validées sur l'instance principale soient manquantes dans l'instance nouvellement promue.
Pour promouvoir une instance dupliquée en instance autonome, procédez comme suit :
Console
-
Dans Google Cloud Console, accédez à la page Instances Cloud SQL.
- Sélectionnez une instance dupliquée en cliquant sur son nom.
- Cliquez sur Promouvoir une instance dupliquée.
- Cliquez sur OK.
gcloud
gcloud sql instances promote-replica REPLICA_NAME
REST v1
Pour exécuter cette commande cURL dans une invite de ligne de commande, vous devez obtenir un jeton d'accès à l'aide de la commande gcloud auth print-access-token. Vous pouvez également utiliser APIs Explorer sur la page dédiée à la méthode "instances.promoteReplica" pour envoyer la requête d'API REST.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- project-id : ID du projet
- replica-name : nom de l'instance dupliquée
Méthode HTTP et URL :
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name/promoteReplica
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
REST v1beta4
Pour exécuter cette commande cURL dans une invite de ligne de commande, vous devez obtenir un jeton d'accès à l'aide de la commande gcloud auth print-access-token. Vous pouvez également utiliser APIs Explorer sur la page dédiée à la méthode "instances.promoteReplica" pour envoyer la requête d'API REST.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
- project-id : ID du projet
- replica-name : nom de l'instance dupliquée
Méthode HTTP et URL :
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name/promoteReplica
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
Vérifiez que l'instance promue est configurée correctement. Envisagez en particulier de configurer la haute disponibilité de l'instance si nécessaire.
configurer la réplication parallèle.
La réduction du délai avant réplication est importante pour gérer les performances de réplication. Un délai avant réplication survient lorsque les mises à jour d'une instance dupliquée avec accès en lecture sont en retard par rapport aux mises à jour de l'instance principale. Cette section explique comment les utilisateurs peuvent activer la réplication parallèle, ce qui peut réduire le délai avant réplication.
Dans la réplication MySQL, un thread SQL de réplication permet d'exécuter les transactions collectées dans le journal de relais de l'instance dupliquée avec accès en lecture. La réplication parallèle réduit le délai de réplication en augmentant le nombre de threads SQL qui exécutent ces transactions. Les instances dupliquées avec accès en lecture pour lesquelles la réplication parallèle est activée sont parfois appelées "instances dupliquées multithread".
La réplication parallèle est disponible dans les trois scénarios suivants dans Cloud SQL pour MySQL :
- Instances dupliquées avec accès en lecture
- Réplication à partir d'un serveur externe
- Ancienne configuration de haute disponibilité
Par souci de simplicité, cette page utilise les termes "instance principale" et "instance dupliquée avec accès en lecture".
Étapes de base pour modifier les options de réplication parallèle
Pour activer la réplication parallèle, procédez comme suit :
- Sur l'instance dupliquée avec accès en lecture, désactivez la réplication.
- Sur l'instance dupliquée avec accès en lecture, définissez les options pour la réplication parallèle. Exécutez la commande
gcloud
pour définir les options. L'option de la console Google Cloud est désactivée lorsque la réplication est désactivée. - Toujours sur la même instance, activez la réplication.
- Sur l'instance principale, vous pouvez définir les options permettant d'optimiser les performances pour la réplication parallèle si vous le souhaitez.
Instances dupliquées avec accès en lecture : options de réplication parallèle
Cloud SQL pour MySQL accepte plusieurs options de réplication parallèle sur les instances dupliquées avec accès en lecture. Pour en savoir plus sur les options, cliquez sur les liens suivants vers la documentation MySQL 8.0 :
- replica_parallel_workers
- replica_parallel_type
- replica_preserve_commit_order
- replica_pending_jobs_size_max
La modification de ces options ne redémarre pas l'instance dupliquée avec accès en lecture.
Le tableau suivant contient les plages autorisées et les valeurs par défaut pour ces options :
Option de l'instance dupliquée avec accès en lecture | Valeurs autorisées | MySQL 5.7 (valeur par défaut) | MySQL 8.0 et versions ultérieures (valeur par défaut) |
---|---|---|---|
replica_parallel_workers |
0-1024 | 0 | 0 (MySQL 8.0.26 et versions antérieures) 4 (MySQL 8.0.27 et versions ultérieures) |
replica_parallel_type |
DATABASE, LOGICAL_CLOCK |
DATABASE |
DATABASE (MySQL 8.0.26 et versions antérieures)LOGICAL_CLOCK (MySQL 8.0.27 et versions ultérieures) |
replica_preserve_commit_order |
ON, OFF |
OFF |
OFF (MySQL 8.0.26 et versions antérieures)ON (MySQL 8.0.27 et versions ultérieures) |
replica_pending_jobs_size_max |
1024-1 Go | 16 Mo | 128 Mo |
L'option replica_preserve_commit_order
évite les trous dans la séquence des transactions exécutées à partir du journal de relais de l'instance dupliquée.
Le paramètre replica_preserve_commit_order=1
requiert les opérations suivantes :
- Les journaux binaires doivent être activés sur l'instance dupliquée (uniquement pour MySQL 5.7, MySQL 8.0.18 et versions antérieures)
- L'option
replica_parallel_type
doit être définie surLOGICAL_CLOCK
.
L'option replica_pending_jobs_size_max
définit la mémoire maximale, en octets, disponible pour les files d'attente contenant des événements qui ne sont pas encore appliqués.
Instance principale : options de réplication parallèle
Cloud SQL pour MySQL est compatible avec plusieurs options pour une utilisation sur une instance principale. Vous pouvez utiliser ces options pour régler les performances de réplication pour les instances dupliquées avec accès en lecture pour lesquelles la réplication parallèle est activée. Pour en savoir plus sur les options, cliquez sur les liens suivants vers la documentation MySQL 8.0 :
- binlog_transaction_dependency_history_size
- binlog_transaction_dependency_tracking
- transaction_write_set_extraction
La modification de ces options ne redémarre pas l'instance principale.
Le tableau suivant contient les plages autorisées et les valeurs par défaut pour ces options :
Option de l'instance principale | Valeurs autorisées | MySQL 5.7 (valeur par défaut) | MySQL 8.0 (valeur par défaut) | MySQL 8.4 (valeur par défaut) |
---|---|---|---|---|
binlog_transaction_dependency_history_size |
1-1000000 | 25 000 | 25 000 | 25 000 |
binlog_transaction_dependency_tracking |
COMMIT_ORDER, WRITESET, WRITESET_SESSION |
COMMIT_ORDER |
WRITESET |
N/A (obsolète dans MySQL 8.4) |
transaction_write_set_extraction |
OFF, MURMUR32, XXHASH64 |
OFF |
XXHASH64 |
N/A (obsolète dans MySQL 8.4) |
Dans MySQL 5.7, si binlog_transaction_dependency_tracking
est défini sur WRITESET
ou WRITESET_SESSION
, transaction_write_set_extraction
doit être défini sur une valeur non OFF
(XXHASH64
ou MURMUR32
).
Vérifier l'état de la duplication
Lorsque vous affichez une instance dupliquée à l'aide de Google Cloud Console ou que vous vous connectez à l'instance à l'aide d'un client d'administration, vous obtenez des informations sur la réplication, y compris l'état et les métriques. Si vous utilisez gcloud CLI, vous obtenez un bref résumé de la configuration de la réplication.
Avant de vérifier l'état de la réplication d'une instance dupliquée Cloud SQL, exécutez la commande gcloud sql instances describe
pour afficher l'état de l'instance. Vous pouvez ainsi vérifier si la réplication est activée pour l'instance dupliquée.
Les métriques suivantes sont disponibles pour les instances dupliquées. Apprenez-en plus sur les autres métriques disponibles pour l'ensemble des instances, y compris les instances non dupliquées.
Métrique | Description |
---|---|
État de la réplication ( cloudsql.googleapis.com ) |
Indique si la réplication diffuse activement les journaux de l'instance principale vers l'instance dupliquée. Les valeurs possibles sont les suivantes :
Cette métrique indique |
Délai avant réplication ( cloudsql.googleapis.com ) |
La durée de retard de l'instance dupliquée par rapport à l'état de l'instance principale. Cela correspond à la différence entre (1) l'heure actuelle et (2) l'horodatage d'origine auquel la transaction a été validée et qui est actuellement appliquée à l'instance répliquée. En particulier, si cette instance dupliquée n'a pas encore appliqué l'écriture dans la base de données, les écritures peuvent être comptabilisées comme étant en retard, même si elles ont été reçues par l'instance dupliquée. Pour les instances répliquées en cascade, chaque paire instance principale/instance répliquée est surveillée séparément et il n'existe pas de métrique spécifique donnant le délai de bout en bout (de l'instance principale vers l'instance répliquée). Cette métrique indique la valeur de |
Latence du réseau ( cloudsql.googleapis.com ) |
Durée, en secondes, nécessaire pour écrire le binlog dans la base de données principale et atteindre le thread d'E/S dans l'instance dupliquée. Si la valeur "network_lag" est nulle ou négligeable, mais que la valeur "replica_lag" est élevée, cela signifie que le thread SQL ne peut pas appliquer les modifications de réplication suffisamment rapidement. |
État d'exécution du thread d'E/S esclave ( cloudsql.googleapis.com ) |
Indique si le thread d'E/S pour la lecture du journal binaire de l'instance principale est en cours d'exécution sur l'instance dupliquée. Les valeurs possibles sont les suivantes :
Cette métrique indique la valeur de |
État d'exécution du thread SQL esclave ( cloudsql.googleapis.com ) |
Indique si le thread SQL permettant l'exécution des événements consignés dans le journal de relais est en cours d'exécution sur l'instance dupliquée. Les valeurs possibles sont les suivantes :
Cette métrique indique la valeur de |
Pour vérifier l'état de la réplication, procédez comme suit :
Console
Cloud SQL indique les métriques Replication State
et Replication Lag
dans le tableau de bord de surveillance Cloud SQL par défaut.
Pour afficher d'autres métriques liées aux instances dupliquées régionales et interrégionales, ainsi que les instances dupliquées des serveurs externes, créez un tableau de bord personnalisé et ajoutez-y les métriques que vous souhaitez surveiller :
-
Dans Google Cloud Console, accédez à la page Monitoring.
- Sélectionnez l'onglet Tableaux de bord.
- Cliquez sur Créer un tableau de bord.
- Attribuez un nom au tableau de bord, puis cliquez sur OK.
- Cliquez sur Ajouter un graphique.
- Pour Type de ressource, sélectionnez Base de données Cloud SQL.
- Effectuez l'une des actions suivantes :
- Pour surveiller la métrique de l'état de réplication : saisissez
Replication state
dans le champ Sélectionner une métrique. Ensuite, ajoutez le filtrestate = "Running"
. Le graphique indique 1 si la réplication est en cours, et 0 sinon. - Pour surveiller la métrique du délai de réplication : saisissez
replica_lag
dans le champ Sélectionner une métrique. Le graphique montre la durée du retard de l'état de l'instance dupliquée par rapport à celui de son instance principale. - Pour surveiller l'état du thread d'E/S de l'instance dupliquée : saisissez
Slave I/O thread running state
dans le champ Sélectionner une métrique. Ajoutez ensuite un filtre surstate = "Yes"
. Le graphique indique 1 si le thread est en cours d'exécution et 0 dans le cas contraire. - Pour surveiller l'état du thread SQL de l'instance dupliquée : saisissez
Slave SQL thread running state
dans le champ Sélectionner une métrique. Ajoutez ensuite un filtre surstate = "Yes"
. Le graphique indique 1 si le thread est en cours d'exécution et 0 dans le cas contraire.
gcloud
Vous pouvez vérifier l'état de la réplication d'une instance dupliquée à l'aide de la commande suivante :
gcloud sql instances describe REPLICA_NAME
Dans le résultat, recherchez les propriétés databaseReplicationEnabled
et masterInstanceName
.
Vous pouvez vérifier si une instance maître possède des instances dupliquées à l'aide de la commande suivante :
gcloud sql instances describe PRIMARY_INSTANCE_NAME
Dans le résultat, recherchez la propriété replicaNames
.
Client mysql
- Connectez-vous à l'instance dupliquée à partir d'un client MySQL.
Pour en savoir plus, consultez la page Options de connexion pour les applications externes.
- Vérifiez l'état de l'instance dupliquée :
SHOW REPLICA STATUS \G
Recherchez les métriques suivantes dans le résultat de la commande :
Master_Host
: nom de l'instance principale.Slave_IO_Running
etSlave_SQL_Running
: indiquent respectivement si les threads d'E/S et SQL sont en cours d'exécution. Ces threads sont responsables du transfert des événements depuis le journal principal vers le journal de relais de l'instance dupliquée, ainsi que de l'exécution de ces événements à partir du journal de relais. La valeur de la métrique estYes
si le thread est en cours d'exécution. Les deux threads doivent être en cours d'exécution pour que la réplication soit active.Seconds_Behind_Master
: durée du retard, en secondes, dans le traitement par l'instance dupliquée des transactions de l'instance principale, c'est-à-dire la différence entre (1) l'heure actuelle et (2) l'horodatage d'origine auquel la transaction actuellement appliquée à l'instance dupliquée a été validée sur l'instance principale. La métrique vautNULL
si la réplication est interrompue.-
Master_Log_file
,Read_Master_Log_Pos
,Relay_Master_Log_File
,Exec_Master_Log_Pos
: Ces métriques affichent les coordonnées (nom de fichier et décalage) jusqu'auxquelles le thread d'E/S dispose d'événements de lecture (Master_Log_file
etRead_Master_Log_Pos
) et jusqu'auxquelles le thread SQL a exécuté des événements (Relay_Master_Log_File
etExec_Master_Log_Pos
). Si elles sont identiques (c'est-à-dire,Master_Log_file
est égal àRelay_Master_Log_File
etRead_Master_Log_Pos
est égal àExec_Master_Log_Pos
), cela signifie que l'instance dupliquée a traité tous les événements qu'elle a reçus de l'instance principale.
Pour en savoir plus sur le résultat de cette commande, consultez la documentation MySQL sur la vérification de l'état de la réplication.
Résoudre les problèmes
Problème | Dépannage |
---|---|
L'instance répliquée avec accès en lecture n'a pas commencé à se répliquer lors de la création. | Les fichiers journaux indiquent probablement une erreur plus spécifique. Inspectez les journaux dans Cloud Logging pour rechercher l'erreur en question. |
Impossible de créer l'instance dupliquée avec accès en lecture : erreur invalidFlagValue. | L'un des indicateurs de la requête n'est pas valide. Il peut s'agir d'une option que vous avez explicitement définie ou d'une option définie sur une valeur par défaut.
Tout d'abord, vérifiez que la valeur de l'option Si l'option |
Impossible de créer l'instance dupliquée avec accès en lecture : erreur inconnue. | Les fichiers journaux indiquent probablement une erreur plus spécifique.
Inspectez les journaux dans Cloud Logging pour rechercher l'erreur en question.
Si l'erreur est : |
Le disque est saturé. | Le disque de l'instance principale peut arriver à saturation lors de la création de l'instance dupliquée. Modifiez l'instance principale en augmentant la taille du disque. |
L'instance dupliquée utilise trop de mémoire. | L'instance dupliquée met en cache les opérations de lecture souvent demandées dans une mémoire temporaire, ce qui peut l'amener à utiliser plus de mémoire que l'instance principale.
Redémarrez l'instance dupliquée afin de récupérer l'espace de mémoire temporaire. |
La duplication s'est arrêtée. | La limite de stockage maximale a été atteinte et l'augmentation automatique de l'espace de stockage n'est pas activée.
Modifiez l'instance pour activer |
Le délai de duplication est systématiquement long. | La charge d'écriture est trop élevée pour que l'instance dupliquée puisse la traiter. Le délai de duplication s'allonge lorsque le thread SQL d'une instance dupliquée ne parvient pas à suivre le thread d'E/S. Certains types de requêtes ou de charges de travail peuvent allonger le délai de duplication de manière temporaire ou permanente pour un schéma donné. Voici quelques causes typiques affectant le délai de duplication :
Voici quelques solutions possibles :
|
Le délai de réplication augmente soudainement. | Ce problème est causé par des transactions de longue durée. Lorsqu'une transaction (une ou plusieurs instructions) est validée sur l'instance source, l'heure de début de la transaction est enregistrée dans le journal binaire. Lorsque l'instance répliquée reçoit cet événement binlog, elle compare ce code temporel au code temporel actuel pour calculer le délai de réplication. Par conséquent, une transaction de longue durée sur la source entraîne un délai de réplication important immédiat sur l'instance dupliquée. Si la quantité de modifications de ligne dans la transaction est importante, l'instance dupliquée prendra également beaucoup de temps à l'exécuter. Pendant ce temps, le délai de réplication augmente. Une fois que l'instance dupliquée a terminé cette transaction, la période de rattrapage dépend de la charge de travail d'écriture sur la source et de la vitesse de traitement de l'instance dupliquée.
Voici quelques solutions possibles pour éviter une longue transaction :
|
La modification des options de réplication parallèle génère une erreur. | Une valeur incorrecte est définie pour une ou plusieurs de ces options.
Sur l'instance principale qui affiche le message d'erreur, définissez les options de réplication parallèle comme suit :
|
La création d'une instance dupliquée échoue avec un délai d'expiration. | Les transactions non validées de longue durée sur l'instance principale peuvent entraîner l'échec de la création d'une instance dupliquée avec accès en lecture.
Recréez l'instance dupliquée après avoir arrêté toutes les requêtes en cours d'exécution. |
Étape suivante
- Apprenez à créer une instance dupliquée avec accès en lecture.
- Découvrez les procédures stockées Cloud SQL pour les index d'instances dupliquées avec accès en lecture.
- Apprenez à configurer une instance dupliquée externe.
- Apprenez à configurer une instance principale externe.
- Découvrez les prérequis et les bonnes pratiques qui s'appliquent à la réplication.