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
Nachteile der physischen oder Streaming -Replikation
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.
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 = replikFü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-256Die 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-256Starten 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.
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 (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)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 -pDie 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)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.