Aller au contenu principal

Gérer et monitorer la réplication logique

Cette page décrit comment surveiller la réplication logique dans Lakebase, comment la réplication interagit avec le monter en charge à zéro et les branches, et comment résoudre les problèmes courants. Pour la configuration, voir Répliquer des données vers Lakebase et Répliquer des données depuis Lakebase.

Surveiller la réplication​

Tout rôle Postgres peut query les catalogues de réplication sur cette page, avec deux exceptions. La colonne subconninfo de pg_subscription peut contenir le mot de passe de connexion et est restreinte ; veuillez donc sélectionner des colonnes spécifiques au lieu d'utiliser SELECT *. Dans pg_stat_replication, la plupart des colonnes sont masquées à moins que votre rôle ne dispose de pg_read_all_stats, ce que possèdent les membres de databricks_superuser.

Sur un abonné, vérifiez que l'abonnement existe et qu'il est activé :

SQL
SELECT subname, subenabled FROM pg_catalog.pg_subscription;

Sur un éditeur, confirmez que la publication existe :

SQL
SELECT pubname FROM pg_catalog.pg_publication;

Vérifiez le statut de synchronisation par table sur le destinataire. Lorsque chaque table lit Ready (fully live), la copie initiale est terminée et l'abonnement est en streaming :

SQL
SELECT
srrelid::regclass AS table_name,
CASE srsubstate
WHEN 'i' THEN 'Initializing'
WHEN 'd' THEN 'Data copying (in progress)'
WHEN 's' THEN 'Synchronized (catching up)'
WHEN 'r' THEN 'Ready (fully live)'
END AS sync_status
FROM pg_catalog.pg_subscription_rel;

Vérifier l'état de l'abonnement et la latence :

SQL
SELECT subname, received_lsn, latest_end_lsn, last_msg_receipt_time
FROM pg_catalog.pg_stat_subscription;

Comparez le nombre de lignes sur l'éditeur et l'abonné pour confirmer qu'une table est synchronisée :

SQL
SELECT COUNT(*) FROM public.playing_with_lakebase;

Sur un éditeur, répertoriez les emplacements de réplication et leur degré d'avancement :

SQL
SELECT slot_name, slot_type, active, restart_lsn
FROM pg_catalog.pg_replication_slots;

Sur Lakebase, les résultats incluent également les emplacements physiques internes wal_proposer_slot et wal_retention_slot. Lakebase gère ces emplacements, et ils ne font pas partie de la réplication logique.

Réplication logique et Monter en charge jusqu'à zéro​

Un compute Lakebase avec un abonné actif ne Monter en charge pas à zéro, ce qui peut augmenter l'utilisation du compute.

Vérifiez les abonnés actifs :

SQL
SELECT *
FROM pg_catalog.pg_stat_replication
WHERE application_name <> 'walproposer';

Emplacements de réplication et stockage​

Un emplacement de réplication permet à l’éditeur de conserver le journal WAL (write-ahead log) jusqu’à ce que l’abonné confirme qu’il a reçu les modifications. Si l’abonné cesse de consommer les modifications, par exemple parce qu’il est désactivé, déconnecté, en échec ou en retard, les WAL s’accumulent sur l’éditeur. Il s’agit de la cause la plus fréquente de problèmes graves avec la réplication logique :

  • L'éditeur peut manquer de stockage. Le WAL conservé augmente jusqu’à ce que le stockage de l’éditeur soit plein, ce qui peut empêcher la base de données d’accepter des écritures et provoquer une interruption de service.
  • La suppression de l’emplacement ne libère pas immédiatement le stockage. Postgres ne supprime le WAL conservé que lorsqu’il recycle les segments WAL à un point de contrôle ultérieur. Si l’éditeur manque déjà d’espace de stockage, ce recyclage peut ne pas être terminé.
  • Le risque s'applique également aux éditeurs externes. Lorsque Lakebase s'abonne à une base de données externe, le WAL s'accumule sur cette source externe si l'abonnement cesse de consommer les modifications.

Surveiller le WAL conservé​

Sur l’éditeur, vérifiez la quantité de WAL conservée par chaque emplacement logique et s’il est actif :

