So richten Sie die physische Replikation mit PostgreSQL ein

So richten Sie die physische Replikation mit PostgreSQL ein
„PostgreSQL ist ein beliebtes Open-Source Relational Database Management-System, das vom operativsten System unterstützt wird. Die Art und Weise, die Kopie der Hauptdatenbank beizubehalten, wird als Replikation bezeichnet. Die Kopie der Hauptdatenbank wird auf den verschiedenen physischen Servern repliziert. Die Replikation erfolgt durch Einstellen der Master-Slave-Konfiguration. Hier fungiert der Master als primäre Instanz und speichert die Hauptkopie der Datenbank, und der Sklave fungiert als sekundäre Instanz, die die identische Kopie der Hauptdatenbank speichert. Der Master arbeitet als Read-Write-Server, und der Slave arbeitet als schreibgeschützte Server. Zwei Arten von Replikationen werden von der PostgreSQL-Datenbank unterstützt, mit. Dies sind physische Streaming -Replikation und logische Replikation. Der Weg zur Einrichtung der physischen oder streaming Replikation mit der PostgreSQL -Datenbank wurde in diesem Tutorial erläutert.”

Physische oder Streaming -Replikation

Die am häufigsten verwendete Replikationslösung ist Schreibschreibe Protokoll (Wal) Versand- oder Streaming -Replikation. Der Standby -Datenbankserver oder Replikations -Slave ist so konfiguriert, dass die Verbindung mit dem Primär-/Master -Server hergestellt wird. Die Wal -Datensätze werden vor dem Ausfüllen der Wal -Datei auf den Standby -Server gestreamt. Die Daten werden standardmäßig in einem asynchronen Modus an den Standby -Server übertragen. Das bedeutet. Dies kann einen Datenverlust verursachen, denn wenn der Master -Server ohne Transaktion abfällt, wird diese Transaktion nicht auf den Standby -Server repliziert.

Die Architektur der physischen Replikation

Ein Hintergrundvorgang, der als Wal -Sender bezeichnet wird. Es akzeptiert eine Anfrage aus dem Standby und streamt die Wal -Aufzeichnungen kontinuierlich in den Standby -Unternehmen. Ein weiterer Hintergrundprozess, der als Wal -Empfänger bezeichnet wird. Die physikalische Replikation kann durch das folgende Diagramm definiert werden.

Physikalische Replikationsfunktionen

Die gesamten Daten eines einzelnen Clusters werden vom physischen Replikationsprozess kopiert, wobei der Cluster die von der PostgreSQL -Datenbank verwaltete Datenbanken ist. Die Quellmaschine wird als primärer Server bezeichnet und der Zielgerät wird als Standby -Server bezeichnet. Einige wichtige Merkmale der physischen Replikation wurden unten erwähnt.

Wal -Dateien

Die geordnete Reihe von Wal -Aufzeichnungen werden vom PostgreSQL -Server generiert. Diese Aufzeichnungen werden mithilfe der physischen Replikation zu einer anderen Maschine transportiert, und die Änderung erfolgt in der lokalen Datenbank. Die Wal -Aufzeichnungen sind in gleich große Dateien unterteilt, die als Wal -Segmente bezeichnet werden. Diese Dateien werden im Verzeichnis pg_wal erstellt, und alte Wal -Dateien werden entfernt, wenn sie nicht mehr benötigt werden.

Heiß, kalt und warmer Standby

Der Hot Standby-Server wird verwendet, um die aktuellen Daten zu speichern und den Clients zu ermöglichen, die schreibgeschützte Transaktion auszuführen. Der Cold Standby Server ist nicht normal im Betrieb und beginnt, wenn ein Fehler auftritt. Der warme Standby -Server funktioniert ähnlich dem Hot Standby -Server, außer dass er die Verbindung mit dem Client nicht herstellen kann.

Wiederherstellungsmodus

