Primärserver für Replikation konfigurieren
In diesem ersten Schritt konfigurieren Sie den primären PostgreSQL-Server, um ihn für die Replikation vorzubereiten. Dies beinhaltet die Änderung seiner Konfigurationsdateien, um Netzwerkverbindungen zuzulassen, das erforderliche Write-Ahead Log (WAL)-Level zu aktivieren und einen speziellen Benutzer für die Replikation zu erstellen.
1. Ändern der PostgreSQL-Konfigurationsdatei
Um sich auf die Replikation vorzubereiten, müssen Sie die Hauptkonfigurationsdatei, postgresql.conf, ändern. Das manuelle Bearbeiten dieser großen Datei mit einem Texteditor wie nano kann aufgrund der vielen Optionen schwierig und fehleranfällig sein. Eine effizientere und zuverlässigere Methode ist die Verwendung von Befehlszeilentools, um die spezifischen Einstellungen, die Sie ändern müssen, anzuzeigen und zu aktualisieren. Dies vermeidet das Durchscrollen von Hunderten von Zeilen und verhindert versehentliche Fehler.
Zuerst überprüfen wir die aktuellen Werte der Einstellungen, die wir ändern müssen: listen_addresses, wal_level und max_wal_senders.
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
echo "--- Aktuelle Einstellungen ---"
sudo grep -E "^#?\s*(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
Sie werden wahrscheinlich sehen, dass diese Zeilen mit einem # auskommentiert sind.
Nun aktualisieren wir diese Einstellungen automatisch. Die folgenden Befehle sichern die Konfigurationsdatei und aktualisieren dann jeden erforderlichen Parameter.
CONF_FILE="/etc/postgresql/14/main/postgresql.conf"
## Erstellen Sie ein Backup, bevor Sie Änderungen vornehmen
sudo cp $CONF_FILE ${CONF_FILE}.bak.$(date +%s)
## Setzen Sie listen_addresses auf '*' , um Verbindungen von jeder IP-Adresse zuzulassen
sudo sed -i -E "s/^[#\s]*listen_addresses\s*=.*/listen_addresses = '*'/" "$CONF_FILE"
## Setzen Sie wal_level auf 'replica', um Replikationsprotokolle zu aktivieren
sudo sed -i -E "s/^[#\s]*wal_level\s*=.*/wal_level = replica/" "$CONF_FILE"
## Setzen Sie die maximale Anzahl gleichzeitiger Replikationsverbindungen
sudo sed -i -E "s/^[#\s]*max_wal_senders\s*=.*/max_wal_senders = 10/" "$CONF_FILE"
Schließlich überprüfen wir, ob die Änderungen korrekt angewendet wurden. Der folgende Befehl zeigt die neuen Werte an und filtert auskommentierte Zeilen heraus.
echo "--- Überprüfte Einstellungen ---"
sudo grep -E "^(listen_addresses|wal_level|max_wal_senders)" $CONF_FILE
Die Ausgabe sollte die aktualisierte, aktive Konfiguration anzeigen:
listen_addresses = '*'
wal_level = replica
max_wal_senders = 10
Mit diesen bestätigten Einstellungen ist der Server für die nächsten Schritte richtig konfiguriert.
2. Erstellen eines dedizierten Replikationsbenutzers
Es ist eine bewährte Methode, einen dedizierten Benutzer für die Replikation anstelle eines Superusers zu verwenden. Lassen Sie uns eine Rolle namens replicator erstellen.
Verbinden Sie sich mit PostgreSQL über den psql-Befehlszeilenclient:
sudo -u postgres psql
Führen Sie nun den folgenden SQL-Befehl aus, um den Benutzer mit Replikationsprivilegien und einem Passwort zu erstellen:
CREATE ROLE replicator WITH REPLICATION LOGIN PASSWORD 'replicapass';
Sie sollten die Ausgabe CREATE ROLE sehen. Beenden Sie nun den psql-Client:
\q
3. Zulassen der Replikationsverbindung
Als Nächstes müssen Sie den Server so konfigurieren, dass der replicator-Benutzer eine Verbindung vom Replikserver herstellen kann. Dies geschieht durch Bearbeiten der Datei pg_hba.conf.
Öffnen Sie die Datei mit nano:
sudo nano /etc/postgresql/14/main/pg_hba.conf
Fügen Sie die folgende Zeile am Ende der Datei hinzu. Diese Regel gibt an, dass der Benutzer replicator von jeder IP-Adresse (0.0.0.0/0) eine Verbindung zur Pseudo-Datenbank replication herstellen darf. Für dieses Lab verwenden wir 127.0.0.1/32, da sich beide Server auf derselben Maschine befinden.
host replication replicator 127.0.0.1/32 md5
Drücken Sie Ctrl+X, Y und Enter, um zu speichern und zu beenden.
4. Neustart des Primärservers
Um all diese Konfigurationsänderungen zu übernehmen, müssen Sie den PostgreSQL-Dienst neu starten.
sudo service postgresql restart
Der Primärserver ist nun bereit, Replikationsverbindungen anzunehmen.