Replikation der BriefCam PostgreSQL-Datenbank
Dieser Abschnitt beschreibt, wie Sie die Replikation der PostgreSQL-Datenbank rationalisieren können.
Voraussetzungen, Hinweise und Konventionen
Anmerkung
Verwenden Sie Windows PowerShell und nicht die Eingabeaufforderung (cmd), wenn Sie Befehle aus den Beispielen in diesem Dokument einfügen.
Wenn der Speicherplatz auf dem Primärserver ausreicht, führen Sie eine vollständige Sicherung der Datenbank durch (mit dem Tool pg_dump), bevor Sie versuchen, das Replikat zu erstellen.
Notieren Sie sich die IP-Adresse des Primärservers. Im weiteren Verlauf dieses Dokuments wird sie als <primäreIP> bezeichnet.
Notieren Sie sich die IP-Adresse des sekundären Servers. Im weiteren Verlauf dieses Dokuments wird sie als <secondaryIP> bezeichnet.
Auf dem PGSQL-Server müssen die folgenden drei BriefCam Installationskomponenten alle entweder auf den Hostnamen oder die IP-Adresse eingestellt werden. Stellen Sie sicher, dass sie alle die gleiche Methode verwenden (um Konsistenz zu gewährleisten). Dazu suchen Sie die PostgreSQL-
connectionStringin den folgenden Dateien oder Einstellungen:VS-Server:
C:\Program Files\BriefCam\BriefCam Server\VSServer.exe.configWeb Services:
C:\Program Files\BriefCam\WebServices\ProWebApi\Web.configQlik (RESEARCH): ODBC 64-bit Einträge (Server field)