Warme und heiße Standby -Server werden im Wiederherstellungsmodus ausgeführt, und Postgres importieren und wendet WAL -Dateien an, die von einem primären Server im Wiederherstellungsmodus generiert werden.

Vorteile der physischen oder Streaming -Replikation

  • Es kann verwendet werden, um die Sicherung der Datenbank beizubehalten, und hilft, die Daten abzurufen, wenn der primäre Server abstürzt.
  • Es ist besser, nur schreibgeschützte Operationen zu verwenden.
  • Es garantiert, dass eine Kopie des letzten Betriebs des Primärservers gespeichert wird.
  • Ein oder mehrere Standby -Server können mit dem Primärserver in Verbindung gebracht werden, und die Protokollinformationen strömen vom primären Server auf alle verbundenen Standby -Server. Wenn einer der Standby -Server aus irgendeinem Grund getrennt oder verzögert wird, wird das Streaming für einen anderen Standby -Server fortgesetzt.
  • Wenn der primäre Server aus irgendeinem Grund getrennt oder heruntergefahren ist, wird es kaum sind, die aktualisierten Daten an den Standby -Server zu senden, bevor Sie absenken.

Nachteile der physischen oder Streaming -Replikation

  • Es repliziert die Daten standardmäßig asynchron. Das bedeutet, dass Wal -Dateien, die nicht auf den Standby -Server kopiert werden. Es ist besser, einen höheren Wert in die wal_keep_segmente einzustellen, um Datenverlust zu verhindern.
  • Es unterstützt keine Replikation zwischen verschiedenen PostgreSQL -Servern.
  • Die Daten sind in dieser Replikation nicht sicherer, da die sensiblen Daten ohne Benutzerauthentifizierung extrahiert werden können.
  • Es schneidet den Befehl nicht ab.
  • Es unterstützt keine Wurztabellen für ausländische Tische, Ansicht und Partition.
  • Es unterstützt keine große Objektreplikation.
  • Es unterstützt kein Datenbankschema und DDL -Befehle.

Physische Replikationsaufbau

In diesem Teil dieses Tutorials wurden die Schritte zur Implementierung der logischen Replikation in der PostgreSQL -Datenbank gezeigt.

Voraussetzungen

Richten Sie die Master- und Replik -Knoten ein

Sie können den Master und die Replik -Knoten auf zwei Arten einstellen. Eine Möglichkeit besteht darin, zwei separate Computer zu verwenden, auf denen das Ubuntu -Betriebssystem installiert ist. Eine andere Möglichkeit besteht darin, zwei virtuelle Maschinen zu verwenden, die auf demselben Computer installiert sind. Der Testprozess des physischen Replikationsprozesses ist einfacher, wenn Sie zwei separate Computer für den Master -Knoten und den Replikatknoten verwenden, da für jeden Computer eine bestimmte IP -Adresse einfach zugewiesen werden kann. Wenn Sie jedoch zwei virtuelle Maschinen auf demselben Computer verwenden, muss die statische IP -Adresse für jede virtuelle Maschine festgelegt werden, und stellen Sie sicher, dass beide virtuellen Maschinen über die statische IP. Ich habe zwei virtuelle Maschinen verwendet, um den physischen Replikationsprozess in diesem Tutorial zu testen. Der Hostname des Master -Knotens wurde auf festgelegt Fahmida-Master, und der Hostname des Replik -Knotens wurde auf festgelegt Fahmida-Slave Hier.

Installieren Sie PostgreSQL sowohl auf Master- als auch auf Replikatknoten

Sie müssen die neueste Version des PostgreSQL -Datenbankservers auf zwei Maschinen installieren, bevor Sie die Schritte dieses Tutorials starten. Postgresql Version 14 wurde in diesem Tutorial verwendet. Führen Sie die folgenden Befehle aus, um die installierte Version des PostgreSQL im Masterknoten zu überprüfen.

Führen Sie den folgenden Befehl aus, um Root -Benutzer zu werden.

$ sudo -i

