GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

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

PostgreSQL oder Postgres ist ein objektrelationales Open-Source-Datenbankverwaltungssystem (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 Vorgang 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 Rechner zu verteilen, sodass bei einem Problem des Master-Servers ein Backup-Rechner mit denselben 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 Datenbankservers mit hoher Verfügbarkeit 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 gründlich zu lernen.

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 vom MASTER zum SLAVE.
  6. Testen.

Voraussetzung:

  • 1 Ubuntu 16.04-Server
    • MEISTER - Lesen und Schreiben zulassen - IP:10.0.15.10
  • 1 Ubuntu 16.04-Server
    • SKLAVE - Nur Lesen - IP:10.0.15.11
  • Root-Berechtigungen

Schritt 1 – PostgreSQL 9.6 installieren

In diesem Tutorial installieren wir die neueste Version von PostgreSQL 9.6. 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 Befehl apt.

apt-get update

Installieren Sie als Nächstes das PosgreSQL 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, damit sie beim Booten automatisch gestartet wird.

systemctl enable postgresql

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

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 vom Root-Konto mit dem Befehl su beim Postgres-Benutzer an und greifen Sie dann auf das Postgres-Front-End-Terminal psql zu.

su - postgres
psql

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

\password postgres
\conninfo

PostgreSQL 9.6 wurde auf dem System installiert, läuft ohne Fehler 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 iptables-basierten Firewall auf Ubuntu. UFW ist das standardmäßige 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 apt-Befehl installieren.

apt-get install -y ufw

Fügen Sie der UFW-Firewall neue Dienste 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

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 Sie den PostgreSQL-MASTER-Server

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 die Berechtigung zum LESEN und SCHREIBEN in die Datenbank und führt eine Streaming-Replikation zum Slave-Server durch.

Wechseln Sie zum Postgres-Konfigurationsverzeichnis '/etc/postgresql/9.6/main ' und bearbeiten Sie die postgresql.conf Datei mit vim.

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

Entkommentieren Sie die Zeile „listen_addresses“ und ändern Sie den Wert in die IP-Adresse des Masterservers „10.0.15.10 '.

listen_addresses = '10.0.15.10'

Kommentieren Sie die Zeile „wal_level“ aus und ändern Sie den Wert in „hot_standby“. '.

wal_level = hot_standby

Für die Synchronisierungsebene verwenden wir die lokale Synchronisierung. Entkommentieren und ändern Sie die Wertzeile wie unten.

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 „wal_sender“ aus ' Zeile und ändern Sie den Wert auf 2 , und für die 'wal_keep_segments ' Wert ist 10 .

max_wal_senders = 2
wal_keep_segments = 10

Kommentieren Sie für den Anwendungsnamen die Zeile „synchronous_standby_names“ aus und ändern Sie den Wert in den Namen „pgslave001 '.

synchronous_standby_names = 'pgslave001'

Speichern Sie die Datei und beenden Sie den Editor.

In der Datei postgresql.conf 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/

Bearbeiten Sie als Nächstes die Datei pg_hba.conf für die Authentifizierungskonfiguration.

vim pg_hba.conf

Konfiguration unten bis zum Ende der Zeile einfügen.

# 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, dann PostgreSQL neu starten.

systemctl restart postgresql

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

netstat -plntu

Erstellen Sie als Nächstes einen neuen Benutzer für die Replikation. Wir werden einen neuen Benutzer mit dem Namen „replica“ erstellen ' mit dem Passwort '[E-Mail geschützt] '. 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-Front-End-Terminal psql zu.

su - postgres
psql

Neues 'Replikat erstellen ' Benutzer mit Passwort '[email protected] ' mit Postgres-Abfrage unten.

CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD '[email protected]';

Überprüfen Sie nun den neuen Benutzer mit 'du ' Abfrage unten, und Sie sehen den Replikatbenutzer mit Replikationsberechtigungen.

\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 eine Leseberechtigung für 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

Wechseln Sie zum Postgres-Konfigurationsverzeichnis '/etc/postgresql/9.6/main ', 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'

Entkommentieren Sie die Zeile „wal_level“ und ändern Sie den Wert in „hot_standby '.

wal_level = hot_standby

Kommentieren Sie für die Synchronisierungsebene die Zeile „synchron_commit“ aus und ändern Sie den Wert wie unten gezeigt.

synchronous_commit = local

Kommentieren Sie für die Replikationseinstellung die Zeile max_wal_senders aus und ersetzen Sie den Wert durch „2 ', weil 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 in 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 wollen wir das Postgres-Hauptverzeichnis auf dem 'SLAVE ersetzen ' Server mit dem Hauptdatenverzeichnis von 'MASTER '-Server.

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

su - postgres

Gehen Sie zum Postgres-Datenverzeichnis „main“. ' und sichern Sie es, indem Sie den Verzeichnisnamen umbenennen.

cd 9.6/
mv main main-bekup

Neues 'main erstellen ' Verzeichnis als 'postgres ' Benutzer und stellen Sie sicher, dass Sie eine Berechtigung wie das Verzeichnis main-bekup haben.

mkdir main/
chmod 700 main/

Als nächstes kopieren Sie mit pg_basebackup das Hauptverzeichnis vom MASTER-Server auf den SLAVE-Server Befehl verwenden wir den Replikatbenutzer, 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 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 Konfiguration unten ein:

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

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

chmod 600 recovery.conf

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

systemctl start postgresql
netstat -plntu

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

Schritt 6 – Testen

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

Melden Sie sich beim MASTER-Server und beim 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 folgt.

Versuchen Sie als Nächstes, vom MASTER-Server aus eine neue Tabelle 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 unten 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');

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 auf 'replica_test ' Tabelle mit Postgres-Abfrage unten.

select * from replica_test;

Und Sie erhalten dieselben Daten wie auf dem MASTER, sie werden 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 ('this is SLAVE');

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

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


Ubuntu
  1. So installieren Sie PostgreSQL unter Ubuntu 18.04

  2. Ubuntu 20.04 PostgreSQL-Installation

  3. Ubuntu 22.04 PostgreSQL-Installation

  4. So installieren Sie einen PostgreSQL-Server unter Ubuntu 18.04

  5. Ubuntu-Server für Dummies

So installieren Sie Plex Media Server auf Ubuntu 20.04 LTS Server/Desktop

So installieren Sie PostgreSQL unter Ubuntu 16.04

So konfigurieren Sie die PostgreSQL 12-Streaming-Replikation in CentOS 8

So installieren Sie OwnCloud unter Ubuntu Linux:Ein Tutorial für Neulinge

Wie richte ich die MySQL-Master-Slave-Replikation auf RHEL 7 ein?

Installieren Sie PostgreSQL auf einem Ubuntu-Server für Sicherheitskonfigurationen