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

PostgreSQL oder Postgres ist ein Open Source objektrelationales 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 des Kopierens (Synchronisierens) 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, so dass bei Problemen des Master-Servers eine Backup-Maschine mit den gleichen Daten zur Verfügung steht, um Anfragen ohne Unterbrechung zu bearbeiten.

PostgreSQL bietet mehrere Möglichkeiten, eine Datenbank zu replizieren. 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 dem Ubuntu 16.04 Server installieren und konfigurieren. Wir werden den Hot Standby-Modus verwenden, und er ist ein sehr guter Ausgangspunkt, um PostgreSQL ausführlich zu erlernen.

Was wir tun werden:

  1. Installieren Sie PostgreSQL 9.6.
  2. UFW Firewall konfigurieren.
  3. MASTER-Server konfigurieren.
  4. SLAVE Server konfigurieren.
  5. Kopieren Sie PostgreSQL-Daten von MASTER nach SLAVE.
  6. Test.

Voraussetzung:

  • 1 Ubuntu 16.04 Server
    • MASTER – Lesen und Schreiben erlauben – IP: 10.0.15.10.10
  • 1 Ubuntu 16.04 Server
    • SLAVE – Nur Lesen – IP: 10.0.15.11
  • Root-Privilegien

Schritt 1 – PostgreSQL 9.6 installieren

In diesem Tutorial werden wir die neueste Version von PostgreSQL 9.6 installieren. Im offiziellen Ubuntu-Repository bieten sie nur PostgreSQL 9.5 an, so dass wir die neueste Version direkt aus dem PostgreSQL-Repository installieren müssen.

Fügen Sie das postgreSQL 9.6-Repository dem 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 Befehl apt.

apt-get update

Als nächstes installieren Sie das PosgreSQL 9.6-Paket mit dem folgenden Befehl apt.

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

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

systemctl enable postgresql

Standardmäßig läuft PostgreSQL auf dem Localhost (127.0.0.0.1) IP-Adresse mit Port 5432 auf Ubuntu, überprüfen Sie es mit dem Befehl netstat.

netstat -plntu

Überprüfen Sie, 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 vom Root-Konto aus mit dem Befehl su beim postgres-Benutzer an und greifen Sie dann auf das postgres-Frontend-Terminal psql zu.

su - postgres
psql

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

\password postgres
\conninfo

Postgres-Passwort ä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 Unkomplizierte Firewall ist eine Anwendung zur Verwaltung der iptables-basierten Firewall auf Ubuntu. UFW ist das Standard-Firewall-Konfigurationstool für Ubuntu Linux und bietet eine benutzerfreundliche Möglichkeit, die Firewall zu konfigurieren.

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

apt-get install -y ufw

Neue Dienste zur UFW-Firewall hinzufügen: SSH- und PostgreSQL-Dienste mit den folgenden Befehlen hinzufügen.

ufw allow ssh
ufw allow postgresql

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

ufw enable
ufw status

Installation und Überprüfung der UFW Firewall

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-Adresse mit Standardport ausgeführt. Der Master-Server hat die Berechtigung für das READ und WRITE auf die Datenbank und führt die Streaming-Replikation auf den Slave-Server durch.

Gehen Sie in das Postgres-Konfigurationsverzeichnis ‚/etc/postgresql/9.6/main‚ und bearbeiten Sie die Datei postgresql.conf mit vim.

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

Entkommentieren Sie die Zeile’listen_addresses‘ und ändern Sie den Wert auf die IP-Adresse des Masterservers‘10.0.15.10.10‚.

listen_addresses = '10.0.15.10'

Entkommentiere die Zeile’wal_level‘ und ändere den Wert auf‘hot_standby‚.

wal_level = hot_standby

Für die Synchronisationsstufe verwenden wir die lokale Synchronisation. Entkommentieren und ändern Sie die Wertezeile wie unten beschrieben.

synchronous_commit = local

Aktivieren Sie den Archivierungsmodus und ändern Sie die Option archive_command auf 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 Einstellungen von’Replication‘ verwenden wir in diesem Tutorial nur 2 Server, Master und Slave, kommentieren die Zeile‘wal_sender‚ nicht und ändern den Wert auf 2, und für den Wert‘wal_keep_segments‚ ist 10.

max_wal_senders = 2
wal_keep_segments = 10

Entkommentieren Sie für den Anwendungsnamen die Zeile’synchronous_standby_names‘ und ändern Sie den Wert in den Namen‘pgslave001‚.

synchronous_standby_names = 'pgslave001'

Speichern Sie die Datei und verlassen Sie den Editor.

In der Datei postgresql.conf ist der Archivmodus aktiviert, so dass wir ein neues Verzeichnis für das Archiv erstellen müssen. Erstellen Sie ein neues Archivverzeichnis, ändern Sie die Berechtigung und ändern Sie den Besitzer auf 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/

Bearbeiten Sie anschließend die Datei pg_hba.conf für die Authentifizierungskonfiguration.

vim pg_hba.conf