Führen Sie die folgenden Befehle aus, um sich als Postgres -Benutzer mit Superuser -Berechtigungen anzumelden, und stellen Sie eine Verbindung mit der PostgreSQL -Datenbank her.

$ su - Postgres
$ psql

Die Ausgabe zeigt, dass PostgreSQL Version 14.4 wurde auf Ubuntu Version 22 installiert.04.1.

Sie müssen dieselbe PostgreSQL -Version im Replikatknoten installieren, da die logische Replikation nicht zwischen verschiedenen Versionen des PostgreSQL -Servers eingerichtet werden kann.

Primäre Knotenkonfiguration

Die erforderlichen Konfigurationen für den primären Knoten wurden in diesem Teil des Tutorials gezeigt. Die folgenden Aufgaben werden im primären Knoten erledigt.

  • Ändern Sie die PostgreSQL.Conf -Datei, um die IP -Adresse und die Wal Level einzurichten.
  • Erstellen Sie eine Rolle des Benutzers mit diesem Passwort, um eine Verbindung mit dem primären Knoten aus dem Replikatknoten herzustellen.
  • Ändern Sie PG_HBA.Conf -Datei zum Hinzufügen von Netzwerkverbindungsinformationen

Modifiziere den PostgreSQL.Conf Datei

Sie müssen die IP -Adresse des Primärknotens in der benannten PostgreSQL -Konfigurationsdatei einrichten PostgreSQL.Conf Das befindet sich am Standort, /etc/postgresql/14/main/postgresql.Conf. Melden Sie sich im primären Knoten als Root -Benutzer an und führen Sie den folgenden Befehl aus, um die Datei zu bearbeiten.

$ nano/etc/postgresql/14/main/postgresql.Conf

Finden Sie die Listen_addresses Variable in der Datei entfernen. Sie können einen Sternchen (*) oder die IP -Adresse des Primärknotens für diese Variable festlegen. Wenn Sie Sternchen (*) festlegen, hört der primäre Server alle IP -Adressen an. Es wird die spezifische IP -Adresse anhören, wenn die IP -Adresse des Primärservers auf diese Variable festgelegt ist. In diesem Tutorial ist die IP -Adresse des primären Servers, der auf diese Variable festgelegt wurde 192.168.10.5.

listen_addressess = "" "

Als nächstes finden Sie das heraus Wal_level Variable zum Einstellen des Replikationstyps. Hier ist der Wert der Variablen a Replik.

wal_level = replik

Führen Sie den folgenden Befehl aus, um den PostgreSQL -Server neu zu starten, nachdem Sie die geändert haben PostgreSQL.Conf Datei.

$ systemctl restart postgresql

*** Hinweis: Wenn Sie die Konfiguration eingerichtet haben, führen Sie die folgenden Befehle für die PostgreSQL -Version 14 aus.

$ sudo chmod 700 -r/var/lib/postgresql/14/main
$ sudo -i -u postgres
#/usr/lib/postgresql/14/bin/pg_ctl restart -d/var/lib/postgresql/14/Main

Sie können sich nach erfolgreicher Ausführung des obigen Befehls mit dem PostgreSQL -Server verbinden.

Rollen-/Benutzer zur Replikation erstellen

Für die Replikation ist eine Rolle/Benutzer mit spezifischer Berechtigung erforderlich. Führen Sie den folgenden SQL -Befehl aus, um eine Rolle mit dem Benutzer für die Replikation zu erstellen.

# Rollenreplikuser mit Replikations -Anmeldung Passwort '12345' erstellen;

Die folgende Ausgabe wird angezeigt, wenn die Rolle erfolgreich erstellt wird.

Modifiziere den PG_HBA.Conf Datei

Sie müssen die IP -Adresse des Sekundärknotens in der benannten PostgreSQL -Konfigurationsdatei einrichten PG_HBA.Conf Das befindet sich am Standort, /etc/postgresql/14/main/pg_hba.Conf. Melden Sie sich im primären Knoten als Root -Benutzer an und führen Sie den folgenden Befehl aus, um die Datei zu bearbeiten.

