Comment les sommes de contrôle des données interagissent-elles avec la réplication en streaming?

11

Les sommes de contrôle des données sont une nouvelle fonctionnalité introduite dans 9.3, et:

il y a un nouveau paramètre GUC "ignore_checksum_failure" qui forcera PostgreSQL à continuer de traiter une transaction même si une corruption est détectée

En cas d'échec de la somme de contrôle sur un maître de réplication, les données corrompues seront-elles répliquées sur les esclaves ou la réplication s'arrêtera-t-elle? Cela dépend-il du réglage de ignore_checksum_failure?

Ce README contient des informations utiles mais ne répond pas directement à la question.

Jack dit d'essayer topanswers.xyz
la source
6
Très bonne question. Cela dépend en partie de la question de savoir si les sommes de contrôle des données affectent également le WAL (ce qui n'est pas le cas de l'IIRC, à l'exception des images pleine page dans le WAL). Je n'ai pas eu le temps de creuser dans les sommes de contrôle des données car j'ai aidé avec d'autres fonctionnalités. Demander à pgsql-general peut être une bonne idée. Si le temps et le nouveau bébé le permettent, je vais jeter un œil aux sources, mais je ne retiens pas mon souffle.
Craig Ringer
3
@Craig félicitations!
Jack dit d'essayer topanswers.xyz
4
Les choses que vous apprenez sur StackExchange ... "aider avec d'autres fonctionnalités" est un euphémisme pour "changer les couches".
Colin 't Hart

Réponses:

1

Si les données ont été corrompues sur le disque, la corruption ne doit pas être répliquée sauf si elle était déjà présente dans la sauvegarde à partir de laquelle la réplique a été créée.

Bien sûr, si vous ignorez les échecs de somme de contrôle, le maître peut commencer à se tromper et cette erreur sera reproduite.

Si la corruption se produit dans la mémoire, tous les paris sont désactivés.

jjanes
la source
2
est assez proche de la marque ici. La documentation sur le ignore_checksum_failureparamètre inclut l'avertissement que "ce comportement peut ... propager ... la corruption". Sans mentionner explicitement la réplication (streaming), il semblerait que cela soit implicite ici. Normalement, une erreur de somme de contrôle entraînerait l'abandon de la transaction, donc aucune donnée ne serait répliquée. Ignorer cette erreur vous permettrait de valider la transaction et d'écrire des données (potentiellement) corrompues, qui seraient également répliquées.
Colin 't Hart