Datenbank Replikation · 8 min read · Nov 30, 2025

So richten Sie die Master-Slave-Replikation für PostgreSQL 9.6 auf Ubuntu 16.04 ein

PostgreSQL oder Postgres ist ein Open-Source-objekt-relationales Datenbankmanagementsystem (ORDBMS) mit mehr als 15 Jahren aktiver Entwicklung. Es ist ein leistungsstarker Datenbankserver und kann hohe Arbeitslasten bewältigen. PostgreSQL kann auf Linux, Unix, BSD und Windows-Servern verwendet werden.

Die Master/Slave-Datenbankreplikation ist ein Prozess zum Kopieren (Synchronisieren) von Daten aus einer Datenbank auf einem Server (dem Master) in eine Datenbank auf einem anderen Server (den Slaves). Der Hauptvorteil dieses Prozesses besteht darin, Datenbanken auf mehrere Maschinen zu verteilen, sodass, wenn der Master-Server ein Problem hat, eine Sicherungsmaschine mit denselben Daten zur Verfügung steht, um Anfragen ohne Unterbrechung zu bearbeiten.

PostgreSQL bietet mehrere Möglichkeiten zur Replikation einer Datenbank. Es kann für Sicherungszwecke und zur Bereitstellung eines hochverfügbaren Datenbankservers verwendet werden. In diesem Tutorial zeigen wir Ihnen, wie Sie die PostgreSQL 9.6 Master-Slave-Replikation auf einem Ubuntu 16.04-Server installieren und konfigurieren. Wir werden den Hot-Standby-Modus verwenden, und es ist ein sehr guter Ausgangspunkt, um PostgreSQL im Detail zu lernen.

Was wir tun werden:

  1. PostgreSQL 9.6 installieren.
  2. UFW-Firewall konfigurieren.
  3. MASTER-Server konfigurieren.
  4. SLAVE-Server konfigurieren.
  5. PostgreSQL-Daten vom MASTER zum SLAVE kopieren.
  6. Testen.

Voraussetzungen:

  • 1 Ubuntu 16.04-Server - MASTER - Erlaubt Lesen und Schreiben - IP: 10.0.15.10
  • 1 Ubuntu 16.04-Server - SLAVE - Nur Lesen - IP: 10.0.15.11
  • Root-Rechte

Schritt 1 - PostgreSQL 9.6 installieren

In diesem Tutorial werden wir die neueste Version von PostgreSQL 9.6 installieren. Im offiziellen Ubuntu-Repository wird nur PostgreSQL 9.5 bereitgestellt, daher müssen wir die neueste Version direkt aus dem PostgreSQL-Repository installieren.

Fügen Sie das PostgreSQL 9.6-Repository zum Verzeichnis sources.list.d hinzu.

echo 'deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main' | tee /etc/apt/sources.list.d/postgresql.list

Und importieren Sie den PostgreSQL-Signaturschlüssel in das System.

wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

Aktualisieren Sie nun das System-Repository mit dem apt-Befehl.

apt-get update

Installieren Sie als Nächstes das PostgreSQL 9.6-Paket mit dem folgenden apt-Befehl.

apt-get install -y postgresql-9.6 postgresql-contrib-9.6

Wenn die Installation abgeschlossen ist, fügen Sie sie hinzu, um beim Booten automatisch zu starten.

systemctl enable postgresql

Standardmäßig läuft PostgreSQL auf der localhost (127.0.0.1) IP-Adresse mit Port 5432 auf Ubuntu, überprüfen Sie dies mit dem netstat-Befehl.

netstat -plntu

Überprüfen, ob Postgres läuft

PostgreSQL 9.6 läuft auf dem System. Im nächsten Schritt müssen wir ein Passwort für den postgres-Benutzer konfigurieren.

Melden Sie sich mit dem Root-Konto beim postgres-Benutzer mit dem su-Befehl an und greifen Sie dann auf das Front-End-Terminal psql von postgres zu.

su - postgres  
psql

Bitte ändern Sie das Passwort für den postgres-Benutzer und überprüfen Sie die Verbindungsinformationen mit den folgenden postgres-Abfragen.

\password postgres  
\conninfo