Fügen Sie die Konfiguration unten an das Ende der Zeile ein.

# Localhost
host    replication     replica          127.0.0.1/32            md5

# PostgreSQL Master IP address
host    replication     replica          10.0.15.10/32            md5

# PostgreSQL SLave IP address
host    replication     replica          10.0.15.11/32            md5

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

systemctl restart postgresql

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

netstat -plntu

Konfigurieren der Postgres-Replikation

Legen Sie anschließend einen neuen Benutzer für die Replikation an. Wir werden einen neuen Benutzer namens‘replica‚ mit dem Passwort‘aqwe123@‚ anlegen. Bitte wählen Sie hier ein sicheres Passwort für Ihr Setup! Melden Sie sich beim postgres-Benutzer an und greifen Sie auf das postgres-Frontend-Terminal psql zu.

su - postgres
psql

Erstellen Sie einen neuen ‚replikat‚ Benutzer mit Passwort ‚aqwe123@‚ mit Postgres-Abfrage unten.

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

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

\du

Benutzer für die Postgres-Replikation 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 eine READ-Berechtigung für die Datenbank. Der Postgres-Datenbankserver läuft unter der IP-Adresse des Servers und nicht unter einer Localhost-IP.

Stoppen Sie den Postgres-Dienst auf dem Slave-Server mit dem Befehl systemctl unten.

systemctl stop postgresql

Gehen Sie in das Postgres-Konfigurationsverzeichnis ‚/etc/postgresql/9.6/main‚ und bearbeiten Sie dann die Konfigurationsdatei ‚postgresql.conf‚.

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

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

listen_addresses = '10.0.15.11'

Entkommentiere die Zeile’wal_level‘ und ändere den Wert auf‘hot_standby‚.

wal_level = hot_standby

Entkommentieren Sie für die Synchronisationsstufe die Zeile synchronous_commit und ändern Sie den Wert wie unten gezeigt.

synchronous_commit = local

Entkommentieren Sie für die Replikationseinstellung die Zeile max_wal_senders und ersetzen Sie den Wert durch‘2‚, da Sie einfach 2 Server verwenden. Und für die wal_keep_segments ändern Sie den Wert auf‘10‚.

max_wal_senders = 2
wal_keep_segments = 10

Entkommentieren Sie die Zeile’synchronous_standby_names‘ für den Anwendungsnamen 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 verlassen Sie den Editor.

Schritt 5 – Kopieren von PostgreSQL-Daten vom MASTER in den SLAVE

Als nächstes wollen wir das Postgres-Hauptverzeichnis auf dem‘SLAVE‚-Server durch das Hauptdatenverzeichnis des‘MASTER‚-Servers ersetzen.

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

su - postgres

Gehen Sie in das Postgres-Datenverzeichnis ‚main‚ und sichern Sie es, indem Sie den Verzeichnisnamen umbenennen.

cd 9.6/
mv main main-bekup

Erstelle ein neues ‚main‚-Verzeichnis als ‚postgres‚-Benutzer und stelle sicher, dass du eine Berechtigung wie das main-bekup-Verzeichnis hast.

mkdir main/
chmod 700 main/

Als nächstes kopieren Sie das Hauptverzeichnis vom MASTER-Server auf den SLAVE-Server mit dem Befehl pg_basebackup, wir werden den Replikatbenutzer 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 der Datentransfer abgeschlossen ist, gehen Sie in das Hauptdatenverzeichnis und erstellen Sie eine neue recovery.conf-Datei.

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

Fügen Sie die untenstehende 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 die Datei und ändern Sie dann die Berechtigungen der Datei mit chmod auf 600.

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

Der Datentransfer und die Konfiguration für den SLAVE-Server ist abgeschlossen.

Schritt 6 – Prüfung

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

Melden Sie sich am MASTER-Server an und melden Sie sich am postgres-Benutzer an.

su - postgres

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

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 beschrieben.

Überprüfen des Status der Postgres-Replikation

Als nächstes versuchen Sie, 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 untenstehende Postgres-Abfragen ausführen.

CREATE TABLE replica_test (hakase varchar(100));
INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT INTO replica_test VALUES ('This is from Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');

Fügen Sie einige Testdaten hinzu

Als nächstes melden Sie sich beim postgres-Benutzer auf dem SLAVE-Server an und greifen auf das psql-Terminal zu.

su - postgres
psql

Überprüfen Sie die Daten in der Tabelle‘replica_test‚ mit der Postgres-Abfrage unten.

select * from replica_test;

Und Sie erhalten die gleichen Daten wie beim MASTER, er wird vom MASTER-Server auf den SLAVE-Server repliziert.

Datenreplikation prüfen

Zusätzlicher Test:

Testen Sie mit der folgenden Abfrage, ob Sie auf dem SLAVE-Server schreiben möchten.

INSERT INTO replica_test VALUES ('this is SLAVE');

Und Sie erhalten eine Fehlermeldung über die Abfrage‘Cannot execute INSERT‚ auf dem SLAVE-Server.

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

Referenz

Das könnte Dich auch interessieren …