Es wird empfohlen, die volle Funktionalität der Systeme zu testen, bevor Sie den sekundären Server erstellen. Achten Sie darauf, dass Sie sich alle Originalwerte der geänderten Parameter notieren.
Stellen Sie auf allen Servern, auf denen die BriefCam-Serverkomponenten eingesetzt werden, die Hosts-Datei so ein, dass sie auf den primären PostgreSQL-Datenbankserver verweist. Dadurch wird der DNS außer Kraft gesetzt.
Öffnen Sie im BriefCam Administrator Consoleden Abschnitt Environment Settings und setzen Sie die Einstellungen DB.LocalStorageAddress und VideoProductsPath so, dass Hostnamen und nicht IP-Adressen verwendet werden.
Die Geschwindigkeit von PostgreSQL base_backup hängt stark von der Umgebungskonfiguration (SSD/HDD/NIC-Geschwindigkeit) ab. Als Faustregel gilt, dass es bei ISCSI-Speicher (10 Gbit/s Links HDD-Array) und 1 Gbit/s Netzwerk-NIC (vmxnet3) in einer virtuellen Umgebung etwa 40 Minuten dauert, um eine Basissicherung der PostgreSQL-Datenbank mit 90 GB BriefCam Daten durchzuführen.
Erwägen Sie, die Geschwindigkeit in der tatsächlichen Umgebung zu testen, um abschätzen zu können, wie lange die Basissicherung dauern wird, damit Sie das Zeitfenster für die Erstellung des Replikats richtig einstellen können.
Verwenden Sie den tatsächlichen Pfad des
PostgreSQL_Data-Verzeichnisses. Die BriefCam istC:\PostgreSQL_Data. Dies kann jedoch bei verschiedenen Einrichtungen variieren (im weiteren Verlauf dieses Dokuments wird der Standard- BriefCam verwendet).Verwenden Sie den tatsächlichen
pgsql.exePfad. Der BriefCam istC:\PostgreSQL\bin\psql.exe(im weiteren Verlauf dieses Themas wird der standardmäßige BriefCam verwendet).
Schritte auf dem Primärserver
Verbinden Sie sich mit der SQL-Shell des primären PostgreSQL-Servers und überprüfen Sie den Speicherort der config- und hba-Dateien, indem Sie die folgenden Befehle ausführen:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres SHOW config_file; SHOW hba_file;Hier ist ein Beispiel für die erwartete Ausgabe (basierend auf dem Speicherort des
PostgreSQL_DataOrdners):C:/PostgreSQL_Data/postgresql.conf C:/PostgreSQL_Data/pg_hba.confSichern Sie die ursprünglichen
config- undhba, indem Sie die folgenden Befehle in PowerShell ausführen:copy C:/PostgreSQL_Data/postgresql.conf C:/PostgreSQL_Data/postgresql.conf.$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))copy C:/PostgreSQL_Data/pg_hba.conf C:/PostgreSQL_Data/pg_hba.conf.$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ"))Überprüfen Sie, ob die Sicherungsdateien erstellt wurden, indem Sie den folgenden Befehl ausführen:
dir C:/PostgreSQL_Data/*.conf.*Die erwartete Ausgabe ist:
PS C:\Users\Administrator> dir C:/PostgreSQL_Data/*.conf.*
Directory: C:\PostgreSQL_Data
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 11/10/2021 11:22 AM 4374 pg_hba.conf.20211117T100109Z
-a---- 11/10/2021 11:25 AM 23798 postgresql.conf.20211117T100344Z
Fügen Sie der
postgres.conf-Datei Parameter hinzu. Dazu öffnen Sie die Datei in einem Texteditor und fügen die folgenden Zeilen am Ende der Datei hinzu (direkt unter demCustomized OptionsAbschnitt):wal_level = replica hot_standby = on hot_standby_feedback = on full_page_writes = on max_wal_senders = 6 max_replication_slots = 6Erstellen Sie eine Rolle/einen Benutzer für die Replikation und legen Sie dessen Passwort fest (verwenden Sie nicht das in den Beispielbefehlen angegebene Passwort).
Verbinden Sie sich über die PowerShell-Konsole mit der SQL-Shell des primären PostgreSQL-Servers, indem Sie den folgenden Befehl ausführen:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresFühren Sie den folgenden Befehl aus (in der im vorherigen Schritt geöffneten SQL-Shell):
CREATE ROLE repl_user LOGIN REPLICATION PASSWORD 'replQwerty123';
Fügen Sie der
pg_hba.conf-Datei Parameter hinzu. Dazu öffnen Sie die Datei in einem Texteditor und fügen die folgenden Zeilen in die Datei ein (unter der#replication privilegeZeile):# replication privilege. host replication repl_user <secondaryIP>/32 md5Starten Sie den BriefCamPostgreSQL-Dienst auf dem primären PostgreSQL-Server neu, indem Sie PowerShell als Administrator öffnen und die folgenden Befehle ausführen:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10" net start "BriefCamPostgreSQL - PostgreSQL Server 10"Überprüfen Sie, ob die Konfigurationsdateien die Änderungen enthalten, die Sie wie folgt an der
postgres.confvorgenommen haben:Verbinden Sie sich über die PowerShell-Konsole mit der SQL-Shell des primären PostgreSQL-Servers, indem Sie den folgenden Befehl ausführen:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresDrucken Sie die benutzerdefinierten Konfigurationen, die der PostgreSQL-Konf-Datei hinzugefügt wurden, mit den folgenden Befehlen über die SQL-Shell aus:
\pset pager off SELECT pg_read_file('postgresql.conf');Überprüfen Sie, ob Sie die Zeilen, die der
postgresql.conf-Datei hinzugefügt wurden, am Ende der Ausgabe sehen können.
Überprüfen Sie, ob die Konfigurationsdateien die Änderungen enthalten, die Sie wie folgt an der
pg_hba.confvorgenommen haben:Verbinden Sie sich mit der SQL Shell des primären PostgreSQL-Servers, indem Sie die folgenden Befehle ausführen:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgres
\pset pager off
WÄHLEN SIE pg_read_file('pg_hba.conf');
Überprüfen Sie, ob Sie die Zeilen, die der
pg_hba.conf-Datei hinzugefügt wurden, am Ende der Ausgabe sehen können.
Schritte auf dem sekundären Server
Installieren Sie BriefCamPostgreSQL.
Stoppen Sie auf dem sekundären PostgreSQL-Server den BriefCamPostgreSQL-Dienst, indem Sie in PowerShell als Administrator Folgendes ausführen:
net stop "BriefCamPostgreSQL - PostgreSQL Server 10"Bereinigen Sie das Datenverzeichnis wie folgt:
Benennen Sie den
PostgreSQL_DataOrdner um.Erstellen Sie einen neuen Ordner namens
PostgreSQL_Dataund fügen Sie auf der Registerkarte Berechtigungen des Ordners Everyone (Vollständige Kontrolle) hinzu.
Führen Sie ein PostgreSQL-Basis-Backup vom primären auf den sekundären Server wie folgt durch:
Führen Sie den folgenden Befehl in PowerShell als Administrator aus:
c:\PostgreSQL\bin\pg_basebackup -h <primaryIP> -U repl_user --checkpoint=fast -D C:\PostgreSQL_Data -R TBD #--slot=standby1Es wird empfohlen, alle BriefCam Dienste auf allen Servern während der potenziell langen Datenbanksicherung anzuhalten. Es ist möglich, diesen Schritt durchzuführen, ohne alle Dienste zu stoppen, abhängig von der Größe des Datensatzes.
Starten Sie auf dem sekundären PostgreSQL-Server den BriefCamPostgreSQL-Dienst, indem Sie als Administrator die folgenden Befehle in PowerShell ausführen:
net start "BriefCamPostgreSQL - PostgreSQL Server 10"
Überprüfen Sie den Replikationsvorgang
Verbinden Sie sich über die PowerShell-Konsole mit der SQL-Shell des primären PostgreSQL-Servers, indem Sie den folgenden Befehl ausführen:
C:\PostgreSQL\bin\psql.exe -U dbadmin postgresÜberprüfen Sie den Verzögerungswert, indem Sie den folgenden Befehl in der SQL-Shell ausführen (der
write_lagmuss mit 00:00:00 beginnen):SELECT write_lag,client_addr FROM pg_stat_replication ;Dies ist ein Beispiel für den erwarteten Output:
postgres=# SELECT write_lag,client_addr FROM pg_stat_replication ;
write_lag | client_addr
-----------------+-------------
00:00:00.003972 | 10.30.30.30
(1 Zeile)
postgres=#
Anmerkung
Diese Prüfung muss mindestens einmal pro Tag durchgeführt werden.
Aktivieren Sie den sekundären Server als primären Server
Dieser Abschnitt beschreibt das Verfahren zur Aktivierung des sekundären Servers als primäre Instanz der PostgreSQL-Datenbank in Fällen, in denen der primäre Server gestört ist und eine Wiederherstellung/Migration erforderlich ist.
Ändern Sie die Hosts-Datei auf allen BC-Servern so, dass die <secondaryIP> anstelle der <primaryIP> angezeigt wird.
Überprüfen Sie den Status und stufen Sie den sekundären Server PGSQL zum primären Server herauf, indem Sie die folgenden Befehle in der PowerShell-Konsole ausführen (stellen Sie sicher, dass PowerShell als Administrator ausgeführt wird und die Pfade zur Datei pg_ctl.exe und zum Ordner PostgreSQL_Data entsprechend bearbeitet werden):
c:\PostgreSQL\bin\pg_ctl.exe status -D ”C:\PostgreSQL_Data”
Beispielausgabe:
pg_ctl: server is running (PID: 5672) C:\PostgreSQL\bin\postgres.exe "-D" "C:\PostgreSQL_Data"c:\PostgreSQL\bin\pg_ctl.exe promote -D ”C:\PostgreSQL_Data”
Beispielausgabe:
waiting for server to promote.... done server promoted
Erstellen Sie regelmäßige Backups auf dem sekundären Server
PG_DUMP-Skripte im Windows Taskplaner
Erstellen Sie die
%APPDATA%\postgresql\pgpass.conf-Datei mit den db-Anmeldeinformationen (d.h.:*:5432:*:dbadmin:Qwerty123). Einzelheiten finden Sie unter: https://www.postgresql.org/docs/10/libpq-pgpass.html und https://www.postgresql.org/docs/10/libpq-envars.html (externe Links).Wenn die obige Vorgehensweise nicht funktioniert, kann das Passwort der Skripte in der Ausführungszeile angegeben werden:
$env:PGPASSWORD='Qwerty123' ;& c:\PostgreSQL\bin\pg_dump.exe -F t -U dbadmin -d briefcam -f e:\PostgresBackups\db_briefcam-$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")).tarErstellen Sie einen Ordner für die Sicherungsdateien, zum Beispiel:
E:\PostgresBackups\.Erstellen Sie einen Ordner für die Sicherungsskriptdateien, z. B.:
E:\PostgresBackupScripts\.Erstellen Sie das Sicherungsskript unter:
E:\PostgresBackupScripts\backup.ps1mit den drei unten gezeigten Befehlen:c:\PostgreSQL\bin\pg_dump.exe -F t -U dbadmin -d postgres -f e:\PostgresBackups\db_postgres-$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")).tar
c:\PostgreSQL\bin\pg_dump.exe -F t -U dbadmin -d briefcam -f e:\PostgresBackups\db_briefcam-$(((get-date).ToUniversalTime()).ToString("yyyyMMddTHHmmssZ")).tar
#ls -file E:\PostgresBackups\db*.tar | where {(get-date) - $_.creationtime -gt 15.} | Remove-Item –Verbose
*Der 3. Befehl oben sollte entsprechend der erforderlichen Aufbewahrungsfrist für Sicherungen angepasst werden, indem das "#"-Zeichen am Anfang der Zeile entfernt und die Zahl 15 geändert wird, da sie die Anzahl der Tage rückwärts darstellt. Wenn Sie das Skript beispielsweise so konfigurieren möchten, dass alle Dateien gelöscht werden, die älter als 7 Tage sind, müssen Sie die Zahl 15 in 7 ändern.
Testen Sie die Erstellung des Backups und die Entfernung der alten Dateien, indem Sie -gt auf 0 setzen und den folgenden Befehl in Windows cmd ausführen:
powershell.exe e:\PostgresBackupScripts\backup.ps1
Dadurch werden alle erstellten Dateien entfernt.
Passen Sie den Aufbewahrungszeitraum der Sicherungen an, wie am Ende von Schritt 4 oben erwähnt.
Fügen Sie das Sicherungsskript wie folgt zum Windows-Taskplaner hinzu:
Setzen Sie das Feld Program/script auf den folgenden Pfad:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Legen Sie im Feld Add Arguments Folgendes fest:
E:\PostgresBackupScripts\backup.ps1
Stellen Sie die Auslöser und das Timing entsprechend ein.

Stellen Sie die Aufgabe so ein, dass sie unabhängig davon ausgeführt wird, ob der Benutzer angemeldet ist, und speichern Sie das Passwort.

Prüfen Sie auf einem Testserver, ob die Dateien wiederherstellbar sind. Dieser Test sollte Teil Ihrer laufenden Routine sein.
Hier ist ein Beispiel für den Wiederherstellungsbefehl:
C:\PostgreSQL\bin\pg_restore.exe -c -v -U dbadmin -d briefcam -F t e:\PostgresBackups\db_briefcam-20211122T122052Z.tar
Der Parameter führt -c das Löschen und Erstellen durch. Weitere Optionen finden Sie unter:
“C:\PostgreSQL\bin\pg_restore.exe --help”
Kehren Sie zum Primärserver zurück, nachdem er repariert wurde
Wenn Sie einen sekundären Server verwendet haben, weil ein Problem mit dem primären Server aufgetreten ist, wird in diesem Abschnitt beschrieben, wie Sie zum primären Server zurückkehren, sobald das Problem behoben ist.
Anmerkung
Die Details des unten beschriebenen Vorgangs können je nach Art des Fehlers auf dem Primärserver variieren. Um den schwerwiegendsten Fall (einen absoluten Absturz des Primärservers) zu berücksichtigen, umfassen die folgenden Schritte eine Neuinstallation.
Installieren Sie das Betriebssystem von Grund auf neu.
Führen Sie die Schritte aus dem Abschnitt Schritte auf dem Primärserver auf dem aktuellen Primärserver durch.
Führen Sie alle in den folgenden Abschnitten beschriebenen Aktionen auf den Servern durch, wobei der neu installierte Server nun technisch gesehen die "sekundäre" Instanz ist:
Stoppen Sie den PostgreSQL-Dienst auf dem Server, der als primärer Server verwendet wurde.
Überprüfen Sie, ob das BriefCam ordnungsgemäß funktioniert.
Führen Sie die Schritte zum Erstellen eines Replikats auf dem Server durch, der als primärer Server verwendet wurde.