$ nano/etc/postgresql/14/main/pg_hba.Conf

Fügen Sie am Ende dieser Datei die folgenden Informationen hinzu.

Host /32 Scram-Sha-256

Die IP des Slave -Servers ist auf “gesetzt“192.168.10.10" Hier. Nach den vorherigen Schritten wurde die folgende Zeile in die Datei hinzugefügt.

Replikationsreplikationsempfänger 192.168.10.10/32 SCRAM-SHA-256

Starten Sie den PostgreSQL -Server neu

Führen Sie den folgenden Befehl aus, um den PostgreSQL -Server als Root -Benutzer neu zu starten.

$ systemctl restart postgresql

Replik -Knotenkonfiguration

Die erforderlichen Aufgaben werden für den Replikatknoten erledigt, in dem die Kopie der Hauptdatenbank gespeichert wird. Der vorhandene Datenbankinhalt des Replikatknoten.

Stoppen Sie den PostgreSQL -Server auf dem Replikatknoten

Führen Sie den folgenden Befehl aus, nachdem Sie sich als Root -Benutzer angemeldet haben, um den PostgreSQL -Server zu stoppen.

$ systemctl stop postgresql

Entfernen Sie den vorhandenen Inhalt des Replikatknotens

Führen Sie den folgenden Befehl aus, um vorhandene Datenbankinhalte aus dem PostgreSQL -Server des Replikatknotens zu entfernen. Es ist für Replikationszwecke erforderlich. Der Replikatknoten wird nach Ausführung des folgenden Befehls in einem schreibgeschützten Modus bearbeitet