SQL
SELECT slot_name, active, wal_status,
pg_catalog.pg_size_pretty(pg_catalog.pg_wal_lsn_diff(pg_catalog.pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_catalog.pg_replication_slots
WHERE slot_type = 'logical';

Exécutez cette query régulièrement pendant que la réplication est active. Enquêtez lorsque retained_wal continue de croître ou que active est false. Une valeur wal_status sur extended signifie que l'emplacement conserve plus de WAL que l'éditeur n'en conserve normalement. Une valeur wal_status sur unreserved ou lost signifie que l'emplacement a dépassé max_slot_wal_keep_size et qu'il perd ou a perdu des WAL dont il a besoin. L'abonnement doit donc être recréé.

Récupérer après une accumulation de WAL​

  1. Trouvez l'emplacement qui conserve le WAL avec la query dans Surveiller le WAL conservé.

  2. Si l’abonné peut se rétablir, corrigez la cause, par exemple un problème réseau, un abonnement désactivé ou un processus d’application défaillant, afin que l’abonné rattrape son retard et que l’emplacement avance.

  3. Si vous n'avez plus besoin de l'abonnement, supprimez-le sur l'abonné. Si l'abonné est inaccessible, supprimez l'emplacement directement sur l'éditeur. Un emplacement doit être inactif avant de pouvoir être supprimé :

    SQL
    SELECT pg_catalog.pg_drop_replication_slot('<slot_name>');
  4. Attendez que l'éditeur recycle le WAL conservé. Sur un éditeur auto-géré qui est sur le point de manquer de stockage, ajoutez d'abord du stockage afin que le recyclage puisse se terminer.

Suppression automatique des emplacements inactifs sur Lakebase​

Lorsque Lakebase est le diffuseur, il supprime automatiquement tout emplacement de réplication inactif depuis environ 40 heures afin d’éviter que l’emplacement ne conserve indéfiniment les WAL. Un emplacement devient inactif lorsque son abonné cesse de consommer les modifications et que l’emplacement cesse d’avancer. Cela peut se produire lorsqu’un abonné est désactivé ou devient indisponible, ou lorsqu’un abonné est configuré avec un délai de réplication important.

Pour éviter que les emplacements ne soient supprimés, assurez-vous que leur abonné reste connecté et continue de consommer les modifications. Si l'abonné utilise un délai ou une fréquence de réplication configurable, gardez-les en dessous de 40 heures afin que l'emplacement continue d'avancer. Si un emplacement est supprimé et que vous en avez toujours besoin, recréez l'abonnement sur l'abonné.

Les éditeurs externes ne suppriment pas automatiquement les emplacements inactifs. Sur un éditeur autogéré, définissez max_slot_wal_keep_size pour limiter le WAL qu’un emplacement peut conserver. Si un emplacement dépasse la limite, Postgres l’invalide et vous devez recréer l’abonnement.

La restauration de Branch supprime les emplacements de réplication​

La restauration d'une Branch supprime tous les emplacements de réplication sur cette Branch. Recréez les publications et les abonnements après une restauration de Branch.

Les Branch enfants n'héritent pas des abonnements​

Les abonnements définis sur une Branch parente ne sont pas dupliqués sur ses Branch enfants. Lakebase les supprime d'une Branch enfant avant que le compute de cette Branch ne start, afin que deux computes ne répliquent pas le même abonnement. Ceci s'applique lorsque vous créez, Reset ou restaurez une Branch enfant. Recréez l'abonnement sur la Branch enfant si vous avez besoin de le répliquer.

La suppression d'une base de données supprime ses abonnements​

Avant de supprimer une base de données en réponse à une commande ou une opération DROP DATABASE, Lakebase supprime tous les abonnements de réplication logique définis dans cette base de données.

Rôles de réplication​

Un rôle de réplication dédié doit disposer de l’attribut REPLICATION. Les rôles créés dans l’application Lakebase, la CLI Databricks ou l’API REST disposent de cet attribut, qu’ils soient membres de databricks_superuser ou non. Les rôles créés avec SQL ne reçoivent pas automatiquement l’attribut REPLICATION. Pour en créer un avec SQL, incluez l’attribut, par exemple CREATE ROLE replication_user WITH LOGIN REPLICATION PASSWORD '<password>';. Pour l’ajouter à un rôle existant, exécutez ALTER ROLE <role_name> REPLICATION;. Les deux instructions nécessitent un rôle disposant des attributs CREATEROLE et REPLICATION, tel que le rôle du propriétaire du projet.

Vérifier les privilèges d'un rôle :

SQL
SELECT rolname, rolreplication
FROM pg_catalog.pg_roles
WHERE rolname = '<role_name>';

Plug-ins de décodeur​

Lakebase prend en charge deux plugins de sortie de décodage logique :

  • pgoutput: le plugin de réplication logique Postgres intégré, et le default. Utilisez-le pour la réplication standard de Postgres vers Postgres.
  • wal2json: envoie les modifications WAL sous forme de JSON, pour les systèmes qui consomment les données de modification au format JSON.

Paramètres de publication​

Sur Lakebase, max_wal_senders et max_replication_slots sont tous deux définis sur 10:

Text
max_wal_senders = 10
max_replication_slots = 10

max_wal_senders limite le nombre de processus d'envoi WAL simultanés qui Stream des modifications aux abonnés, et max_replication_slots limite le nombre d'emplacements de réplication qui suivent la progression de l'abonné. Prévoyez un élément de chaque par abonné. Pour demander des valeurs différentes, contactez Databricks.

Créer un emplacement de réplication dédié​

Certains Data Services nécessitent un emplacement de réplication que vous créez à l'avance. Créez-en un avec la fonction Postgres standard, en nommant le plug-in de décodeur :

SQL
SELECT pg_catalog.pg_create_logical_replication_slot('my_replication_slot', 'pgoutput');

Supprimer un abonnement ou une publication​

Supprimez un abonnement sur l'abonné lorsque vous n'en avez plus besoin. Lorsque l'éditeur est accessible, la suppression de l'abonnement coupe la connexion avec l'éditeur et supprime l'emplacement de réplication sur l'éditeur. Les données répliquées restent dans la base de données de l'abonné.

SQL
DROP SUBSCRIPTION my_subscription;

Si l’éditeur est injoignable, DROP SUBSCRIPTION ne se termine pas, car il ne peut pas se connecter pour supprimer l’emplacement distant. Dissociez d'abord l'emplacement, puis supprimez l'abonnement :

SQL
ALTER SUBSCRIPTION my_subscription DISABLE;
ALTER SUBSCRIPTION my_subscription SET (slot_name = NONE);
DROP SUBSCRIPTION my_subscription;

Dans ce cas, l'emplacement de réplication reste sur l'éditeur et continue à conserver les fichiers WAL. Supprimez-le sur l'éditeur pour libérer le WAL :

SQL
SELECT pg_catalog.pg_drop_replication_slot('<slot_name>');

Supprimez une publication sur l'éditeur :

SQL
DROP PUBLICATION my_publication;

Dépannage​

Symptôme

Cause et résolution

L’abonnement ne se connecte pas.

Confirmez que l'éditeur est joignable et que la chaîne de connexion, le rôle et le mot de passe sont corrects. Lorsque Lakebase est l'abonné, confirmez que l'endpoint de l'éditeur est dans la liste d'autorisation de la politique réseau du compte. Voir Répliquer des données dans Lakebase.

CREATE SUBSCRIPTION échoue avec restricted by Account Network Policies.

Votre compte applique une politique de réseau et l’hôte de l’éditeur ne figure pas dans les destinations internet autorisées. Ajoutez l’hôte à la politique de réseau du compte. Consultez Répliquer des données dans Lakebase.

Le stockage augmente et n’est pas libéré.

Un emplacement de réplication conserve le WAL parce que son abonné ne consomme pas les modifications. Si le problème n'est pas résolu, l'éditeur risque de manquer de stockage. Vérifiez le WAL conservé, puis reconnectez l'abonné ou supprimez l'emplacement. Le stockage n'est libéré qu'après que l'éditeur a recyclé le WAL. Voir Emplacements de réplication et stockage.

Les lignes n’arrivent pas sur l’abonné.

Confirmez que les tables cibles existent avec des noms et des colonnes correspondants, et que la publication inclut les tables que vous attendez.

Symptôme

Cause et résolution

L’abonnement ne se connecte pas.

Confirmez que l'éditeur est joignable et que la chaîne de connexion, le rôle et le mot de passe sont corrects. Lorsque Lakebase est l'abonné, confirmez que l'endpoint de l'éditeur est dans la liste d'autorisation de la politique réseau du compte. Voir Répliquer des données dans Lakebase.

CREATE SUBSCRIPTION échoue avec restricted by Account Network Policies.

Votre compte applique une politique de réseau et l’hôte de l’éditeur ne figure pas dans les destinations internet autorisées. Ajoutez l’hôte à la politique de réseau du compte. Consultez Répliquer des données dans Lakebase.

Le stockage augmente et n’est pas libéré.

Un emplacement de réplication conserve le WAL parce que son abonné ne consomme pas les modifications. Si le problème n'est pas résolu, l'éditeur risque de manquer de stockage. Vérifiez le WAL conservé, puis reconnectez l'abonné ou supprimez l'emplacement. Le stockage n'est libéré qu'après que l'éditeur a recyclé le WAL. Voir Emplacements de réplication et stockage.

Les lignes n’arrivent pas sur l’abonné.

Confirmez que les tables cibles existent avec des noms et des colonnes correspondants, et que la publication inclut les tables que vous attendez.

Étapes suivantes​