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:
- PostgreSQL 9.6 installieren.
- UFW-Firewall konfigurieren.
- MASTER-Server konfigurieren.
- SLAVE-Server konfigurieren.
- PostgreSQL-Daten vom MASTER zum SLAVE kopieren.
- 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.listUnd 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 updateInstallieren Sie als Nächstes das PostgreSQL 9.6-Paket mit dem folgenden apt-Befehl.
apt-get install -y postgresql-9.6 postgresql-contrib-9.6Wenn die Installation abgeschlossen ist, fügen Sie sie hinzu, um beim Booten automatisch zu starten.
systemctl enable postgresqlStandardmäß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
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
psqlBitte ändern Sie das Passwort für den postgres-Benutzer und überprüfen Sie die Verbindungsinformationen mit den folgenden postgres-Abfragen.
\password postgres
\conninfo
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 ufwFü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 postgresqlAktivieren Sie die UFW-Firewall und überprüfen Sie den Status.
ufw enable
ufw status
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.confKommentieren 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_standbyFür die Synchronisierungsstufe verwenden wir lokale Synchronisierung. Kommentieren Sie die Zeile aus und ändern Sie den Wert wie folgt.
synchronous_commit = localAktivieren 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 = 10Fü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.confFü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 md5Speichern und beenden Sie, und starten Sie dann PostgreSQL neu.
systemctl restart postgresqlPostgreSQL läuft unter der IP-Adresse 10.0.15.10, überprüfen Sie dies mit dem netstat-Befehl.
netstat -plntu
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
psqlErstellen 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
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 postgresqlGehen Sie zum Postgres-Konfigurationsverzeichnis ‘/etc/postgresql/9.6/main‘, und bearbeiten Sie die Konfigurationsdatei ‘postgresql.conf‘.
cd /etc/postgresql/9.6/main/
vim postgresql.confKommentieren 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_standbyFür die Synchronisierungsstufe kommentieren Sie die Zeile synchronous_commit aus und ändern Sie den Wert wie unten gezeigt.
synchronous_commit = localFü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 = 10Kommentieren 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 = onSpeichern 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 - postgresGehen Sie zum Datenverzeichnis von postgres ‘main‘ und sichern Sie es, indem Sie den Verzeichnisnamen umbenennen.
cd 9.6/
mv main main-bekupErstellen 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.confFü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
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 - postgresFü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.

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
psqlUnd 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');
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.

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
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.