{"id":53224,"date":"2022-08-11T13:36:56","date_gmt":"2022-08-11T12:36:56","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=53224&#038;preview=true&#038;preview_id=53224"},"modified":"2023-07-27T11:44:36","modified_gmt":"2023-07-27T10:44:36","slug":"postgresql-replikation","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/","title":{"rendered":"PostgreSQL Replikation: Ein umfassendes Handbuch"},"content":{"rendered":"<p>Jeder Website-Besitzer wird dir sagen, dass Datenverluste und Ausfallzeiten, selbst in minimalen Dosen, katastrophale Folgen haben k\u00f6nnen. Sie k\u00f6nnen den Unvorbereiteten jederzeit treffen und die Produktivit\u00e4t, Erreichbarkeit und das Vertrauen in das Produkt beeintr\u00e4chtigen.<\/p>\n<p>Um die Integrit\u00e4t deiner Website zu sch\u00fctzen, ist es wichtig, Vorkehrungen gegen m\u00f6gliche Ausfallzeiten oder Datenverluste zu treffen.<\/p>\n<p>Hier kommt die Datenreplikation ins Spiel.<\/p>\n\n<p>Die Datenreplikation ist ein automatischer Sicherungsprozess, bei dem deine Daten wiederholt von der Hauptdatenbank an einen anderen, entfernten Ort kopiert und dort gesichert werden. Sie ist eine wichtige Technologie f\u00fcr jede Website oder Anwendung mit einem <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-datenbank\/\">Datenbankserver<\/a>. Du kannst die replizierte Datenbank auch nutzen, um schreibgesch\u00fctztes SQL zu verarbeiten, sodass mehr Prozesse im System ausgef\u00fchrt werden k\u00f6nnen.<\/p>\n<p>Die Replikation zwischen zwei Datenbanken bietet Fehlertoleranz gegen unerwartete Pannen. Sie gilt als die beste Strategie, um im Katastrophenfall eine hohe Verf\u00fcgbarkeit zu erreichen.<\/p>\n<p>In diesem Artikel befassen wir uns mit den verschiedenen Strategien, die <a href=\"https:\/\/kinsta.com\/de\/blog\/backend-entwickler\/\">Backend-Entwickler\/innen<\/a> f\u00fcr eine nahtlose PostgreSQL-Replikation einsetzen k\u00f6nnen.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Was ist PostgreSQL Replikation?<\/h2>\n<figure id=\"attachment_128034\" aria-describedby=\"caption-attachment-128034\" style=\"width: 945px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-128034 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/07\/PostgreSQL-Replication-Illustration.png\" alt=\"Eine Illustration der PostgreSQL-Replikation, die den Datenfluss vom Prim\u00e4rserver zum Replikat zeigt\" width=\"945\" height=\"310\"><figcaption id=\"caption-attachment-128034\" class=\"wp-caption-text\">Abbildung der PostgreSQL-Replikation (Bildquelle: <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<p>Unter PostgreSQL-Replikation versteht man den Prozess des Kopierens von Daten von einem <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-postgresql\/\">PostgreSQL-Datenbankserver<\/a> auf einen anderen Server. Der Quelldatenbankserver wird auch als &#8222;prim\u00e4rer&#8220; Server bezeichnet, w\u00e4hrend der Datenbankserver, der die kopierten Daten erh\u00e4lt, als &#8222;Replikatserver&#8220; bezeichnet wird.<\/p>\n<p>Die PostgreSQL-Datenbank folgt einem einfachen Replikationsmodell, bei dem alle Schreibvorg\u00e4nge an einen prim\u00e4ren Knoten gehen. Der prim\u00e4re Knoten kann dann die \u00c4nderungen \u00fcbernehmen und sie an die sekund\u00e4ren Knoten weiterleiten.<\/p>\n<h3>Was ist automatisches Failover?<\/h3>\n<p>Failover ist eine Methode zur <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial\">Wiederherstellung von Daten, wenn der Hauptserver aus irgendeinem Grund ausf\u00e4llt<\/a>. Solange du PostreSQL so konfiguriert hast, dass es deine physische Streaming-Replikation verwaltet, sind du &#8211; und deine Nutzer &#8211; vor Ausf\u00e4llen aufgrund eines Ausfalls des Prim\u00e4rservers gesch\u00fctzt.<\/p>\n<p>Beachte, dass es einige Zeit dauern kann, den Failover-Prozess einzurichten und zu starten. Es gibt keine eingebauten Tools, um Serverausf\u00e4lle in PostgreSQL zu \u00fcberwachen und zu erfassen, du musst also kreativ werden.<\/p>\n<p>Zum Gl\u00fcck bist du beim Failover nicht auf PostgreSQL angewiesen. Es gibt spezielle Tools, die ein automatisches Failover und ein automatisches Umschalten auf den Standby-Server erm\u00f6glichen und so die <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-datenbankproblemen-repariert\/\">Ausfallzeiten der Datenbank<\/a> reduzieren.<\/p>\n<p>Wenn du eine Failover-Replikation einrichtest, garantierst du praktisch Hochverf\u00fcgbarkeit, indem du sicherstellst, dass der Standby-Server verf\u00fcgbar ist, falls der prim\u00e4re Server einmal ausf\u00e4llt.<\/p>\n<h2>Vorteile der PostgreSQL-Replikation<\/h2>\n<p>Hier sind einige der wichtigsten Vorteile der PostgreSQL-Replikation:<\/p>\n<ul>\n<li><strong>Datenmigration:<\/strong> Du kannst die PostgreSQL-Replikation f\u00fcr die Datenmigration nutzen, entweder durch einen Wechsel der Datenbankserver-Hardware oder durch eine Systembereitstellung.<\/li>\n<li><strong>Fehlertoleranz:<\/strong> Wenn der Prim\u00e4rserver ausf\u00e4llt, kann der Standby-Server als Server fungieren, da die enthaltenen Daten f\u00fcr Prim\u00e4r- und Standby-Server identisch sind.<\/li>\n<li><strong>Leistung der Online-Transaktionsverarbeitung (OLTP):<\/strong> Du kannst die Transaktionsverarbeitungszeit und die Abfragezeit eines OLTP-Systems verbessern, indem du die Last der Berichtsabfragen entfernst. Die Transaktionsverarbeitungszeit ist die Dauer, die eine bestimmte Abfrage ben\u00f6tigt, bis eine Transaktion abgeschlossen ist.<\/li>\n<li><strong>Parallele Systemtests:<\/strong> Wenn du ein neues System aktualisierst, musst du sicherstellen, dass das System mit den vorhandenen Daten gut zurechtkommt. Daher ist es notwendig, das System vor dem Einsatz mit einer Kopie der Produktionsdatenbank zu testen.<\/li>\n<\/ul>\n<h2>Wie PostgreSQL-Replikation funktioniert<\/h2>\n<p>Im Allgemeinen glauben die Leute, dass es nur einen Weg gibt, <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-seite-einfach-sichert\/\">Backups<\/a> und Replikationen einzurichten, wenn du mit einer prim\u00e4ren und sekund\u00e4ren Architektur arbeitest. PostgreSQL-Implementierungen k\u00f6nnen jedoch <a href=\"https:\/\/www.citusdata.com\/blog\/2018\/02\/21\/three-approaches-to-postgresql-replication\/\">jeder dieser drei Methoden<\/a> folgen:<\/p>\n<ol>\n<li><strong>Streaming-Replikation:<\/strong> Repliziert die Daten vom prim\u00e4ren Knoten auf den sekund\u00e4ren und kopiert sie dann in Amazon S3 oder Azure Blob als Backup-Speicher.<\/li>\n<li><strong>Replikation auf Volume-Ebene:<\/strong> Repliziert Daten auf der Speicherebene, beginnend vom prim\u00e4ren Knoten zum sekund\u00e4ren Knoten, und kopiert die Daten dann in Amazon S3 oder Azure Blob als Backup-Speicher.<\/li>\n<li><strong>Inkrementelle Backups:<\/strong> Repliziert die Daten des prim\u00e4ren Knotens, w\u00e4hrend ein neuer sekund\u00e4rer Knoten aus dem Amazon S3- oder Azure Blob-Speicher erstellt wird, was Streaming direkt vom prim\u00e4ren Knoten erm\u00f6glicht.<\/li>\n<\/ol>\n<h3>Methode 1: Streaming<\/h3>\n<p>Die PostgreSQL-Streaming-Replikation, auch bekannt als WAL-Replikation, kann nahtlos nach der Installation von PostgreSQL auf allen Servern eingerichtet werden. Dieser Replikationsansatz basiert auf dem Verschieben der WAL-Dateien von der Prim\u00e4r- zur Zieldatenbank.<\/p>\n<p>Du kannst die PostgreSQL-Streaming-Replikation mit einer Prim\u00e4r-Sekund\u00e4r-Konfiguration implementieren. Der prim\u00e4re Server ist die Hauptinstanz, die die prim\u00e4re Datenbank und alle ihre Operationen verwaltet. Der sekund\u00e4re Server fungiert als zus\u00e4tzliche Instanz und f\u00fchrt alle \u00c4nderungen an der prim\u00e4ren Datenbank auf sich selbst aus, wobei er eine identische Kopie erzeugt. Der Prim\u00e4rserver ist der Lese-\/Schreibserver, w\u00e4hrend der Sekund\u00e4rserver nur Lesezugriff hat.<\/p>\n<p>Bei dieser Methode musst du sowohl den prim\u00e4ren als auch den Standby-Knoten konfigurieren. In den folgenden Abschnitten werden die Schritte erl\u00e4utert, die f\u00fcr eine einfache Konfiguration erforderlich sind.<\/p>\n<h4>Konfiguration des prim\u00e4ren Knotens<\/h4>\n<p>Du kannst den Prim\u00e4rknoten f\u00fcr die Streaming-Replikation konfigurieren, indem du die folgenden Schritte durchf\u00fchrst:<\/p>\n<h5>Schritt 1: Initialisierung der Datenbank<\/h5>\n<p>Um die <a href=\"https:\/\/hevodata.com\/learn\/postgresql-streaming-replication\/#master1\">Datenbank zu initialisieren<\/a>, kannst du den Dienstprogrammbefehl <code>initdb<\/code> verwenden. Anschlie\u00dfend kannst du mit dem folgenden Befehl einen neuen Benutzer mit Replikationsrechten anlegen:<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'example_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'example_password';<\/code><\/pre>\n<p>Der Benutzer muss ein Passwort und einen Benutzernamen f\u00fcr die angegebene Abfrage angeben. Das Schl\u00fcsselwort replication wird verwendet, um dem Benutzer die erforderlichen Rechte zu geben. Eine Beispielabfrage w\u00fcrde etwa so aussehen:<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'rep_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'rep_password';<\/code><\/pre>\n<h5>Schritt 2: Streaming-Eigenschaften konfigurieren<\/h5>\n<p>Als N\u00e4chstes kannst du die Streaming-Eigenschaften in der PostgreSQL-Konfigurationsdatei <strong>(postgresql.conf<\/strong>) konfigurieren, die wie folgt ge\u00e4ndert werden kann:<\/p>\n<pre><code class=\"bash\">wal_level = logical\nwal_log_hints = on\nmax_wal_senders = 8\nmax_wal_size = 1GB\nhot_standby = on<\/code><\/pre>\n<p>Hier ein paar Hintergrundinformationen zu den Parametern, die im vorherigen Snippet verwendet wurden:<\/p>\n<ul>\n<li><strong><code>wal_log_hints<\/code><\/strong>: Dieser Parameter wird f\u00fcr die Funktion <code>pg_rewind<\/code> ben\u00f6tigt, die n\u00fctzlich ist, wenn der Standby-Server nicht mehr mit dem prim\u00e4ren Server synchronisiert ist.<\/li>\n<li><strong><code>wal_level<\/code><\/strong>: Mit diesem Parameter kannst du die PostgreSQL Streaming Replikation aktivieren. M\u00f6gliche Werte sind <code>minimal<\/code>, <code>replica<\/code> oder <code>logical<\/code>.<\/li>\n<li><strong><code>max_wal_size<\/code><\/strong>: Mit diesem Parameter kannst du die Gr\u00f6\u00dfe der WAL-Dateien angeben, die in den Logdateien aufbewahrt werden k\u00f6nnen.<\/li>\n<li><strong><code>hot_standby<\/code><\/strong>: Du kannst diesen Parameter f\u00fcr eine Read-On-Verbindung mit dem sekund\u00e4ren Server nutzen, wenn er auf ON gesetzt ist.<\/li>\n<li><strong><code>max_wal_senders<\/code><\/strong>: Mit <code>max_wal_senders<\/code> kannst du die maximale Anzahl der gleichzeitigen Verbindungen festlegen, die mit den Standby-Servern hergestellt werden k\u00f6nnen.<\/li>\n<\/ul>\n<h5>Schritt 3: Neuen Eintrag erstellen<\/h5>\n<p>Nachdem du die Parameter in der Datei <strong>postgresql.conf<\/strong> ge\u00e4ndert hast, kann ein neuer Replikationseintrag in der Datei <strong>pg_hba.conf<\/strong> daf\u00fcr sorgen, dass die Server f\u00fcr die Replikation eine Verbindung zueinander aufbauen.<\/p>\n<p>Du findest diese Datei normalerweise im Datenverzeichnis von PostgreSQL. Du kannst daf\u00fcr den folgenden Codeausschnitt verwenden:<\/p>\n<pre><code class=\"language-bash\">host replication rep_user IPaddress md5<\/code><\/pre>\n<p>Sobald das Codeschnipsel ausgef\u00fchrt wird, erlaubt der Prim\u00e4rserver einem Benutzer namens <code>rep_user<\/code>, sich zu verbinden und als Standby-Server zu fungieren, indem er die angegebene IP f\u00fcr die Replikation verwendet. Zum Beispiel:<\/p>\n<pre><code class=\"language-bash\">host replication rep_user 192.168.0.22\/32 md5<\/code><\/pre>\n<h4>Standby-Knoten konfigurieren<\/h4>\n<p>Um den Standby-Knoten f\u00fcr die Streaming-Replikation zu konfigurieren, befolgst du die folgenden Schritte:<\/p>\n<h5>Schritt 1: Sichern des prim\u00e4ren Knotens<\/h5>\n<p>Um den Standby-Knoten zu konfigurieren, erstellst du mit dem Dienstprogramm <code>pg_basebackup<\/code> ein Backup des prim\u00e4ren Knotens. Diese dient als Startpunkt f\u00fcr den Standby-Knoten. Du kannst dieses Dienstprogramm mit der folgenden Syntax verwenden:<\/p>\n<pre><code class=\"language-bash\">pg_basebackp -D  -h  -X stream -c fast -U rep_user -W<\/code><\/pre>\n<p>Die in der oben genannten Syntax verwendeten Parameter lauten wie folgt:<\/p>\n<ul>\n<li><strong><code>-h<\/code><\/strong>: Damit kannst du den prim\u00e4ren Host angeben.<\/li>\n<li><strong><code>-D<\/code><\/strong>: Dieser Parameter gibt das Verzeichnis an, in dem du gerade arbeitest.<\/li>\n<li><strong><code>-C<\/code><\/strong>: Damit kannst du die Checkpoints setzen.<\/li>\n<li><strong><code>-X<\/code><\/strong>: Mit diesem Parameter kannst du die notwendigen Transaktionsprotokolldateien einbinden.<\/li>\n<li><strong><code>-W<\/code><\/strong>: Mit diesem Parameter kannst du den Benutzer zur Eingabe eines Passworts auffordern, bevor er sich mit der Datenbank verbindet.<\/li>\n<\/ul>\n<h5>Schritt 2: Replikationskonfigurationsdatei einrichten<\/h5>\n<p>Als N\u00e4chstes musst du pr\u00fcfen, ob die Replikationskonfigurationsdatei existiert. Ist dies nicht der Fall, kannst du die Replikationskonfigurationsdatei als <strong>recovery.conf<\/strong> erstellen.<\/p>\n<p>Du solltest diese Datei im Datenverzeichnis der PostgreSQL-Installation erstellen. Du kannst sie automatisch erstellen, indem du die Option <code>-R<\/code> im Dienstprogramm <code>pg_basebackup<\/code> verwendest.<\/p>\n<p>Die Datei <strong>recovery.conf<\/strong> sollte die folgenden Befehle enthalten:<\/p>\n<pre><code class=\"bash\">standby_mode = 'on'\n\nprimary_conninfo = 'host=&lt;master_host&gt; port=&lt;postgres_port&gt; user=&lt;replication_user&gt; password=&lt;password&gt; application_name=\"host_name\"'\n\nrecovery_target_timeline = 'latest'<\/code><\/pre>\n<p>Die in den oben genannten Befehlen verwendeten Parameter lauten wie folgt:<\/p>\n<ul>\n<li><strong><code>primary_conninfo<\/code><\/strong>: Mit diesem Parameter kannst du eine Verbindung zwischen dem prim\u00e4ren und dem sekund\u00e4ren Server herstellen, indem du einen Verbindungsstring verwendest.<\/li>\n<li><strong><code>standby_mode<\/code><\/strong>: Dieser Parameter kann bewirken, dass der prim\u00e4re Server als Standby-Server gestartet wird, wenn er eingeschaltet wird.<\/li>\n<li><strong><code>recovery_target_timeline<\/code><\/strong>: Damit kannst du die Wiederherstellungszeit festlegen.<\/li>\n<\/ul>\n<p>Um eine Verbindung einzurichten, musst du den Benutzernamen, die IP-Adresse und das Passwort als Werte f\u00fcr den Parameter primary_conninfo angeben. Zum Beispiel:<\/p>\n<pre><code class=\"language-bash\"> primary_conninfo = 'host=192.168.0.26 port=5432 user=rep_user password=rep_pass'<\/code><\/pre>\n<h5>Schritt 3: Neustart des Sekund\u00e4rservers<\/h5>\n<p>Zum Schluss kannst du den Sekund\u00e4rserver neu starten, um den Konfigurationsprozess abzuschlie\u00dfen.<\/p>\n<p>Die Streaming-Replikation bringt jedoch einige Herausforderungen mit sich, wie zum Beispiel:<\/p>\n<ul>\n<li>Verschiedene PostgreSQL-Clients (in verschiedenen Programmiersprachen geschrieben) kommunizieren mit einem einzigen Endpunkt. Wenn der prim\u00e4re Knoten ausf\u00e4llt, versuchen diese Clients immer wieder denselben DNS- oder IP-Namen. Dadurch wird das Failover f\u00fcr die Anwendung sichtbar.<\/li>\n<li>Die PostgreSQL-Replikation verf\u00fcgt nicht \u00fcber eine integrierte Ausfallsicherung und \u00dcberwachung. Wenn der Prim\u00e4rknoten ausf\u00e4llt, musst du einen Sekund\u00e4rknoten zum neuen Prim\u00e4rknoten ernennen. Diese Bef\u00f6rderung muss so durchgef\u00fchrt werden, dass die Clients nur auf einen prim\u00e4ren Knoten schreiben und keine Dateninkonsistenzen bemerken.<\/li>\n<li>PostgreSQL repliziert seinen gesamten Zustand. Wenn du einen neuen sekund\u00e4ren Knoten entwickeln musst, muss der sekund\u00e4re Knoten die gesamte Historie der Zustands\u00e4nderungen des prim\u00e4ren Knotens rekapitulieren, was ressourcenintensiv ist und es kostspielig macht, Knoten im Kopf zu eliminieren und neue zu erstellen.<\/li>\n<\/ul>\n<h3>Methode 2: Repliziertes Blockger\u00e4t<\/h3>\n<p>Der Methode des replizierten Blockger\u00e4ts basiert auf der Spiegelung von Festplatten (auch bekannt als Volume-Replikation). Bei diesem Ansatz werden \u00c4nderungen auf ein persistentes Volume geschrieben, das synchron auf ein anderes Volume gespiegelt wird.<\/p>\n<p>Der zus\u00e4tzliche Vorteil dieses Methode ist die Kompatibilit\u00e4t und Datenbest\u00e4ndigkeit in Cloud-Umgebungen mit allen relationalen Datenbanken, wie PostgreSQL, MySQL und <a href=\"https:\/\/kinsta.com\/de\/blog\/postgresql-vs-sql-server\/\">SQL Server<\/a>, um nur einige zu nennen.<\/p>\n<p>Bei der PostgreSQL-Replikation mit Disk-Mirroring musst du jedoch sowohl die WAL-Log- als auch die Tabellendaten replizieren. Da jeder Schreibvorgang in die Datenbank nun synchron \u00fcber das Netzwerk erfolgen muss, kannst du es dir nicht erlauben, auch nur ein einziges Byte zu verlieren, da deine Datenbank sonst besch\u00e4digt werden k\u00f6nnte.<\/p>\n<p>Dieser Methode wird normalerweise mit Azure PostgreSQL und Amazon RDS genutzt.<\/p>\n<h3>Methode 3: WAL<\/h3>\n<p>WAL besteht aus Segmentdateien (standardm\u00e4\u00dfig 16 MB). Jedes Segment enth\u00e4lt einen oder mehrere Datens\u00e4tze. Ein Log Sequence Record (LSN) ist ein Zeiger auf einen Datensatz in der WAL, der dir die Position\/den Ort angibt, an dem der Datensatz in der Logdatei gespeichert wurde.<\/p>\n<p>Ein Standby-Server nutzt WAL-Segmente &#8211; in der PostgreSQL-Terminologie auch XLOGS genannt -, um \u00c4nderungen des Prim\u00e4rservers kontinuierlich zu replizieren. Du kannst Write-Ahead-Logging verwenden, um Haltbarkeit und Atomarit\u00e4t in einem DBMS zu gew\u00e4hrleisten, indem du Datenpakete aus Byte-Arrays (jedes mit einer eindeutigen LSN) in einen stabilen Speicher serialisierst, bevor sie auf eine Datenbank angewendet werden.<\/p>\n<p>Die Anwendung einer Mutation auf eine Datenbank kann zu verschiedenen Dateisystemoperationen f\u00fchren. Eine wichtige Frage, die sich stellt, ist, wie eine Datenbank die Atomarit\u00e4t im Falle eines Serverausfalls aufgrund eines Stromausfalls sicherstellen kann, w\u00e4hrend sie mitten in einer Dateisystemaktualisierung steckt. Wenn eine Datenbank hochf\u00e4hrt, startet sie einen Start- oder Replay-Prozess, der die verf\u00fcgbaren WAL-Segmente lesen kann und sie mit der LSN vergleicht, die auf jeder Datenseite gespeichert ist (jede Datenseite ist mit der LSN des letzten WAL-Datensatzes markiert, der die Seite betrifft).<\/p>\n<h4>Log Shipping-basierte Replikation (Block Level)<\/h4>\n<p>Die Streaming-Replikation verfeinert den Log-Shipping-Prozess. Anstatt auf den WAL-Wechsel zu warten, werden die Datens\u00e4tze gesendet, sobald sie erstellt werden.<\/p>\n<p>Die Streaming-Replikation \u00fcbertrumpft auch den Log-Versand, weil der Standby-Server \u00fcber das Netzwerk mit dem Prim\u00e4rserver verbunden ist, indem er ein Replikationsprotokoll nutzt. Der Prim\u00e4rserver kann dann WAL-Datens\u00e4tze direkt \u00fcber diese Verbindung senden, ohne auf Skripte angewiesen zu sein, die vom Endbenutzer bereitgestellt werden.<\/p>\n<h4>Log Shipping-basierte Replikation (File Level)<\/h4>\n<p>Unter Log Shipping versteht man das Kopieren von Logdateien auf einen anderen PostgreSQL-Server, um einen weiteren Standby-Server durch die Wiedergabe von WAL-Dateien zu erzeugen. Dieser Server ist so konfiguriert, dass er im Wiederherstellungsmodus arbeitet, und sein einziger Zweck ist es, alle neuen WAL-Dateien anzuwenden, sobald sie auftauchen.<\/p>\n<p>Dieser sekund\u00e4re Server wird dann zu einem Warm-Backup des prim\u00e4ren PostgreSQL-Servers. Er kann auch als Read Replica konfiguriert werden, so dass er nur Leseabfragen durchf\u00fchren kann, was auch als Hot Standby bezeichnet wird.<\/p>\n<h4>Kontinuierliche WAL-Archivierung<\/h4>\n<p>Das Duplizieren von WAL-Dateien, sobald sie erstellt werden, in ein anderes Verzeichnis als das Unterverzeichnis <code>pg_wal<\/code>, um sie zu archivieren, wird als WAL-Archivierung bezeichnet. PostgreSQL ruft jedes Mal, wenn eine WAL-Datei erstellt wird, ein vom Benutzer angegebenes Skript zur Archivierung auf.<\/p>\n<p>Das Skript kann den Befehl <code>scp<\/code> nutzen, um die Datei an einen oder mehrere Speicherorte zu duplizieren, z. B. in ein NFS-Mount. Einmal archiviert, k\u00f6nnen die WAL-Segmentdateien genutzt werden, um die Datenbank zu einem beliebigen Zeitpunkt wiederherzustellen.<\/p>\n<p>Weitere logbasierte Konfigurationen sind:<\/p>\n<ul>\n<li><strong>Synchrone Replikation<\/strong>: Bevor ein synchroner Replikationsvorgang best\u00e4tigt wird, wartet der Prim\u00e4rserver, bis die Standbys best\u00e4tigen, dass sie die Daten erhalten haben. Der Vorteil dieser Konfiguration ist, dass es keine Konflikte durch parallele Schreibvorg\u00e4nge gibt.<\/li>\n<li><strong>Synchrone Multi-Master-Replikation<\/strong>: Hier kann jeder Server Schreibanfragen annehmen, und die ge\u00e4nderten Daten werden vom urspr\u00fcnglichen Server an jeden anderen Server \u00fcbertragen, bevor jede Transaktion best\u00e4tigt wird. Sie nutzt das 2PC-Protokoll und h\u00e4lt sich an die Alles-oder-Nichts-Regel.<\/li>\n<\/ul>\n<h4>Details zum WAL-Streaming-Protokoll<\/h4>\n<p>Ein Prozess, der als WAL-Receiver bezeichnet wird, und auf dem Standby-Server l\u00e4uft, nutzt die Verbindungsdetails, die im Parameter <code>primary_conninfo<\/code> der <strong>recovery.conf<\/strong> angegeben sind, und verbindet sich \u00fcber eine TCP\/IP-Verbindung mit dem Prim\u00e4rserver.<\/p>\n<p>Um die Streaming-Replikation zu starten, kann das Frontend den Replikationsparameter in der Startnachricht senden. Ein boolescher Wert von true, yes, 1 oder ON teilt dem <a href=\"https:\/\/kinsta.com\/de\/blog\/backend-entwicklers-gehalt\/\">Backend<\/a> mit, dass es in den physischen Replikations-Walsender-Modus wechseln muss.<\/p>\n<p>Der WAL-Sender ist ein weiterer Prozess, der auf dem Prim\u00e4rserver l\u00e4uft und daf\u00fcr zust\u00e4ndig ist, die WAL-Datens\u00e4tze an den Standby-Server zu senden, sobald sie erzeugt werden. Der WAL-Receiver speichert die WAL-Datens\u00e4tze in der WAL, als ob sie durch die Client-Aktivit\u00e4ten der lokal verbundenen Clients erstellt worden w\u00e4ren.<\/p>\n<p>Sobald die WAL-Datens\u00e4tze die WAL-Segmentdateien erreicht haben, spielt der Standby-Server die WAL st\u00e4ndig neu ab, damit Prim\u00e4r- und Standby-Server auf dem neuesten Stand sind.<\/p>\n<p>\u00a0<\/p>\n<figure id=\"attachment_128035\" aria-describedby=\"caption-attachment-128035\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-128035 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/07\/WAL-Streaming-Protocol-Details.png\" alt=\"Ein Flussdiagramm, das die einzelnen Schritte des WAL-Streaming-Protokolls zwischen dem Prim\u00e4r- und dem Standby-Server darstellt\" width=\"1024\" height=\"1020\"><figcaption id=\"caption-attachment-128035\" class=\"wp-caption-text\">WAL Streaming Protocol Flow Diagram (Image Source: <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<h2>Elemente der PostgreSQL-Replikation<\/h2>\n<p>In diesem Abschnitt lernst du die gebr\u00e4uchlichen Modelle (Single-Master- und Multi-Master-Replikation), Typen (physische und logische Replikation) und Modi (synchron und asynchron) der PostgreSQL-Replikation n\u00e4her kennen.<\/p>\n<h3>Modelle der PostgreSQL Datenbankreplikation<\/h3>\n<p>Skalierbarkeit bedeutet, dass mehr Ressourcen\/Hardware zu den bestehenden Knoten hinzugef\u00fcgt werden, um die F\u00e4higkeit der Datenbank zu verbessern, mehr Daten zu speichern und zu verarbeiten, was horizontal und vertikal erreicht werden kann. Die PostgreSQL-Replikation ist ein Beispiel f\u00fcr horizontale Skalierbarkeit, die viel schwieriger zu implementieren ist als vertikale Skalierbarkeit. Wir k\u00f6nnen horizontale Skalierbarkeit haupts\u00e4chlich durch Single-Master-Replikation (SMR) und Multi-Master-Replikation (MMR) erreichen.<\/p>\n<p>Bei der Single-Master-Replikation k\u00f6nnen Daten nur auf einem einzigen Knoten ge\u00e4ndert werden, und diese \u00c4nderungen werden auf einen oder mehrere Knoten repliziert. Die replizierten Tabellen in der Replikatdatenbank d\u00fcrfen keine \u00c4nderungen annehmen, au\u00dfer die vom Prim\u00e4rserver. Selbst wenn dies der Fall ist, werden die \u00c4nderungen nicht auf den Prim\u00e4rserver zur\u00fcckrepliziert.<\/p>\n<p>In den meisten F\u00e4llen ist SMR f\u00fcr die Anwendung ausreichend, da es weniger kompliziert zu konfigurieren und zu verwalten ist und keine Konflikte auftreten k\u00f6nnen. Die Single-Master-Replikation ist au\u00dferdem unidirektional, da die Replikationsdaten nur in eine Richtung flie\u00dfen, n\u00e4mlich vom Prim\u00e4rserver zur Replikatdatenbank.<\/p>\n<p>In manchen F\u00e4llen ist SMR allein nicht ausreichend und du musst MMR implementieren. MMR erm\u00f6glicht es, dass mehr als ein Knoten als prim\u00e4rer Knoten fungiert. \u00c4nderungen an Tabellenzeilen in mehr als einer bestimmten prim\u00e4ren Datenbank werden auf die entsprechenden Tabellen in jeder anderen prim\u00e4ren Datenbank repliziert. Bei diesem Modell werden oft Konfliktl\u00f6sungsschemata eingesetzt, um Probleme wie doppelte Prim\u00e4rschl\u00fcssel zu vermeiden.<\/p>\n<p>Die Verwendung von MMR hat einige Vorteile, n\u00e4mlich<\/p>\n<ul>\n<li>F\u00e4llt ein Server aus, k\u00f6nnen andere Server weiterhin Aktualisierungs- und Einf\u00fcgedienste anbieten.<\/li>\n<li>Die prim\u00e4ren Knotenpunkte sind auf mehrere Standorte verteilt, so dass die Wahrscheinlichkeit eines Ausfalls aller prim\u00e4ren Knotenpunkte sehr gering ist.<\/li>\n<li>Die M\u00f6glichkeit, ein Wide Area Network (WAN) von Prim\u00e4rdatenbanken zu nutzen, die sich geografisch in der N\u00e4he von Kundengruppen befinden k\u00f6nnen, wobei die Datenkonsistenz im gesamten Netzwerk erhalten bleibt.<\/li>\n<\/ul>\n<p>Der Nachteil von MMR ist jedoch die Komplexit\u00e4t und die Schwierigkeit, Konflikte aufzul\u00f6sen.<\/p>\n<p>Verschiedene Branchen und Anwendungen bieten MMR-L\u00f6sungen an, da PostgreSQL sie nicht von Haus aus unterst\u00fctzt. Diese L\u00f6sungen k\u00f6nnen <a href=\"https:\/\/kinsta.com\/de\/blog\/open-source-database\/\">Open-Source<\/a>, kostenlos oder kostenpflichtig sein. Eine solche <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-datenbank-plugin\/\">Erweiterung<\/a> ist die bidirektionale Replikation (BDR), die asynchron ist und auf der logischen Dekodierungsfunktion von PostgreSQL basiert.<\/p>\n<p>Da die BDR-Anwendung Transaktionen auf anderen Knoten wiedergibt, kann die Wiedergabe fehlschlagen, wenn es einen Konflikt zwischen der angewendeten Transaktion und der Transaktion gibt, die auf dem empfangenden Knoten \u00fcbertragen wurde.<\/p>\n<h3>Arten der PostgreSQL-Replikation<\/h3>\n<p>Es gibt zwei Arten der PostgreSQL-Replikation: die logische und die physische Replikation.<\/p>\n<p>Eine einfache <em>logische<\/em> Operation <code>initdb<\/code> w\u00fcrde die physische Operation der Erstellung eines Basisverzeichnisses f\u00fcr einen Cluster ausf\u00fchren. Ebenso w\u00fcrde eine einfache <em>logische<\/em> Operation <code>CREATE DATABASE<\/code>\u00a0die <em>physische<\/em> Operation der Erstellung eines Unterverzeichnisses im Basisverzeichnis durchf\u00fchren.<\/p>\n<p>Die physische Replikation befasst sich normalerweise mit Dateien und Verzeichnissen. Sie wei\u00df nicht, was diese Dateien und Verzeichnisse darstellen. Diese Methoden werden verwendet, um eine vollst\u00e4ndige Kopie der gesamten Daten eines einzelnen Clusters, in der Regel auf einem anderen Rechner, zu erhalten. Sie erfolgen auf Dateisystem- oder Festplattenebene und verwenden exakte Blockadressen.<\/p>\n<p>Bei der logischen Replikation werden Dateneinheiten und ihre \u00c4nderungen auf der Grundlage ihrer Replikationsidentit\u00e4t (normalerweise ein Prim\u00e4rschl\u00fcssel) reproduziert. Im Gegensatz zur physischen Replikation bezieht sie sich auf Datenbanken, Tabellen und DML-Operationen und wird auf der Ebene des Datenbank-Clusters durchgef\u00fchrt. Sie verwendet ein <em>Publish-and-Subscribe-Modell<\/em>, bei dem ein oder mehrere <em>Subscriber<\/em> eine oder mehrere <em>Publikationen<\/em> auf einem <em>Publisher-Node<\/em> abonnieren.<\/p>\n<p>Der Replikationsprozess beginnt damit, dass ein Snapshot der Daten in der Publisher-Datenbank erstellt und dann auf den Subscriber kopiert wird. Die Subscriber ziehen die Daten aus den Publikationen, die sie abonniert haben, und k\u00f6nnen die Daten sp\u00e4ter erneut ver\u00f6ffentlichen, um eine kaskadierende Replikation oder komplexere Konfigurationen zu erm\u00f6glichen. Der Subscriber wendet die Daten in der gleichen Reihenfolge wie der Herausgeber an, so dass die transaktionale Konsistenz f\u00fcr die Publikationen innerhalb eines einzigen Abonnements gew\u00e4hrleistet ist, auch bekannt als transaktionale Replikation.<\/p>\n<p>Die typischen Anwendungsf\u00e4lle f\u00fcr die logische Replikation sind:<\/p>\n<ul>\n<li>Inkrementelle \u00c4nderungen in einer einzelnen Datenbank (oder einer Teilmenge einer Datenbank) an die Abonnenten weiterleiten, sobald sie auftreten.<\/li>\n<li>Gemeinsame Nutzung einer Teilmenge der Datenbank durch mehrere Datenbanken.<\/li>\n<li>Ausl\u00f6sen des Feuerns einzelner \u00c4nderungen, sobald sie beim Abonnenten ankommen.<\/li>\n<li>Konsolidierung mehrerer Datenbanken zu einer einzigen.<\/li>\n<li>Bereitstellung des Zugriffs auf replizierte Daten f\u00fcr verschiedene Benutzergruppen.<\/li>\n<\/ul>\n<p>Die Abonnentendatenbank verh\u00e4lt sich wie jede andere PostgreSQL-Instanz und kann als Publisher f\u00fcr andere Datenbanken verwendet werden, indem sie ihre Publikationen definiert.<\/p>\n<p>Wenn der Abonnent von der Anwendung als schreibgesch\u00fctzt behandelt wird, gibt es keine Konflikte durch ein einzelnes Abonnement. Wenn jedoch andere Anwendungen oder andere Abonnenten auf dieselben Tabellen schreiben, kann es zu Konflikten kommen.<\/p>\n<p>PostgreSQL unterst\u00fctzt beide Mechanismen gleichzeitig. Die logische Replikation erm\u00f6glicht eine fein abgestufte Kontrolle sowohl \u00fcber die Datenreplikation als auch \u00fcber die Sicherheit.<\/p>\n<h3>Replikationsmodi<\/h3>\n<p>Es gibt haupts\u00e4chlich zwei Arten der PostgreSQL-Replikation: synchrone und asynchrone. Bei der synchronen Replikation k\u00f6nnen die Daten gleichzeitig auf den prim\u00e4ren und den sekund\u00e4ren Server geschrieben werden, w\u00e4hrend bei der asynchronen Replikation die Daten zuerst auf den Host geschrieben und dann auf den sekund\u00e4ren Server kopiert werden.<\/p>\n<p>Bei der synchronen Replikation gelten die Transaktionen in der prim\u00e4ren Datenbank erst dann als abgeschlossen, wenn die \u00c4nderungen auf alle Replikate \u00fcbertragen wurden. Die Replikationsserver m\u00fcssen alle st\u00e4ndig verf\u00fcgbar sein, damit die Transaktionen auf dem Prim\u00e4rserver abgeschlossen werden k\u00f6nnen. Der synchrone Replikationsmodus wird in High-End-Transaktionsumgebungen verwendet, in denen eine sofortige Ausfallsicherung erforderlich ist.<\/p>\n<p>Im asynchronen Modus k\u00f6nnen Transaktionen auf dem Prim\u00e4rserver f\u00fcr abgeschlossen erkl\u00e4rt werden, wenn die \u00c4nderungen nur auf dem Prim\u00e4rserver durchgef\u00fchrt wurden. Diese \u00c4nderungen werden dann zu einem sp\u00e4teren Zeitpunkt auf den Replikaten repliziert. Die Replikationsserver k\u00f6nnen f\u00fcr eine bestimmte Zeitspanne nicht synchronisiert sein, was als Replikationsverz\u00f6gerung bezeichnet wird. Im Falle eines Absturzes kann es zu Datenverlusten kommen, aber der Overhead, den die asynchrone Replikation verursacht, ist gering, so dass er in den meisten F\u00e4llen akzeptabel ist (der Host wird nicht \u00fcberlastet). Der Failover von der prim\u00e4ren Datenbank zur sekund\u00e4ren Datenbank dauert l\u00e4nger als die synchrone Replikation.<\/p>\n<h2>So richtest du die PostgreSQL-Replikation ein<\/h2>\n<p>In diesem Abschnitt zeigen wir dir, wie du den PostgreSQL-Replikationsprozess auf einem Linux-Betriebssystem einrichtest. F\u00fcr dieses Beispiel verwenden wir Ubuntu 18.04 LTS und PostgreSQL 10.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Stelle sicher, dass du den Linux Ubuntu Server installiert hast. Im Folgenden werden die Schritte zur Installation von PostgreSQL auf einem Linux-Server beschrieben, gefolgt von der Einrichtung der Replikation auf dem prim\u00e4ren und dem sekund\u00e4ren Server.<\/p>\n<\/aside>\n\n<p>Legen wir los!<\/p>\n<h3>Installation<\/h3>\n<p>Du beginnst mit der Installation von PostgreSQL auf Linux mit diesen Schritten:<\/p>\n<ol>\n<li>Als Erstes musst du den PostgreSQL-Signierschl\u00fcssel importieren, indem du den folgenden Befehl in das Terminal eingibst:\n<pre><code class=\"language-bash\"> wget -q https:\/\/www.postgresql.org\/media\/keys\/ACCC4CF8.asc -O- | sudo apt-key add -<\/code><\/pre>\n<\/li>\n<li>Dann f\u00fcgst du das PostgreSQL-Repository hinzu, indem du den folgenden Befehl in das Terminal eingibst:\n<pre><code class=\"language-bash\"> echo \"deb http:\/\/apt.postgresql.org\/pub\/repos\/apt\/ bionic-pgdg main\" | sudo tee \/etc\/apt\/sources.list.d\/postgresql.list <\/code><\/pre>\n<\/li>\n<li>Aktualisiere den Repository Index, indem du den folgenden Befehl in das Terminal eingibst:\n<pre><code class=\"language-bash\"> sudo apt-get update <\/code><\/pre>\n<\/li>\n<li>Installiere das PostgreSQL-Paket mit dem Befehl apt:\n<pre><code class=\"language-bash\"> sudo apt-get install -y postgresql-10<\/code><\/pre>\n<\/li>\n<li>Zum Schluss legst du das Passwort f\u00fcr den PostgreSQL-Benutzer mit dem folgenden Befehl fest:\n<pre><code class=\"language-bash\"> sudo passwd postgres<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Die Installation von PostgreSQL ist sowohl f\u00fcr den prim\u00e4ren als auch f\u00fcr den sekund\u00e4ren Server obligatorisch, bevor du den PostgreSQL-Replikationsprozess startest.<\/p>\n<p>Sobald du PostgreSQL auf beiden Servern eingerichtet hast, kannst du mit der Einrichtung der Replikation auf dem prim\u00e4ren und dem sekund\u00e4ren Server fortfahren.<\/p>\n<h3>Einrichten der Replikation auf dem prim\u00e4ren Server<\/h3>\n<p>F\u00fchre diese Schritte durch, sobald du PostgreSQL auf dem prim\u00e4ren und sekund\u00e4ren Server installiert hast.<\/p>\n<ol>\n<li>Melde dich zun\u00e4chst mit folgendem Befehl bei der PostgreSQL-Datenbank an:\n<pre><code class=\"language-bash\"> su - postgres<\/code><\/pre>\n<\/li>\n<li>Erstelle einen Replikationsbenutzer mit dem folgenden Befehl:\n<pre><code class=\"language-bash\"> psql -c \"CREATEUSER replication REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD'YOUR_PASSWORD';\"<\/code><\/pre>\n<\/li>\n<li>Bearbeite <strong>pg_hba.cnf<\/strong> mit einer beliebigen nano-Anwendung in Ubuntu und f\u00fcge die folgende Konfiguration hinzu:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/pg_hba.conf<\/code><\/pre>\n<p>Um die Datei zu konfigurieren, verwende den folgenden Befehl:<\/p>\n<pre><code class=\"language-bash\">host replication  replication  MasterIP\/24  md5<\/code><\/pre>\n<\/li>\n<li>\u00d6ffne und bearbeite <strong>postgresql.conf<\/strong> und f\u00fcge die folgende Konfiguration auf dem Prim\u00e4rserver ein:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf<\/code><\/pre>\n<p>Verwende die folgenden Konfigurationseinstellungen:<\/p>\n<pre><code class=\"language-bash\">listen_addresses = 'localhost,MasterIP'\nwal_level = replica\nwal_keep_segments = 64\nmax_wal_senders = 10<\/code><\/pre>\n<\/li>\n<li>Starte schlie\u00dflich PostgreSQL auf dem Hauptserver neu:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl restart postgresql<\/code><\/pre>\n<p>Damit hast du die Einrichtung auf dem prim\u00e4ren Server abgeschlossen.<\/p>\n<h3>Einrichten der Replikation auf dem sekund\u00e4ren Server<\/h3>\n<p>Befolge diese Schritte, um die Replikation auf dem Sekund\u00e4rserver einzurichten:<\/p>\n<ol>\n<li>Melde dich mit folgendem Befehl beim PostgreSQL RDMS an:\n<pre><code class=\"language-bash\">su - postgres<\/code><\/pre>\n<\/li>\n<li>Halte den PostgreSQL-Dienst an, damit wir mit dem folgenden Befehl daran arbeiten k\u00f6nnen:\n<pre><code class=\"language-bash\">systemctl stop postgresql<\/code><\/pre>\n<\/li>\n<li>Bearbeite die Datei <strong>pg_hba.conf<\/strong> mit diesem Befehl und f\u00fcge die folgende Konfiguration hinzu:\n<pre><code class=\"language-bash\">\/\/ \"Edit\" command\nnano \/etc\/postgresql\/10\/main\/pg_hba.conf\n\/\/ \"Configuration\" command\nhost replication replication MasterIP\/24 md5<\/code><\/pre>\n<\/li>\n<li>\u00d6ffne und bearbeite die <strong>postgresql.conf<\/strong> auf dem sekund\u00e4ren Server und f\u00fcge die folgende Konfiguration ein bzw. entferne die Kommentare, falls sie vorhanden sind:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf\nlisten_addresses = 'localhost,SecondaryIP'\nwal_keep_segments = 64\nwal_level = replica\nhot_standby = on\nmax_wal_senders = 10<\/code><\/pre>\n<p><code>SecondaryIP<\/code> ist die Adresse des sekund\u00e4ren Servers<\/li>\n<li>Greife auf das PostgreSQL-Datenverzeichnis auf dem sekund\u00e4ren Server zu und entferne alles:\n<pre><code class=\"language-bash\">cd \/var\/lib\/postgresql\/10\/main\nrm -rfv *<\/code><\/pre>\n<\/li>\n<li>Kopiere die Dateien des PostgreSQL-Prim\u00e4rserver-Datenverzeichnisses in das PostgreSQL-Sekund\u00e4rserver-Datenverzeichnis und schreibe diesen Befehl in den Sekund\u00e4rserver:\n<pre><code class=\"language-bash\">pg_basebackup -h MasterIP -D \/var\/lib\/postgresql\/11\/main\/ -P -U\nreplication --wal-method=fetch<\/code><\/pre>\n<\/li>\n<li>Gib das PostgreSQL-Passwort f\u00fcr den Prim\u00e4rserver ein und dr\u00fccke die Eingabetaste. Als n\u00e4chstes f\u00fcgst du den folgenden Befehl f\u00fcr die Wiederherstellungskonfiguration hinzu:\n<pre><code class=\"language-bash\">\/\/ \"Edit\" Command\nnano \/var\/lib\/postgresql\/10\/main\/recovery.conf\n\/\/ Configuration\nstandby_mode = 'on'\nprimary_conninfo = 'host=MasterIP port=5432 user=replication password=YOUR_PASSWORD'\ntrigger_file = '\/tmp\/MasterNow'<\/code><\/pre>\n<p><code>YOUR_PASSWORD<\/code> ist hier das Passwort f\u00fcr den Replikationsbenutzer auf dem Prim\u00e4rserver, den PostgreSQL erstellt hat<\/li>\n<li>Sobald das Passwort festgelegt ist, musst du die sekund\u00e4re PostgreSQL-Datenbank neu starten, da sie angehalten wurde:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl start postgresql<\/code><\/pre>\n<h3>Testen deiner Einrichtung<\/h3>\n<p>Nachdem wir nun die Schritte ausgef\u00fchrt haben, wollen wir den Replikationsprozess testen und die Datenbank des sekund\u00e4ren Servers beobachten. Dazu erstellen wir eine Tabelle auf dem Prim\u00e4rserver und beobachten, ob diese auf dem Sekund\u00e4rserver wiedergegeben wird.<\/p>\n<p>Los geht&#8217;s.<\/p>\n<ol>\n<li>Da wir die Tabelle auf dem Prim\u00e4rserver erstellen, musst du dich auf dem Prim\u00e4rserver anmelden:\n<pre><code class=\"language-bash\"> su - postgres\npsql<\/code><\/pre>\n<\/li>\n<li>Jetzt erstellen wir eine einfache Tabelle namens &#8222;testtable&#8220; und f\u00fcgen Daten in die Tabelle ein, indem wir die folgenden PostgreSQL-Abfragen im Terminal ausf\u00fchren:\n<pre><code class=\"language-bash\"> CREATE TABLE testtable (websites varchar(100));\nINSERT INTO testtable VALUES ('section.com');\nINSERT INTO testtable VALUES ('google.com');\nINSERT INTO testtable VALUES ('github.com');<\/code><\/pre>\n<\/li>\n<li>Beobachte die PostgreSQL-Datenbank des Sekund\u00e4rservers, indem du dich auf dem Sekund\u00e4rserver anmeldest:\n<pre><code class=\"language-bash\"> su - postgres psql<\/code><\/pre>\n<\/li>\n<li>Jetzt \u00fcberpr\u00fcfen wir, ob die Tabelle &#8222;testtable&#8220; existiert und k\u00f6nnen die Daten zur\u00fcckgeben, indem wir die folgenden PostgreSQL-Abfragen im Terminal ausf\u00fchren. Dieser Befehl zeigt im Wesentlichen die gesamte Tabelle an.\n<pre><code class=\"language-bash\"> select * from testtable;<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Das ist die Ausgabe der Testtabelle:<\/p>\n<pre><code class=\"language-bash\">|  websites  |\n\n-------------------\n\n| section.com |\n\n| google.com |\n\n| github.com  |\n\n--------------------<\/code><\/pre>\n<p>Du solltest die gleichen Daten wie auf dem Prim\u00e4rserver sehen k\u00f6nnen.<\/p>\n<p>Wenn du das siehst, hast du den Replikationsprozess erfolgreich durchgef\u00fchrt!<\/p>\n<h2>Was sind die Schritte beim manuellen PostgreSQL-Failover?<\/h2>\n<p>Schauen wir uns die Schritte f\u00fcr ein manuelles PostgreSQL-Failover an:<\/p>\n<ol>\n<li>Absturz des prim\u00e4ren Servers.<\/li>\n<li>Promote den Standby-Server, indem du den folgenden Befehl auf dem Standby-Server ausf\u00fchrst:\n<pre><code class=\"language-bash\">.\/pg_ctl promote -D ..\/sb_data\/\nserver promoting<\/code><\/pre>\n<\/li>\n<li>Verbinde dich mit dem bef\u00f6rderten Standby-Server und f\u00fcge eine Zeile ein:\n<pre><code class=\"language-bash\"> -bash-4.2$ .\/edb-psql -p 5432 edb\n\nPassword:\n\npsql.bin (10.7)\n\nType \"help\" <strong>for<\/strong> help.\n\nedb=# <strong>insert<\/strong> <strong>into<\/strong> abc <strong>values<\/strong>(4,'Four');\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Wenn die Einf\u00fcgung funktioniert, wurde der Standby-Server, der zuvor ein Nur-Lese-Server war, zum neuen Prim\u00e4rserver bef\u00f6rdert.<\/p>\n<h2>Wie man Failover in PostgreSQL automatisiert<\/h2>\n<p>Ein automatisches Failover einzurichten ist einfach.<\/p>\n<p>Du brauchst den EDB PostgreSQL Failover Manager (EFM). Nachdem du den EFM heruntergeladen und auf jedem Prim\u00e4r- und Standby-Knoten installiert hast, kannst du einen EFM-Cluster erstellen, der aus einem Prim\u00e4rknoten, einem oder mehreren Standby-Knoten und einem optionalen Witness-Knoten besteht, der im Falle eines Ausfalls Assertions best\u00e4tigt.<\/p>\n<p>Der EFM \u00fcberwacht kontinuierlich den Systemzustand und sendet E-Mail-Warnungen bei Systemereignissen. Bei einem Ausfall schaltet er automatisch auf den aktuellsten Standby-Knoten um und konfiguriert alle anderen Standby-Server neu, um den neuen prim\u00e4ren Knoten zu erkennen.<\/p>\n<p>Es konfiguriert auch Load Balancer (wie pgPool) neu und verhindert &#8222;Split-Brain&#8220; (wenn zwei Knoten denken, sie seien jeweils prim\u00e4r).<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Aufgrund der gro\u00dfen Datenmengen sind Skalierbarkeit und Sicherheit zu zwei der wichtigsten Kriterien in der <a href=\"https:\/\/kinsta.com\/de\/wordpress-hosting\/dediziertes\/\">Datenbankverwaltung<\/a> geworden, insbesondere in einer Transaktionsumgebung. Wir k\u00f6nnen die Skalierbarkeit zwar vertikal verbessern, indem wir mehr Ressourcen\/Hardware zu den vorhandenen Knoten hinzuf\u00fcgen, aber das ist nicht immer m\u00f6glich, oft wegen der Kosten oder der Beschr\u00e4nkungen f\u00fcr das Hinzuf\u00fcgen neuer Hardware.<\/p>\n<p>Daher ist eine horizontale Skalierbarkeit erforderlich, d. h. das Hinzuf\u00fcgen weiterer Knoten zu bestehenden Netzwerkknoten, anstatt die Funktionalit\u00e4t der bestehenden Knoten zu verbessern. An dieser Stelle kommt die PostgreSQL-Replikation ins Spiel.<br \/>\n<br \/>\nIn diesem Artikel haben wir die Arten von PostgreSQL-Replikationen, die Vorteile, die Replikationsmodi, die Installation und das PostgreSQL-Failover zwischen SMR und MMR besprochen. Jetzt wollen wir von dir h\u00f6ren:<\/p>\n<p>Welche der beiden Methoden setzt du normalerweise ein? Welche Datenbankfunktion ist f\u00fcr dich am wichtigsten und warum? Wir w\u00fcrden gerne deine Gedanken lesen! Teile sie in den Kommentaren unten mit.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jeder Website-Besitzer wird dir sagen, dass Datenverluste und Ausfallzeiten, selbst in minimalen Dosen, katastrophale Folgen haben k\u00f6nnen. Sie k\u00f6nnen den Unvorbereiteten jederzeit treffen und die Produktivit\u00e4t, &#8230;<\/p>\n","protected":false},"author":117,"featured_media":53225,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[242,570,420,701],"topic":[973],"class_list":["post-53224","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-databases","tag-development","tag-postgresql","topic-postgresql"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PostgreSQL Replikation: Ein umfassendes Handbuch<\/title>\n<meta name=\"description\" content=\"Lerne die wichtigsten Aspekte der PostgreSQL-Replikation kennen, einschlie\u00dflich ihrer Vorteile, Elemente, Typen und Strategien f\u00fcr nahtlose Datensicherungen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL Replikation: Ein umfassendes Handbuch\" \/>\n<meta property=\"og:description\" content=\"Lerne die wichtigsten Aspekte der PostgreSQL-Replikation kennen, einschlie\u00dflich ihrer Vorteile, Elemente, Typen und Strategien f\u00fcr nahtlose Datensicherungen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-08-11T12:36:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-27T10:44:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Lerne die wichtigsten Aspekte der PostgreSQL-Replikation kennen, einschlie\u00dflich ihrer Vorteile, Elemente, Typen und Strategien f\u00fcr nahtlose Datensicherungen.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"20\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"PostgreSQL Replikation: Ein umfassendes Handbuch\",\"datePublished\":\"2022-08-11T12:36:56+00:00\",\"dateModified\":\"2023-07-27T10:44:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/\"},\"wordCount\":4484,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png\",\"keywords\":[\"database\",\"databases\",\"development\",\"PostgreSQL\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/\",\"name\":\"PostgreSQL Replikation: Ein umfassendes Handbuch\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png\",\"datePublished\":\"2022-08-11T12:36:56+00:00\",\"dateModified\":\"2023-07-27T10:44:36+00:00\",\"description\":\"Lerne die wichtigsten Aspekte der PostgreSQL-Replikation kennen, einschlie\u00dflich ihrer Vorteile, Elemente, Typen und Strategien f\u00fcr nahtlose Datensicherungen.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png\",\"width\":1460,\"height\":730,\"caption\":\"PostgreSQL Replikation: Ein umfassendes Handbuch\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/postgresql\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"PostgreSQL Replikation: Ein umfassendes Handbuch\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PostgreSQL Replikation: Ein umfassendes Handbuch","description":"Lerne die wichtigsten Aspekte der PostgreSQL-Replikation kennen, einschlie\u00dflich ihrer Vorteile, Elemente, Typen und Strategien f\u00fcr nahtlose Datensicherungen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/","og_locale":"de_DE","og_type":"article","og_title":"PostgreSQL Replikation: Ein umfassendes Handbuch","og_description":"Lerne die wichtigsten Aspekte der PostgreSQL-Replikation kennen, einschlie\u00dflich ihrer Vorteile, Elemente, Typen und Strategien f\u00fcr nahtlose Datensicherungen.","og_url":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2022-08-11T12:36:56+00:00","article_modified_time":"2023-07-27T10:44:36+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"Lerne die wichtigsten Aspekte der PostgreSQL-Replikation kennen, einschlie\u00dflich ihrer Vorteile, Elemente, Typen und Strategien f\u00fcr nahtlose Datensicherungen.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png","twitter_creator":"@salmanravoof","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Salman Ravoof","Gesch\u00e4tzte Lesezeit":"20\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"PostgreSQL Replikation: Ein umfassendes Handbuch","datePublished":"2022-08-11T12:36:56+00:00","dateModified":"2023-07-27T10:44:36+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/"},"wordCount":4484,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png","keywords":["database","databases","development","PostgreSQL"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/","url":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/","name":"PostgreSQL Replikation: Ein umfassendes Handbuch","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png","datePublished":"2022-08-11T12:36:56+00:00","dateModified":"2023-07-27T10:44:36+00:00","description":"Lerne die wichtigsten Aspekte der PostgreSQL-Replikation kennen, einschlie\u00dflich ihrer Vorteile, Elemente, Typen und Strategien f\u00fcr nahtlose Datensicherungen.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2022\/08\/postgresql-replication.png","width":1460,"height":730,"caption":"PostgreSQL Replikation: Ein umfassendes Handbuch"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/postgresql-replikation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL","item":"https:\/\/kinsta.com\/de\/thema\/postgresql\/"},{"@type":"ListItem","position":3,"name":"PostgreSQL Replikation: Ein umfassendes Handbuch"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/53224","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=53224"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/53224\/revisions"}],"predecessor-version":[{"id":58265,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/53224\/revisions\/58265"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/translations\/nl"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/translations\/jp"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/translations\/dk"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/53224\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/53225"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=53224"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=53224"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=53224"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}