Configuration de la réplication différée avec RDS pour PostgreSQL - Amazon Relational Database Service

Configuration de la réplication différée avec RDS pour PostgreSQL

Présentation et avantages

La fonctionnalité de réplication différée de RDS pour PostgreSQL vous permet de retarder intentionnellement la réplication des modifications de données de votre base de données principale vers un ou plusieurs serveurs de secours (réplica en lecture). Cela fournit une protection précieuse contre la corruption des données, les pertes de données accidentelles ou les transactions erronées, qui pourraient autrement être immédiatement propagées à tous les réplicas.

La réplication différée est prise en charge sur les versions suivantes de RDS pour PostgreSQL :

  • 14.19 et versions 14 ultérieures

  • 15.14 et versions 15 ultérieures

  • 16.10 et versions 16 ultérieures

  • 17.6 et versions 17 ultérieures

En introduisant un décalage dans le processus de réplication, vous disposez d’une opportunité pour détecter les incidents liés aux données et les traiter avant qu’ils n’affectent l’ensemble de votre cluster de bases de données. Les avantages de la réplication différée sont les suivants :

  • Elle vous permet de récupérer après des suppressions accidentelles, des mises à jour ou d’autres erreurs logiques.

  • Elle fournit une mémoire tampon contre la propagation de données corrompues dans votre cluster de bases de données.

  • Elle offre une option de point de restauration supplémentaire pour compléter vos stratégies de sauvegarde traditionnelles.

  • Elle vous permet de configurer le délai en fonction des besoins spécifiques de votre organisation et de sa tolérance au risque.

Activation et configuration de la réplication différée

Pour activer la réplication différée sur un réplica en lecture RDS pour PostgreSQL, suivez ces étapes :

Note

Pour les réplicas en lecture en cascade, utilisez le même paramètre recovery_min_apply_delay et les mêmes étapes que ceux décrits ci-dessous.

Pour activer la réplication différée
  1. Créez un nouveau groupe de paramètres personnalisés ou modifiez-en un existant. Pour plus d’informations, consultez Groupes de paramètres de base de données pour les instances de base de données Amazon RDS.

  2. Configurez le paramètre recovery_min_apply_delay dans le groupe de paramètres :

    • Définissez la valeur sur le délai souhaité en millisecondes. Par exemple, 3600000 pour un délai d’une heure.

    • Plage autorisée : 0 à 86400000 ms (0 à 24 heures)

    • Par défaut : 0

  3. Appliquez le groupe de paramètres à l’instance de réplica en lecture que vous souhaitez configurer pour une réplication différée.

  4. Pour que les modifications deviennent effectives, redémarrez l’instance de réplica en lecture.

    Note

    Le paramètre recovery_min_apply_delay est dynamique. Si vous modifiez un groupe de paramètres existant déjà attaché à l’instance, les modifications prennent effet immédiatement sans nécessiter de redémarrage. Toutefois, lorsque vous appliquez un nouveau groupe de paramètres à l’instance, vous devez redémarrer l’instance pour que les modifications prennent effet.

Gestion de la récupération par réplication différée

La réplication différée est particulièrement utile dans les scénarios où les méthodes traditionnelles de reprise ponctuelle peuvent s’avérer insuffisantes ou prendre trop de temps.

Pendant la période de réplication différée, vous pouvez utiliser les fonctions PostgreSQL suivantes pour gérer le processus de récupération :

  • pg_wal_replay_pause() : demandez la suspension du processus de récupération du réplica différé.

  • pg_wal_replay_resume() : redémarrez le processus de récupération s’il a été suspendu.

  • pg_is_wal_replay_paused() : vérifiez si le processus de récupération est actuellement suspendu.

  • pg_get_wal_replay_pause_state() : obtenez l’état actuel du processus de récupération (non suspendu, pause demandée ou suspendu).

Les utilisateurs dotés du rôle rds_superuser disposent des privilèges EXECUTE sur pg_wal_replay_pause() et pg_wal_replay_resume(). Si d’autres utilisateurs de base de données ont besoin d’accéder à ces fonctions, vous devez leur accorder le rôle rds_superuser. Pour plus d'informations sur le rôle rds_superuser, consultez Comprendre le rôle rds_superuser.

L’accès à d’autres fonctions, telles que pg_is_wal_replay_paused() et pg_get_wal_replay_pause_state(), ne requiert pas le rôle rds_superuser.