$ rm -rf/var/lib/postgresql/14/main/*

Testen des physischen Replikationsprozesses

Sie müssen eine Datenbank mit einem oder mehreren Tabellen im primären Knoten erstellen, um zu testen, ob die physikalische Replikation ordnungsgemäß funktioniert oder nicht. Hier die vorhandene Datenbank benannt Postgres des Primärservers wurde zu Testzwecken verwendet. Wenn Sie möchten, können Sie die Tabelle erstellen, indem Sie eine neue Datenbank erstellen. Die folgenden Aufgaben werden in diesem Teil des Tutorials erledigt.

  • Fügen Sie in der ausgewählten Datenbank des primären Knotens eine neue Tabelle hinzu.
  • Fügen Sie der Tabelle einen Datensatz hinzu.
  • Speichern Sie die Kopie der Datenbank des primären Knotens auf den Replikatknoten.
  • Erstellen Sie eine Tabelle im primären Server

Melden Sie sich in der PostgreSQL -Datenbank des primären Knotens an und führen Sie die folgende SQL -Anweisung aus, um eine zu erstellen Mitarbeiter Tabelle in der vorhandenen Datenbank Postgres. Wenn Sie möchten, können Sie eine neue Datenbank erstellen und die Tabelle erstellen, indem Sie die neue Datenbank auswählen. Ich habe hier keine neue Datenbank erstellt. Die Tabelle wird also in der Standarddatenbank erstellt. Die Tabelle der Mitarbeiter enthält 5 Felder. Dies sind ID, Name, Adresse, E -Mail und Telefon.

# Tabelle Mitarbeiter erstellen (
id serielle Primärschlüssel,
Nennen Sie Varchar (15) nicht null,
Adresstext nicht null,
E -Mail Varchar (30),
Telefon char (14) nicht null);

Führen Sie die folgende SQL -Anweisung aus, um einen Datensatz in die Tabelle einzufügen.

# In Mitarbeiter einfügen (Name, Adresse, E -Mail, Telefon)
Werte ('Farheen Hasan', '12/a, Dhanmondi, Dhaka.',' [email protected] ',' +8801826783423 ');
Führen Sie die folgende SQL -Anweisung aus, um den Inhalt der Tabelle der Mitarbeiter zu lesen.
# Aus den Mitarbeitern auswählen;

Wenn die Tabelle erstellt wird und ein Datensatz erfolgreich in die Tabelle eingefügt wird, wird nach der Ausführung der Auswahl der Abfrage die folgende Ausgabe angezeigt. Ein Datensatz wurde in die Tabelle eingefügt, die in der Ausgabe angezeigt wird.

Kopieren Sie die Datenbank auf einen Replikatserver

Melden Sie sich in der PostgreSQL -Datenbank des Replik -Servers an und führen Sie die folgende SQL -Anweisung aus, um eine Kopie des Postgres Datenbank des primären Servers in den Replikatserver. Nach der Ausführung der Anweisung werden nach dem Passwort des Benutzers gefragt, das im vorherigen Schritt erstellt wurde. Wenn die Authentifizierung erfolgreich durchgeführt wird, wird die Replikation gestartet.

# pg_baseBackup -r -h 192.168.10.5 -U ReplicaUser -d/var/lib/postgresql/14/main -p

Die folgende Ausgabe zeigt, dass die Replikation erfolgreich durchgeführt wird und 34962 kb kopiert wurde.

Führen Sie den folgenden Befehl aus, nachdem Sie die Replikation als Root -Benutzer abgeschlossen haben, um den PostgreSQL -Server im Replikatknoten neu zu starten.

$ systemctl restart postgresql

Melden Sie sich nun beim PostgreSQL -Server auf dem Replikatknoten an und führen Sie die folgende SQL -Anweisung aus, um zu überprüfen, ob die Mitarbeiter' Die Tabelle wurde in den Replikatknoten kopiert oder nicht.

# aus den Mitarbeitern auswählen;

Die folgende Ausgabe zeigt den Inhalt des Mitarbeiter' Tabelle der Replik Der Knoten ist der gleiche wie der Inhalt des Mitarbeiter' Tabelle der primär Knoten.

Sie können einen oder mehrere Datensätze hinzufügen oder Datensätze aktualisieren oder Datensätze in der Tabelle der Mitarbeiter des Primärknotens löschen oder in der ausgewählten Datenbank des Primärknotens eine oder mehrere Tabellen hinzufügen und die Datenbank des Replikatknotens überprüfen, um zu überprüfen der primären Datenbank wird in der Datenbank des Replikatknotens ordnungsgemäß repliziert oder nicht.

Fügen Sie neue Datensätze in den primären Knoten ein:

Fügen Sie nun den folgenden Einfügungsbefehl aus, um drei weitere Datensätze in der Tabelle der Mitarbeiter hinzuzufügen Postgres Datenbank, die sich in der befindet primär Knoten.

# In Mitarbeiter einfügen (Name, Adresse, E -Mail, Telefon)
Werte ('Abir Hossain', '10, Jigatola, Dhaka.',' [email protected] ',' +8801888564345 ')),
('Nila Chowdhury', '67/B, Mirpur, Dhaka.',' [email protected] ',' +8801799453123 ')),
('Mizanur Rahman', '8/C, Malibag, Dhaka.',' [email protected] ',' +8801957864564 ');
Führen Sie den folgenden Befehl aus, um den aktuellen Inhalt der Tabelle der Mitarbeiter im primären Knoten zu überprüfen.
# Aus den Mitarbeitern auswählen;

Die folgende Ausgabe zeigt, dass drei neue Datensätze ordnungsgemäß in die Tabelle eingefügt wurden.

Überprüfen Sie den Replikatknoten nach dem Einfügen:

Jetzt müssen Sie überprüfen, ob die Tabelle der Mitarbeiter des Replikatknotens aktualisiert wurde oder nicht. Melden Sie sich beim PostgreSQL -Server des Replikatknotens an und führen Sie den folgenden Befehl aus, um den Inhalt der Tabelle der Mitarbeiter zu überprüfen.

# Aus den Mitarbeitern auswählen;

Die folgende Ausgabe zeigt, dass drei neue Datensätze in die eingefügt wurden Mitarbeiter' Tabelle der Replik Knoten, der in die eingefügt wurde primär Knoten des Mitarbeiter' Tisch. Die Änderungen in der Hauptdatenbank wurden also im Replikatknoten ordnungsgemäß repliziert.

Aktualisieren Sie den Datensatz im primären Knoten:

Führen Sie den folgenden Aktualisierungsbefehl aus, der den Wert des Telefonfelds aktualisiert, in dem der Wert des Namensfelds "Nila Chowdhury" lautet. Es gibt nur einen Rekord in der Mitarbeiter' Tabelle, die dem Zustand der Update -Abfrage entspricht.

# Mitarbeiter aktualisieren, setze Telefon = "+8801911111111", wobei Name = "Nila Chowdhury";

Führen Sie den folgenden Befehl aus, um den aktuellen Inhalt des Mitarbeiter' Tisch in der primär Knoten.

# Aus den Mitarbeitern auswählen;

Die folgende Ausgabe zeigt das das Telefon Der Feldwert des jeweiligen Datensatzes wurde nach Ausführung der Update -Abfrage aktualisiert.

Überprüfen Sie den Replikatknoten nach dem Update:

Jetzt müssen Sie überprüfen, ob die Tabelle der Mitarbeiter des Replikatknotens aktualisiert wurde oder nicht. Melden Sie sich beim PostgreSQL -Server des Replikatknotens an und führen Sie den folgenden Befehl aus, um den Inhalt der Tabelle der Mitarbeiter zu überprüfen.

# Aus den Mitarbeitern auswählen;

Die folgende Ausgabe zeigt, dass ein Datensatz in der aktualisiert wurde Mitarbeiter' Tabelle der Replik Knoten, der in der aktualisiert wurde primär Knoten des Mitarbeiter' Tisch. Die Änderungen in der Hauptdatenbank wurden also im Replikatknoten ordnungsgemäß repliziert.

Datensatz im primären Knoten löschen:

Führen Sie den folgenden Befehl Löschen aus, der einen Datensatz aus dem löscht Mitarbeiter' Tabelle der primär Knoten, wobei der Wert des E -Mail -Felds „abir@gmail ist.com ”. Es gibt nur einen Rekord in der Mitarbeiter' Tabelle, die dem Zustand der Löschabfrage entspricht.

# Löschen Sie von Mitarbeitern, wobei E -Mail = '[email protected] ';

Führen Sie den folgenden Befehl aus, um den aktuellen Inhalt des Mitarbeiter' Tisch in der primär Knoten.

# Aus den Mitarbeitern auswählen;

Die folgende Ausgabe zeigt, dass ein Datensatz nach Ausführung der Löschabfrage gelöscht wurde.

Überprüfen Sie den Replikatknoten, nachdem Sie den Datensatz gelöscht haben:

Jetzt müssen Sie prüfen, ob die Tabelle der Mitarbeiter des Replik -Knotens gelöscht wurde oder nicht. Melden Sie sich beim PostgreSQL -Server des Replikatknotens an und führen Sie den folgenden Befehl aus, um den Inhalt der Tabelle der Mitarbeiter zu überprüfen.

# Aus den Mitarbeitern auswählen;

Die folgende Ausgabe zeigt, dass ein Datensatz in der gelöscht wurde Mitarbeiter' Tabelle der Replik Knoten, der in der gelöscht wurde primär Knoten des Mitarbeiter' Tisch. Die Änderungen in der Hauptdatenbank wurden also im Replikatknoten ordnungsgemäß repliziert.

Abschluss

Der Zweck der physischen Replikation für die Sicherung der Datenbank, die Architektur der physischen Replikation, die Vor- und Nachteile der physischen Replikation und die Schritte zur Implementierung der physischen Replikation in der PostgreSQL -Datenbank wurden in diesem Tutorial mit Beispielen erläutert. Ich hoffe.