Passwort für Postgres ändern

PostgreSQL 9.6 wurde auf dem System installiert, läuft fehlerfrei und das Passwort für den postgres-Benutzer wurde aktualisiert.

Schritt 2 - UFW-Firewall konfigurieren

UFW oder Uncomplicated Firewall ist eine Anwendung zur Verwaltung der auf iptables basierenden Firewall auf Ubuntu. UFW ist das Standard-Tool zur Konfiguration der Firewall für Ubuntu Linux und bietet eine benutzerfreundliche Möglichkeit zur Konfiguration der Firewall.

Wir können ufw aus dem Haupt-Ubuntu-Repository mit dem apt-Befehl installieren.

apt-get install -y ufw

Fügen Sie neue Dienste zur UFW-Firewall hinzu: Fügen Sie SSH- und PostgreSQL-Dienste mit den folgenden Befehlen hinzu.

ufw allow ssh  
ufw allow postgresql

Aktivieren Sie die UFW-Firewall und überprüfen Sie den Status.

ufw enable  
ufw status

UFW-Firewall installieren und überprüfen

Die UFW-Firewall wurde installiert und der PostgreSQL-Dienst wurde hinzugefügt.

HINWEIS:

Führen Sie Schritt 1 und Schritt 2 auf dem MASTER- und SLAVE-Server aus.

Schritt 3 - Konfigurieren des PostgreSQL MASTER-Servers

Der Master-Server hat die IP-Adresse 10.0.15.10, und der postgres-Dienst wird unter dieser IP mit dem Standardport ausgeführt. Der Master-Server hat Berechtigungen für das LESEN und SCHREIBEN in der Datenbank und führt die Streaming-Replikation zum Slave-Server durch.

Gehen Sie zum Konfigurationsverzeichnis von postgres ‘/etc/postgresql/9.6/main‘ und bearbeiten Sie die postgresql.conf-Datei mit vim.

cd /etc/postgresql/9.6/main/  
vim postgresql.conf

Kommentieren Sie die Zeile ‘listen_addresses’ aus und ändern Sie den Wert auf die IP-Adresse des Master-Servers ‘10.0.15.10‘.

listen_addresses = '10.0.15.10'

Kommentieren Sie die Zeile ‘wal_level’ aus und ändern Sie den Wert auf ‘hot_standby‘.

wal_level = hot_standby

Für die Synchronisierungsstufe verwenden wir lokale Synchronisierung. Kommentieren Sie die Zeile aus und ändern Sie den Wert wie folgt.

synchronous_commit = local

Aktivieren Sie den Archivierungsmodus und ändern Sie die Option archive_command in den Befehl ‘cp %p /var/lib/postgresql/9.6/main/archive/%f’.

archive_mode = on  
archive_command = 'cp %p /var/lib/postgresql/9.6/main/archive/%f'

Für die ‘Replikation’-Einstellungen verwenden wir in diesem Tutorial nur 2 Server, Master und Slave, kommentieren Sie die Zeile ‘wal_sender‘ aus und ändern Sie den Wert auf 2, und für den Wert ‘wal_keep_segments‘ ist 10.

max_wal_senders = 2  
wal_keep_segments = 10

Für den Anwendungsnamen kommentieren Sie die Zeile ‘synchronous_standby_names’ aus und ändern Sie den Wert auf den Namen ‘pgslave001‘.

synchronous_standby_names = 'pgslave001'

Speichern Sie die Datei und beenden Sie den Editor.

In der postgresql.conf-Datei ist der Archivmodus aktiviert, daher müssen wir ein neues Verzeichnis für das Archiv erstellen. Erstellen Sie ein neues Archivverzeichnis, ändern Sie die Berechtigung und ändern Sie den Besitzer in den postgres-Benutzer.

mkdir -p /var/lib/postgresql/9.6/main/archive/  
chmod 700 /var/lib/postgresql/9.6/main/archive/  
chown -R postgres:postgres /var/lib/postgresql/9.6/main/archive/

Als Nächstes bearbeiten Sie die pg_hba.conf-Datei für die Authentifizierungskonfiguration.

vim pg_hba.conf

Fügen Sie die folgende Konfiguration am Ende der Zeile ein.

