Initialisierung / Standby erstellen
Verwenden Sie die Aktion „createstandby“, um eine Primär-/Standby-Umgebung einzurichten. Die folgenden Schritte müssen als Benutzer „root“ ausgeführt werden:
Die Aktion „createstandby“ kann aufgrund eines Neustarts der Datenbank (mögliche automatische Konfigurationsänderung) zu einem kurzen Ausfall des SKOOR-Systems führen. Danach ist das System wieder voll funktionsfähig und zugänglich.
Beachten Sie Folgendes:
Datenbanken mit einer Größe von 100 GB oder mehr benötigen in der Regel mehr WAL-Dateien als die Standardanzahl von 2048. Der Parameter „wal_keep_size“ muss erhöht werden, bevor die Replikation initialisiert werden kann:
vi /var/lib/pgsql/data/postgresql.skoor.conf
Ändern Sie den Parameter (der Wert kann größer als 4096 sein, berücksichtigen Sie dabei den freien Speicherplatz auf der Festplatte):
wal_keep_size = 4096
Das Skript synchronisiert die DB-Tabellen vom Primär- zum Standby-Server. Überprüfen Sie die Größe der gesamten Datenbank mit:
du -sh /var/lib/pgsql
Es ist sehr wahrscheinlich, dass mehrere Gigabyte an Daten übertragen werden müssen. In diesem Fall sollte die Initialisierung der Replikation am besten abends erfolgen.
Bei einer erneuten Initialisierung werden nicht alle Dateien kopiert. Wenn eine Initialisierung bereits einmal mit `createstandby` durchgeführt wurde, diese aber wiederholt werden muss, weil die Replikation aus irgendeinem Grund unterbrochen wurde, werden deutlich weniger Daten vom Primär- zum Standby-Server übertragen.
Allerdings muss jede Datenbankdatei auf beiden Seiten anhand der Prüfsumme verglichen werden, damit der Replikationsmechanismus feststellen kann, welche Dateien übertragen werden müssen. Eine Synchronisierung, die sich ausschließlich auf die Größe der Datenbankdateien und deren Änderungszeiten stützt, ist nicht zuverlässig genug. Daher muss vor Beginn der eigentlichen Synchronisierung die gesamte Datenbank auf beiden Seiten auf ihre Prüfsumme überprüft werden, was je nach Host-Leistung und Datenbankgröße mehrere Stunden dauern kann.
Es empfiehlt sich, vor dem Start der Initialisierung eine vollständige Sicherung auf dem aktuell aktiven System durchzuführen. Dies kann mit dem folgenden Befehl erfolgen:
cd /var/lib/pgsql
sudo -u postgres bash -l -c '/opt/eranger/bin/eranger-server-backup.sh full'
wodurch eine vollständige Sicherung in /opt/eranger/Server/backups/ gespeichert wird.
Um die Initialisierung zu starten, muss der Befehl `createstandby` auf dem Primärserver ausgeführt werden. Da dieser Befehl je nach der zu übertragenden Datenmenge und der Netzwerkbandbreite zwischen Primär- und Standby-Server mehrere Stunden laufen kann, wird empfohlen, den Befehl innerhalb einer Screen-Sitzung auszuführen. Der Befehl `screen` ermöglicht es, einen Befehl remote auszuführen, ohne dass dieser abgebrochen wird, falls die Verbindung zum Remote-Host aus irgendeinem Grund unterbrochen wird. Starten Sie auf dem Primärserver als Root eine neue Screen-Sitzung (mit einem ausreichend großen History-Scrollback-Puffer) mit dem folgenden Befehl:
screen -h 10000
Führen Sie dann innerhalb dieser Screen-Sitzung den folgenden Befehl aus, um den Initialisierungsprozess des Standby-Servers zu starten:
/opt/eranger/bin/eranger-server-replication.pl createstandby
Im Folgenden finden Sie ein Beispiel für die Ausgabe des oben genannten Befehls:
192.168.56.221 prepare standby system 192.168.56.222 (primary system 192.168.56.221).. 192.168.56.221 192.168.56.221 192.168.56.221 ============================================================ 192.168.56.221 == Setting up standby system on 192.168.56.222 192.168.56.221 == THIS WILL DESTROY DATABASE on 192.168.56.222 192.168.56.221 == make sure you have a backup 192.168.56.221 ============================================================ 192.168.56.221 192.168.56.221 if you continue, we will call above command with ssh press ENTER to continue, Ctrl-C to abort >
Drücken Sie die Eingabetaste, um fortzufahren. Die folgende Ausgabe wird angezeigt:
192.168.56.221 checking ssh for user reranger 192.168.56.222 stopped skoor syncfs Removed symlink /etc/systemd/system/multi-user.target.wants/eranger-server.service. Removed symlink /etc/systemd/system/multi-user.target.wants/eranger-report.service. 192.168.56.221 restart postgresql-17.service.. 192.168.56.221 SKOOR Engine start httpd at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 httpd already running (not starting) 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-report at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 eranger-report already running (not starting) 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-server at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 eranger-server already running (not starting) 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-ethd at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 start eranger-ethd (service eranger-ethd ).. 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-eth-alerter at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 start eranger-eth-alerter (service eranger-eth-alerter ).. 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-collector at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 eranger-collector already running (not starting) 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-agent at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 eranger-agent already running (not starting) 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-ic-alerter at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 start eranger-ic-alerter (service eranger-ic-alerter ).. 192.168.56.221 done 192.168.56.221 copied file to /var/lib/pgsql/13/data/ 192.168.56.221 copied file to /var/lib/pgsql/data/ng_tblspc/ 192.168.56.221 rsync done NOTICE: all required WAL segments have been archived 192.168.56.222 stopped skoor syncfs 192.168.56.222 Enable and start eranger-replication-tunnel.service at /opt/eranger/bin/eranger-server-replication.pl line 1751. 192.168.56.221 started skoor syncfs
Der Befehl `createstandby` kann auch im nicht-interaktiven Modus mit dem Parameter `-f` ausgeführt werden. In diesem Fall ist die Ausgabe kürzer:
Bitte beachten Sie, dass dieser Befehl dieses System zum Primärserver macht und die Datenbank auf dem anderen Knoten sofort löscht
# eranger-server-replication.pl -f createstandby 192.168.56.221 prepare standby system 192.168.56.222 (primary system 192.168.56.221).. 192.168.56.221 192.168.56.221 checking ssh for user reranger 192.168.56.222 stopped skoor syncfs 192.168.56.221 restart postgresql-17.service.. 192.168.56.221 SKOOR Engine start httpd at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 httpd already running (not starting) 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-report at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 eranger-report already running (not starting) 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-server at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 eranger-server already running (not starting) 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-ethd at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 start eranger-ethd (service eranger-ethd ).. 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-eth-alerter at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 start eranger-eth-alerter (service eranger-eth-alerter ).. 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-collector at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 eranger-collector already running (not starting) 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-agent at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 eranger-agent already running (not starting) 192.168.56.221 done 192.168.56.221 SKOOR Engine start eranger-ic-alerter at /opt/eranger/bin/eranger-server-replication.pl line 1818. 192.168.56.221 start eranger-ic-alerter (service eranger-ic-alerter ).. 192.168.56.221 done 192.168.56.221 copied file to /var/lib/pgsql/13/data/ 192.168.56.221 copied file to /var/lib/pgsql/data/ng_tblspc/ 192.168.56.221 rsync done NOTICE: all required WAL segments have been archived 192.168.56.222 stopped skoor syncfs 192.168.56.222 Enable and start eranger-replication-tunnel.service at /opt/eranger/bin/eranger-server-replication.pl line 1751. 192.168.56.221 started skoor syncfs
Sie können die Screen-Sitzung jederzeit verlassen, indem Sie zuerst „Strg-a“ und dann „d“ drücken. Um die Screen-Sitzung erneut zu öffnen, geben Sie den folgenden Befehl zum Wiederanmelden ein:
screen -h 10000 -r
Das Skript führt Folgendes aus:
Vergleich der Prüfsummen aller Datenbankdateien zwischen Primär- und Standby-Server.
Den eranger-Server-Dienst auf dem Standby-Knoten stoppen, falls er läuft
Die Dateien /var/lib/pgsql/data/recovery.signal und skoor-replication.conf (die in postgresql.skoor.conf enthalten ist) werden auf dem Standby-Knoten erstellt. Diese ermöglichen es dem Standby-Knoten, die IP-Adresse des Primärknotens, den Replikationsport, die Anmeldedaten und den Pfad zur Trigger-Datei zu ermitteln. Nachfolgend finden Sie ein Beispiel für eine skoor-replication.conf-Datei auf dem Standby-Knoten:
primary_conninfo = 'host=10.1.0.88 port=5432 user=replication password=replication' promote_trigger_file = '/tmp/postgresql.trigger.5432'
Die Datei `promote_trigger_file` existiert nicht, wenn die Replikation läuft. Das Erstellen dieser Datei führt zum Beenden der Replikation (z. B. im Falle eines Wechsels/Failovers).
`recovery.signal` ist lediglich eine Markierungsdatei und daher leer.Die Teile der Datenbank, die sich zwischen den beiden Hosts unterscheiden, werden mittels eines rsync-Prozesses über SSH übertragen. Die folgenden Pfade sind vom Synchronisationsprozess ausgeschlossen:
/var/lib/pgsql/data/pg_xlog/ (die Binärprotokolle, d. h. die WAL-Dateien werden während des createstandby-Vorgangs nicht synchronisiert; ihr Inhalt wird erst repliziert, nachdem der createstandby-Prozess gestartet wurde)
/var/lib/pgsql/data/recovery.signal
/var/lib/pgsql/data/skoor-replication.conf
/var/lib/pgsql/data/postmaster.pid
Die Replikation wird gestartet
Während des createstandby-Prozesses kann der Primärserver normal genutzt werden, um Messdaten von Kollektoren zu empfangen. Auch die SKOOR-Weboberfläche kann genutzt werden, allerdings kann die Leistung aufgrund der Prüfsummenberechnungen und der Übertragung großer Dateien über das Netzwerk beeinträchtigt sein.
Die Zeit, die für die erstmalige Initialisierung einer Replikation benötigt wird, hängt hauptsächlich von der Größe der Datenbank, der Netzwerkgeschwindigkeit und der Leistung des Hosts ab.
Jedem Kommentar zur Funktion des Skripts ist die IP-Adresse des Hosts vorangestellt, auf dem die Aufgabe ausgeführt wird.
Nachdem der Befehl ausgeführt wurde, überprüfen Sie seinen Exit-Code. Er sollte Null sein:
... 10.1.0.88 done 10.1.0.88 copied file to /var/lib/pgsql/data/ NOTICE: pg_stop_backup complete, all required WAL segments have been archived # echo $? 0
Die Replikation ist nun gestartet, und von nun an werden alle Datenbankabfragen, die auf dem Primärserver ausgeführt werden, sofort auf den Standby-Server repliziert.