Blog
Thursday, 19. November 2020

Postgres-Streaming-Replikation

Denise
IT-Consultant
Mainzer Datenfabrik - Postgres-Streaming-Replikation

In diesem Beitrag wollen wir uns damit beschäftigen, wie Sie die Postgres-Streaming-Replikation einrichten können. Zusammenfassend ist die Postgres-Replikation der Vorgang des Kopierens von Daten von einem Datenbankserver auf einen anderen. Während sich dieser Beitrag auf die Streaming-Replikation konzentriert, gibt es auch die Möglichkeit der logischen Replikation. Weiter Informationen hierzu finden Sie in diesem Beitrag.

Allgemein unterscheiden sich die Einrichtungen der Streaming-Replikation unter Windows und Linux nicht. Allerdings werden wir uns in dem ersten Abschnitt unseres Beitrags mit der Einrichtung unter Windows beschäftigen und in einem weiteren Abschnitt die sich hiervon unterscheidenden Befehle unter Linux aufführen.

Zunächst gehen wir davon aus, dass Sie bereits zwei PostgreSQL-Server (Primär- und Sekundär-Server) installiert haben und können uns direkt damit beschäftigen, wie Sie die Streaming-Replikation erfolgreich einrichten können.

Streaming-Replikation unter Windows

  1. Postgres.conf und pg_hba.conf aktualisieren
    Auf Ihrem Primär-Server müssen Sie zunächst Postgres.conf bearbeiten, um die folgenden Einstellungen anzuwenden:
wal_level = hot_standby
full_page_writes = on
wal_log_hints = onmax_wal_senders = 6
max_replication_slots = 6
hot_standby = on
hot_standby_feedback = on

Als nächstes bearbeiten Sie pg_hba.conf und fügen die externen IP-Adressen beider Server wie folgt hinzu:

host replication repl_user IP_of_primary/32 scram-sha-256
host replication repl_user IP_of_secondary/32 scram-sha-256
  1. Einen repl_user/Replication-Slot erstellen
    Führen Sie auf Ihrem Primär-Server folgende Befehle aus:
psql  -d postgres   -U postgres   -c "CREATE ROLE repl_user LOGIN REPLICATION ENCRYPTED PASSWORD 'secretpasswordhere';"
psql -d postgres -U postgres  -c "SELECT * FROM pg_create_physical_replication_slot('standby1', true);"

Der erste Befehl erzeugt einen repl_user und mit dem zweiten erstellen Sie einen Replication-Slot für den Sekundär-Server.

  1. Eine Basissicherung durchführen
    Nachdem Sie die oben genannten Schritte ausgeführt haben, müssen Sie Ihren vorhandenen Cluster wie folgt stoppen:
pg_ctl -D "your\data\directory" stop -mi

Nach dem Stoppen des Clusters müssen Sie das Datei-Verzeichnis löschen. Sie können hierzu entweder folgenden Befehl ausführen, oder das Verzeichnis direkt aus dem Datei-Explorer löschen:

rmdir /s \your\data\directory

Sobald Sie das Datenverzeichnis auf Ihrem Sekundär-Server gelöscht haben, können Sie pg_basebackup ausführen, um das Datenverzeichnis Ihres Primär-Servers in dieses zu kopieren:

pg_basebackup -D \your\data\directory -Fp -R -Xs -c fast -l 'initial clone' -P -v -h IP_of_master -U repl_user

Beachten Sie, dass Sie das Passwort des repl_user eingeben müssen, wenn Sie dazu aufgefordert werden!

  1. Sekundär-Servereinstellungen aktualisieren
    Wenn Sie die Basissicherung mit Postgres 11 oder niedriger abgeschlossen haben, müssen Sie der recovery.conf-Datei Ihres Sekundär-Servers den Namen Ihres Replication-Slots hinzufügen.
    Ab Postgres 12 ist die Datei recovery.conf nicht mehr vorhanden und die Einstellungen werden in Postgres.conf verschoben. Passen Sie die Ihrer Version entsprechende Datei mit einem Texteditor Ihrer Wahl an und fügen Sie den Namen Ihres Replication-Slots ein:
primary_slot_name = 'standby1'

Nachdem Sie die Datei angepasst haben können Sie mit pg_ctl [-D data dir] oder dem net start-Befehl den Sekundär-Server starten.

  1. Replikation überprüfen
    Folgende Befehle können Ihnen helfen herauszufinden, ob die Replikation wie erwartet funktioniert:

Auf dem Primär-Server:

SELECT * FROM pg_stat_replication;

Auf dem Sekundär-Server:

SELECT * FROM pg_stat_wal_receiver;

Sie sollten nun erfolgreich Ihre Streaming-Replikation eingerichtet haben!

Streaming-Replikation unter Linux einrichten

Führen Sie zur Einrichtung unter Linux alle oben beschriebenen Schritte nacheinander mit folgenden Befehlen aus:

  1. Postgres.conf/pg_hba.conf aktualisieren:
$ cat << EOF >> postgresql.conf
    wal_level = hot_standby
    full_page_writes = on
    wal_log_hints = on
    max_wal_senders = 6
    max_replication_slots = 6
    hot_standby = on
    hot_standby_feedback = on
EOF
$ cat << EOF >> pg_hba.conf
    host replication repl_user IP_of_master/32 md5
    host replication repl_user IP_of_standby/32 md5
EOF
  1. Einen repl_user/Replication-Slot erstellen
$ psql \
  -d postgres \
  -U postgres \
  -c "CREATE ROLE repl_user LOGIN REPLICATION ENCRYPTED PASSWORD 'secretpasswordhere';"
$ psql \
  -d postgres \
  -U postgres \
  -c "SELECT * FROM pg_create_physical_replication_slot('standby1', true);"
  1. Eine Basissicherung durchführen
$ cd /var/lib/pgsql/13/data
$ pg_ctl -D $PWD -mf stop
$ cd ..
$ rm -rfv data
$ pg_basebackup \
  -D data \
  -Fp \
  -R \
  -Xs \
  -c fast \
  -l 'initial clone' \
  -P \
  -v \
  -h IP_of_master \
  -U repl_user
  1. Sekundär-Servereinstellungen aktualisieren
$ cd data
cat << EOF >> recovery.conf
primary_slot_name = 'standby1'
EOF

Als letzten Schritt starten Sie Ihren Standby-Server.

  1. Replikation überprüfen
    Überprüfen Sie mit oben genannter Abfrage ob Ihre Replikation ordnungsgemäß funktioniert.

Ihre Streaming-Replikation sollte nun auch unter Linux erfolgreich eingerichtet sein.

Interesse geweckt?

Unsere Expert:innen stehen Ihnen bei allen Fragen rund um Ihre IT Infrastruktur zur Seite.

Kontaktieren Sie uns gerne über das Kontaktformular und vereinbaren ein unverbindliches Beratungsgespräch mit unseren Berater:innen zur Bedarfsevaluierung. Gemeinsam optimieren wir Ihre Umgebung und steigern Ihre Performance!
Wir freuen uns auf Ihre Kontaktaufnahme!

Taunusstraße 72
55118 Mainz
info@madafa.de
+49 6131 3331612
Bürozeiten
Montag bis Donnerstag:
9:00 - 17:00 Uhr MEZ

Freitags:
9:30 - 14:00 Uhr MEZ
Wir sind Ihre SQL Expert:innen!
Noch Fragen? - Wir haben immer die passende Antwort für Sie!