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 réplication
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 dupliqué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 psql).
- 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
replay_lag
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.
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
Pour en savoir plus, consultez les sections Collecteur de statistiques et Fonctions d'administration système du manuel de référence PostgreSQL. |
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 dupliqué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). Pour en savoir plus, consultez la section Délai avant réplication. |
Octets de latence ( cloudsql.googleapis.com ) |
Indique le nombre d'octets de retard de l'instance dupliquée avec accès en lecture par rapport à l'instance principale. Quatre séries temporelles sont générées pour chaque instance dupliquée. Elles indiquent dans le journal WAL (write-aheag log) de l'instance principale le nombre d'octets qui n'ont pas encore été…
Ces métriques ont différents objectifs. Par exemple, Ces métriques sont calculées en comparant |
Nombre maximal d'octets de latence ( cloudsql.googleapis.com ) |
Pour l'instance dupliquée d'une instance principale externe, indique le délai maximal de réplication (en octets) sur toutes les bases de données répliquées sur cette instance. Pour chaque base de données, cela correspond au nombre d'octets du journal WAL de l'instance principale qui n'ont pas été reçus par l'instance dupliquée. Cette métrique est calculée en envoyant une requête à l'instance principale afin de comparer |
Pour vérifier l'état de la réplication, procédez comme suit :
Console
Cloud SQL indique la métrique Replication State
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 le délai de réplication, en octets, d'une instance dupliquée avec accès en lecture : saisissez
Lag Bytes
dans le champ Sélectionner une métrique. Ajoutez ensuite un filtre surreplica_lag_type = "replay_location"
. Le graphique indique le nombre d'octets associés aux transactions validées sur l'instance principale, mais qui n'ont pas encore été relus sur l'instance dupliquée. - Pour surveiller le délai de réplication, en octets, d'une instance dupliquée d'une instance principale externe : saisissez
Max Lag Bytes
dans le champ Sélectionner une métrique. Le graphique indique le nombre d'octets associés aux transactions validées sur l'instance principale, mais qui n'ont pas encore été reçus par l'instance dupliquée.
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 psql
Certaines métriques d'état de la réplication sont générées par l'instance principale, d'autres par l'instance dupliquée. Avant de suivre les étapes suivantes, connectez-vous à l'instance dupliquée ou à l'instance principale (comme indiqué ci-dessous) à l'aide d'un client PostgreSQL.
Pour en savoir plus, consultez la page Options de connexion pour les applications externes.
- Pour vérifier l'état de l'instance dupliquée depuis l'instance principale, procédez comme suit :
Recherchez les métriques suivantes dans le résultat de la commande :select * from pg_stat_replication;
client_addr
: adresse IP de l'instance dupliquée.state
: indique si le thread SQL qui permet d'exécuter des événements dans le journal de relais est en cours d'exécution. La valeur eststreaming
au démarrage de la réplication.replay_lag
: nombre d'octets de retard du thread SQL de l'instance dupliquée par rapport à l'instance principale. Sa valeur estO
ou un petit nombre d'octets.
- Pour vérifier l'état de l'instance dupliquée directement sur l'instance dupliquée, procédez comme suit :
select * from pg_stat_wal_receiver;
Recherchez les métriques suivantes dans le résultat de la commande :
sender_host
: adresse IP de l'instance principale.status
: indique si le thread SQL qui permet d'exécuter des événements dans le journal de relais est en cours d'exécution. La valeur eststreaming
au démarrage de la réplication.last_msg_send_time
etlast_msg_receipt_time
: la différence entre ces deux horodatages correspond au délai de latence.
Pour vérifier si la réplication a été suspendue, procédez comme suit :
select pg_is_wal_replay_paused();
La valeur est
t
si la réplication est suspendue. Sinon, elle est définie surf
.Pour vérifier si des transactions ont été reçues de l'instance principale, mais n'ont pas encore été appliquées, procédez comme suit :
# for PostgreSQL 9.6 select pg_catalog.pg_last_xlog_receive_location(), pg_catalog.pg_last_xlog_replay_location(); # for PostgreSQL 10 and above select pg_catalog.pg_last_wal_receive_lsn(), pg_catalog.pg_last_wal_replay_lsn();
Si les deux valeurs sont identiques, cela signifie que l'instance dupliquée a traité toutes les transactions qu'elle a reçues de l'instance principale.
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'espace disque augmente considérablement. | Un emplacement qui n'est pas activement utilisé pour suivre les données oblige PostgreSQL à conserver les segments WAL indéfiniment, ce qui entraîne une augmentation permanente de l'espace disque. Si vous utilisez les fonctionnalités de réplication logique et de décodage logique de Cloud SQL, les emplacements de réplication sont créés et supprimés automatiquement. Vous pouvez détecter les emplacements de réplication inutilisés en interrogeant la vue système pg_replication_slots et en filtrant suivant la colonne active . La suppression des emplacements inutilisés, en vue d'éliminer des segments WAL, s'effectue à l'aide de la commande pg_drop_replication_slot .
|
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 :
|
Erreurs lors de la reconstruction d'index dans PostgreSQL 9.6. | Une erreur de PostgreSQL vous indique que vous devez reconstruire un index particulier. Cette opération n'est possible que sur l'instance principale. Si vous créez une nouvelle instance dupliquée, vous obtiendrez rapidement la même erreur.
Les index de hachage ne sont pas propagés aux instances dupliquées dans les versions de PostgreSQL antérieures à la version 10.
Si vous devez absolument utiliser des index de hachage, effectuez une mise à niveau vers PostgreSQL 10 ou une version ultérieure. Sinon, si vous souhaitez également utiliser des instances dupliquées, n'utilisez pas d'index de hachage dans PostgreSQL 9.6. |
La requête sur l'instance principale est toujours en cours d'exécution. | Après avoir créé une instance répliquée, la requête SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' doit s'exécuter en continu sur votre instance principale.
|
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. |
Si l'instance principale et l'instance dupliquée disposent de tailles de processeurs virtuels différentes, des problèmes de performances des requêtes peuvent survenir, car l'optimiseur de requêtes prend en compte les tailles de processeurs virtuels. |
Pour résoudre ce problème, procédez comme suit :
S'il s'agit d'une requête spécifique, modifiez-la. Par exemple, vous pouvez modifier l'ordre des jointures pour voir si vous obtenez de meilleures performances. |
Étapes suivantes
- Apprenez à créer une instance dupliquée avec accès en lecture.
- Découvrez les prérequis et les bonnes pratiques qui s'appliquent à la réplication.