# Localhost  
host    replication     replica          127.0.0.1/32            md5  
   
# PostgreSQL Master IP-Adresse  
host    replication     replica          10.0.15.10/32            md5  
   
# PostgreSQL Slave IP-Adresse  
host    replication     replica          10.0.15.11/32            md5

Speichern und beenden Sie, und starten Sie dann PostgreSQL neu.

systemctl restart postgresql

PostgreSQL läuft unter der IP-Adresse 10.0.15.10, überprüfen Sie dies mit dem netstat-Befehl.

netstat -plntu

Postgres-Replikation konfigurieren

Als Nächstes erstellen Sie einen neuen Benutzer für die Replikation. Wir werden einen neuen Benutzer namens ‘replica‘ mit dem Passwort ‘aqwe123@‘ erstellen. Bitte wählen Sie hier ein sicheres Passwort für Ihre Einrichtung! Melden Sie sich beim postgres-Benutzer an und greifen Sie auf das Front-End-Terminal psql von postgres zu.

su - postgres  
psql

Erstellen Sie den neuen Benutzer ‘replica‘ mit dem Passwort ‘aqwe123@‘ mit der folgenden postgres-Abfrage.

CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'aqwe123@';

Überprüfen Sie nun den neuen Benutzer mit der ‘du‘-Abfrage unten, und Sie werden den Benutzer replica mit Replikationsberechtigungen sehen.

\du

Postgres-Replikationsbenutzer erstellen

Die Konfiguration des MASTER-Servers ist abgeschlossen.

Schritt 4 - SLAVE-Server konfigurieren

Der SLAVE-Server hat die IP-Adresse 10.0.15.11. Und dieser Server hat nur Lesezugriff auf die Datenbank. Der Postgres-Datenbankserver wird unter der IP-Adresse des Servers ausgeführt, nicht unter einer localhost-IP.

Stoppen Sie den postgres-Dienst auf dem Slave-Server mit dem folgenden systemctl-Befehl.

systemctl stop postgresql

Gehen Sie zum Postgres-Konfigurationsverzeichnis ‘/etc/postgresql/9.6/main‘, und bearbeiten Sie die Konfigurationsdatei ‘postgresql.conf‘.

cd /etc/postgresql/9.6/main/  
vim postgresql.conf

Kommentieren Sie die Zeile listen_addresses aus und ersetzen Sie den Wert durch die IP-Adresse des Slave-Servers 10.0.15.11.

listen_addresses = '10.0.15.11'

Kommentieren Sie die Zeile ‘wal_level’ aus und ändern Sie den Wert auf ‘hot_standby‘.

wal_level = hot_standby

Für die Synchronisierungsstufe kommentieren Sie die Zeile synchronous_commit aus und ändern Sie den Wert wie unten gezeigt.

synchronous_commit = local

Für die Replikationseinstellung kommentieren Sie die Zeile max_wal_senders aus und ersetzen Sie den Wert durch ‘2‘, da nur 2 Server verwendet werden. Und für wal_keep_segments ändern Sie den Wert auf ‘10‘.

max_wal_senders = 2  
wal_keep_segments = 10

Kommentieren Sie die Zeile ‘synchronous_standby_names’ für den Anwendungsnamen aus und ändern Sie den Wert auf den Namen ‘pgslave001‘.

synchronous_standby_names = 'pgslave001'

Aktivieren Sie hot_standby für den Slave-Server, indem Sie die folgende Zeile auskommentieren und den Wert auf ‘on‘ ändern.

hot_standby = on

Speichern Sie die Datei und beenden Sie den Editor.

Schritt 5 - PostgreSQL-Daten vom MASTER zum SLAVE kopieren

Als Nächstes möchten wir das Hauptverzeichnis von postgres auf dem ‘SLAVE‘-Server durch das Hauptdatenverzeichnis des ‘MASTER‘-Servers ersetzen.

Melden Sie sich beim SLAVE-Server an und greifen Sie auf den postgres-Benutzer zu.

su - postgres

Gehen Sie zum Datenverzeichnis von postgres ‘main‘ und sichern Sie es, indem Sie den Verzeichnisnamen umbenennen.

