Wie vergleicht sich die native PostgreSQL-Replikation mit MySQL?
Ich weiß, dass die asynchrone Replikation länger als die Synchronisierung unterstützt wurde, was neu ist. Ist synchron zuverlässig, um in realen Projekten verwendet zu werden?
Wie vergleicht sich die native PostgreSQL-Replikation mit MySQL?
Ich weiß, dass die asynchrone Replikation länger als die Synchronisierung unterstützt wurde, was neu ist. Ist synchron zuverlässig, um in realen Projekten verwendet zu werden?
Antworten:
Ja, es ist produktionsreif und weit verbreitet. Heroku-Follower basieren beispielsweise auf der in PostgreSQL integrierten asynchronen Replikation, ebenso wie AWS RDS-Standbys und Lesereplikate. Die Streaming-Replikation wird in PostgreSQL fast überall verwendet.
Die Einrichtung der Replikation ist nicht gerade reizvoll, aber Tools wie repmgr helfen etwas dabei, und sie verbessert sich langsam mit jeder Hauptversion. Die Möglichkeit für pg_basebackup, eine Kopie des Systems mithilfe der Streaming-Replikation (und dies von einem anderen Standby-System aus) zu erstellen, ist eine große Hilfe.
Im Allgemeinen wird eine Funktion in PostgreSQL erst dann veröffentlicht, wenn sie produktionsbereit ist. Wie bei jeder Software treten Fehler auf, die jedoch in der Regel kurz nach ihrer Identifizierung behoben werden. Wirklich wichtige neue Funktionen weisen manchmal Fehler und Probleme auf, die nach der Veröffentlichung von .0 entdeckt wurden. In diesem Fall hat die Behebung jedoch hohe Priorität. Wanzen bleiben nicht nur herum.
Ich kenne keine ernsthaften Probleme mit der Streaming-Replikation - Synchronisierung oder Asynchronisierung - und habe seit einiger Zeit keine Probleme mehr gemeldet. Sie waren in den .0-Versionen der Hauptversionen, in denen sie eingeführt wurden, weniger stabil als der übliche Pg-Standard, aber beide reiften schnell und sind gründlich produktionsbereit.
(Update: In der neuen Version 9.3 vor 9.3.4 gab es einen bestimmten Fehler, der in einigen Fällen zu Replikationsproblemen führte. Benutzer von 9.3 sollten sofort ein Update auf 9.3.4 durchführen. Ältere Versionen sind nicht betroffen.)
Die einzige Einschränkung, die ich erwähnen möchte, ist ein kleines Detail bei der synchronen Replikation: Wenn Sie einen Commit für den Master durchführen, brechen Sie die Abfrage nach dem Commit ab, während auf die Bestätigung des Replikats gewartet wird. Sie wird bereits vor der Replikation als Commit für den Master behandelt. Sie erzielen den gleichen Effekt, indem Sie den Master neu starten, während Sie auf die Antwort des Replikats warten. In der Praxis ist das irrelevant, aber es ist das einzige Problem, an das ich denken kann.
Die native Replikation von Pg unterscheidet sich erheblich von der von MySQL.
MySQL verwendet die logische Replikation, bei der die an Tabellendaten, Tabellenstrukturen usw. vorgenommenen logischen Änderungen gesendet werden, und das Replikat wendet diese Änderungen an.
Die Replikation von PostgreSQL ist niedriger (ab Version 9.5; zukünftige Versionen können auch eine logische Replikation hinzufügen). Es sendet die in den Tabellen geänderten Blöcke. Es ist einfacher, einfacher zu korrigieren und belastet den Replikatserver weniger, beansprucht jedoch mehr Netzwerkbandbreite und erfordert mehr Speicherplatz auf dem Master, um noch nicht replizierte Änderungen zu speichern. Es ist am besten für die Verwendung der Streaming-Replikation mit WAL-Archivierungs-Fallback konfiguriert, was die Konfiguration komplexer macht als die von MySQL. Es repliziert Änderungen auf niedriger Ebene wie die VACUUM-Aktivität, nicht nur Tupeländerungen, und behält dabei den Status des Replikats auf der Festplatte bei, der dem des Masters entspricht. Es ist nicht möglich, nur eine Datenbank zu replizieren. Das gesamte System muss repliziert werden. Dies kann frustrierend sein, wenn Sie eine große Datenbank mit hoher Abwanderung und unwichtiger Bedeutung sowie eine kleine Datenbank mit niedriger Abwanderung und lebenswichtiger Bedeutung haben.
Alles in allem kommt es darauf an, was Sie damit machen wollen.
Ich betrachte die Replikation von PostgreSQL als erheblich besser für Replikate, die für Backup, Hochverfügbarkeit und Disaster Recovery verwendet werden. Dies gilt insbesondere in Kombination mit der Zeitpunktwiederherstellung (PITR) .
Auf der anderen Seite ist es nicht so gut für schreibgeschützte Berichtsreplikate, da Sie die Anwendung replizierter Daten verzögern müssen, während lange Transaktionen ausgeführt werden. Dies bedeutet, dass Sie entweder sehr lange laufende Abfragen stornieren oder dem Master stark hinterherhinken müssen mehr Festplattenspeicher auf dem Master und erzwingen, dass er härter arbeitet, um Schritt zu halten.
Es wird derzeit daran gearbeitet, die logische Replikation in PostgreSQL zu aktivieren. Dabei werden die logischen Änderungen an Tabellenstruktur, Tabelleninhalt usw. repliziert und nicht der Status auf der Festplatte. Das Katalogdesign und die Unterstützung für benutzerdefinierte Elemente machen Pg zu einer recht komplexen Aufgabe. Ein Teil der Grundlagen wurde für 9.4 erstellt, aber es ist unwahrscheinlich, dass eine vollständige logische Replikation vor 9.6 oder höher verwendet werden kann.