Vous pouvez utiliser les paramètres de cible de récupération suivants pour contrôler avec précision le moment auquel la réplique différée est récupérée. Ces paramètres sont statiques et nécessitent un redémarrage de la base de données pour que les modifications soient appliquées :

  • recovery_target

  • recovery_target_lsn

  • recovery_target_name

  • recovery_target_time

  • recovery_target_xid

  • recovery_target_inclusive

Important

Vous pouvez spécifier uniquement un paramètre de cible de récupération à la fois. La configuration de plusieurs paramètres de cible de récupération dans le fichier de configuration entraîne une erreur.

Considérations relatives à planification

Procédez comme suit lorsque vous planifiez la réplication différée avec RDS pour PostgreSQL :

  • Lors de la rotation automatique des informations d’identification rdsrepladmin (qui a lieu tous les 90 jours), les replicas en lecture différée peuvent entrer temporairement dans un état REPLICATION_ERROR. Si le réplica différé possède suffisamment de journaux WAL pour maintenir le délai configuré, il peut interrompre le processus du récepteur WAL, provoquant une accumulation de WAL sur la source. Vous devez surveiller l’état de réplication sur le réplica et la consommation de stockage sur la source pour éviter d’utiliser tout l’espace de stockage.

  • Lorsque les réplicas à lecture différée rencontrent des événements système (tels que le redémarrage), ils entrent dans un état REPLICATION_ERROR dans lequel le processus du récepteur WAL reste inactif jusqu’à l’expiration du délai configuré. Ce comportement peut entraîner une accumulation de WAL sur l’instance source, ce qui peut entraîner un épuisement du stockage. Envisagez d’appliquer les mesures préventives suivantes :

    • Configurez les alarmes CloudWatch pour surveiller l’utilisation du stockage sur les instances source.

    • Activez l’autoscaling du stockage pour faire face à la croissance inattendue de WAL.

    • Définissez le paramètre max_slot_wal_keep_size sur l’instance source pour limiter la rétention WAL par slot de réplication.

    • Surveillez régulièrement le délai de réplication et l’état du slot.

  • L’allongement des délais augmente le nombre de journaux WAL sur les réplicas, ce qui consomme plus d’espace de stockage. Surveillez l’espace de stockage à l’aide des alarmes CloudWatch, activez l’autoscaling ou retrouvez les réplicas en cas de besoin.

  • Lors de la promotion d’un réplica à lecture différée, le paramètre recovery_min_apply_delay n’est pas respecté et tous les enregistrements WAL en attente sont immédiatement appliqués.

  • Le paramètre recovery_min_apply_delay est indépendant de chaque niveau d’une configuration de réplication en cascade. La définition d’un délai pour un réplica n’augmente pas le délai des réplicas en cascade.

Pour plus d’informations, consultez la documentation Réplicas en lecture RDS pour PostgreSQL et la documentation Reprise après sinistre RDS pour PostgreSQL.

Présentation des limitations

La fonctionnalité de réplication différée pour Amazon RDS pour PostgreSQL présente les limitations suivantes :

  • Les déploiements bleu/vert présentent les limitations suivantes lors de la configuration de la réplication différée :

    • Instance source verte : recovery_min_apply_delay parameter n’est pas pris en compte, même s’il est configuré dans le groupe de paramètres. Aucun paramètre de délai sur l’instance source verte ne prend effet.

    • Instance de réplica verte : recovery_min_apply_delay parameter est entièrement pris en charge et appliqué au fichier de configuration PostgreSQL. Les paramètres de délai fonctionnent comme prévu pendant le flux de travail de bascule.

    • Déploiements bleu/vert RDS pour les mises à niveau des versions majeures

  • Lors des mises à niveau des versions majeures, tous les réplicas en lecture différée seront automatiquement interrompus pour permettre à l’instance source de poursuivre le processus de mise à niveau, afin de garantir une durée d’indisponibilité minimale. Une fois que l’instance source a terminé la mise à niveau, vous devez recréer manuellement les réplicas différés.

  • La réplication différée n’est pas compatible avec les fonctionnalités suivantes.

    • Réplication logique RDS pour PostgreSQL

    • Clusters multi-AZ RDS pour PostgreSQL (y compris la réplication entrante et sortante)

    • Aurora PostgreSQL