cd 9.6/  
mv main main-bekup

Erstellen Sie ein neues Verzeichnis ‘main‘ als ‘postgres‘-Benutzer und stellen Sie sicher, dass die Berechtigung wie das Hauptverzeichnis ‘main-bekup’ ist.

mkdir main/  
chmod 700 main/

Als Nächstes kopieren Sie das Hauptverzeichnis vom MASTER-Server auf den SLAVE-Server mit dem pg_basebackup-Befehl, wir werden den Benutzer replica verwenden, um diese Datenkopie durchzuführen.

pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/postgresql/9.6/main -P --xlog  
Password:

Wenn die Datenübertragung abgeschlossen ist, gehen Sie zum Hauptdatenverzeichnis und erstellen Sie eine neue recovery.conf-Datei.

cd /var/lib/postgresql/9.6/main/  
vim recovery.conf

Fügen Sie die folgende Konfiguration ein:

standby_mode = 'on'  
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica password=aqwe123@ application_name=pgslave001'  
restore_command = 'cp /var/lib/postgresql/9.6/main/archive/%f %p'  
trigger_file = '/tmp/postgresql.trigger.5432'

Speichern und beenden Sie, ändern Sie dann die Berechtigungen der Datei auf 600 mit chmod.

chmod 600 recovery.conf

Einrichten des Postgres-Slave-Servers

Starten Sie nun PostgreSQL 9.6 auf dem SLAVE-Server und stellen Sie sicher, dass der postgres-Dienst unter der IP-Adresse 10.0.15.11 mit netstat läuft.

systemctl start postgresql  
netstat -plntu

Die Datenübertragung und Konfiguration für den SLAVE-Server sind abgeschlossen.

Schritt 6 - Testen

Zum Testen werden wir den Replikationsstatus von PostgreSQL 9.6 überprüfen und versuchen, eine neue Tabelle auf dem MASTER-Server zu erstellen, und dann die Replikation überprüfen, indem wir alle Daten vom SLAVE-Server abrufen.

Melden Sie sich beim MASTER-Server an und beim postgres-Benutzer an.

su - postgres

Führen Sie die folgenden psql-Befehle aus, um den Replikationsstatus zu sehen.

psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"  
psql -x -c "select * from pg_stat_replication;"

Sie erhalten die Ergebnisse wie unten.

Überprüfen des Postgres-Replikationsstatus

Versuchen Sie als Nächstes, eine neue Tabelle vom MASTER-Server zu erstellen. Melden Sie sich beim postgres-Benutzer auf dem Master-Server an.

su - postgres  
psql

Und erstellen Sie eine neue Tabelle mit dem Namen ‘replica_test‘ und fügen Sie Daten in die Tabelle ein, indem Sie die folgenden postgres-Abfragen ausführen.

CREATE TABLE replica_test (hakase varchar(100));  
INSERT INTO replica_test VALUES ('howtoforge.com');  
INSERT INTO replica_test VALUES ('Dies ist vom Master');  
INSERT INTO replica_test VALUES ('pg-Replikation von hakase-labs');

Fügen Sie einige Testdaten hinzu

Melden Sie sich als Nächstes beim postgres-Benutzer auf dem SLAVE-Server an und greifen Sie auf das psql-Terminal zu.

su - postgres  
psql

Überprüfen Sie die Daten in der Tabelle ‘replica_test‘ mit der folgenden postgres-Abfrage.

select * from replica_test;

Und Sie erhalten dieselben Daten wie auf dem MASTER, sie wurden vom MASTER-Server auf den SLAVE-Server repliziert.

Überprüfen der Datenreplikation

Zusätzlicher Test:

Testen Sie das Schreiben auf dem SLAVE-Server mit der folgenden Abfrage.

INSERT INTO replica_test VALUES ('dies ist SLAVE');

Und Sie erhalten eine Fehlermeldung über die Abfrage ‘Kann INSERT nicht ausführen‘ auf dem SLAVE-Server.

Die Installation und Konfiguration von PostgreSQL 9.6 mit Master-Slave-Replikation auf Ubuntu 16.04 Xenial Xerus war erfolgreich.

Referenz

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.