PostgreSQL®-Datenbank-Cluster

Redundanz - Datenbank-Cluster

Die folgende Abbildung zeigt die PostgreSQL®-Redundanzstruktur.

Abbildung 1. PostgreSQL® Backend-Konfiguration

Die Konfiguration umfasst die folgenden Elemente:

  • Ein redundantes WinCC OA Projektserver-Paar: beide WinCC OA-Servers hosten eine PostgreSQL® Backend-Instanz.
  • Ein redundantes Datenbankserver-Paar: Jeder Datenbankserver hostet eine PostgreSQL®-Application-Server-Instanz und ein pgClusterMonitor Python -Skript. pgClusterMonitor ist ein Service, der einen Cluster der PostgreSQL®-Datenbank über WAL (Write-Ahead-Logging) Streaming Replication überwacht.

Server-Details:

  • Einer der PostgreSQL® Application-Servern arbeitet im Master-Modus. Der Master-Datenbankknoten akzeptiert Lese-und Schreib-Anfragen und veröffentlicht den Abgleich (replication) für den Standby PostgreSQL® Application-Server. Master- und Standby-Databankknoten synchronisieren die Information.
  • Alle Anfragen von PostgreSQL®-Backends werden nur im Master-Modus an PostgreSQL® Application-Server geroutet Daher hat jede Instanz des PostgreSQL®-Backends eine Konfiguration mit zwei Connection-Strings, welche auf die beide PostgreSQL® Application-Server referenzieren. PostgreSQL®-Backend verwendet den ersten Verbindungsstring (connection string), der im Master-Modus erfolgreich eine Verbindung zum PostgreSQL® Application -Server aufbaute.
  • PostgreSQL®-Backend überwacht Verbindungsfehler und versucht auf einen anderen Verbindungsstring zu wechseln, um eine Verbindung aufzubauen.

Aufsetzen eines Datenbankclusters

Das PostgreSQL®-Backend kann mit einem PostgreSQL®-Cluster arbeiten. Ein PostgreSQL®-Cluster mit WinCC OAbesteht aus zwei Knoten, die Datenbank-Redundanz anbieten. Für einen PostgreSQL®-Cluster verwenden Sie nicht die gleichen Knoten auf den WinCC OA läuft, sondern unterschiedliche Hosts für jede Datenbank des Clusters.

Um einen Cluster aufzusetzen, gehen Sie, wie unterhalb beschrieben, vor. Es wird angenommen, dass die Master-Datenbank die IP-Adresse "192.168.0.101" hat und die Standby-Datenbank die Adresse "192.168.0.102".

Auf dem Master-Datenbankknoten

  • Führen Sie ein SQL-Skript aus (für mehr Information über diese Einstellungen, siehe https://www.postgresql.org/docs/13/config-setting.html):
    ALTER SYSTEM SET listen_addresses TO '*';
    ALTER SYSTEM SET synchronous_commit TO 'remote_apply';
    SELECT * FROM pg_create_physical_replication_slot('__slot');
    ALTER SYSTEM SET synchronous_standby_names TO '*';
    ALTER SYSTEM SET wal_level TO 'replica';
    ALTER SYSTEM SET wal_log_hints TO 'on';
    ALTER SYSTEM SET max_wal_senders TO '10';
    ALTER SYSTEM SET wal_keep_size  TO '16MB';
    ALTER SYSTEM SET hot_standby TO 'on';
  • Öffnen Sie die Datei pg_hba.conf C:\Program Files\PostgreSQL\16\data\pg_hba.conf und fügen Sie Ihre Serveradressen hinzu:
    Abbildung 2. Serveradressen hinzufügen
  • Fügen Sie Authentifizierungseinstellungen zu der pg_hba.conf-Datei hinzu (siehe https://www.postgresql.org/docs/13/auth-pg-hba-conf.html), um den Client-Applikationen den Zugriff auf die Datenbank und die Arbeit mit Replika zu ermöglichen.
  • Starten Sie den PostgreSQL®-Dienst neu:
    Windows Taskmanager/services/postgresql-x64-16.

Auf dem Standby-Datenbankknoten

  • Stoppen Sie den PostgreSQL®-Server.
  • Löschen Sie den Inhalt des PG_DATA-Verzeichnisses.
  • Erstellen Sie die Verzeichnisse db, events, alerts, backups für Tablespaces. Die Verzeichnisse müssen mit dem gleichen Pfad wie auf dem Primärserver erstellt werden. Siehe Kapitel NGA - PostgreSQL Server-Installation .
  • Führen Sie das folgende Kommando aus:
    pg_basebackup -D "PG_DATA" -h ip_master -p port_master -X stream -c fast -U username -W -R

Die verschiedenen Teile des Befehls werden im Folgenden beschrieben:

    • PG_DATA - PostgreSQL® Data-Verzeichnis.
    • ip_master - die IP-Adresse oder der Hostname wo die Master-Datenbank liegt.
    • port_master - Port der Master-Datenbank.
    • username - Benutzername mit Replica-Rolle. Dieser Benutzer muss Zugriff auf die Master-Datenbank haben.
Anmerkung: Das pg_basebackup muss mit dem gleichen Benutzer, der das PG-Service ausführt, ausgeführt werden (um alle erforderlichen Rechte auf das data-Verzeichnis zu haben).
  • Starten Sie den PostgreSQL®-Server. Starten Sie den Server über: Windows Taskmanager/services/postgresql-x64-16.
Anmerkung: Wenn die Fehlermeldung "Could not connect to server" oder "No route to host" im Logviewer angezeigt wird, überprüfen Sie Ihre Firewall-Einstellungen und die pg_hba.conf-Datei

PostgeSQL Cluster mit zwei Netzwerkadaptern

Wenn Sie zwei Netzwerkadapter auf beiden der Cluster verwenden, gehen Sie wie folgt vor:

  • Fügen Sie die IP-Adresse des zweiten Netzwerkadapters zu der pg_hba.conf-Datei hinzu. Beide Netzwerkadapter müssen in der config.ini-Datei angegeben werden - siehe den Schritt unterhalb):
    Windows: C:/Program Files/PostgreSQL/16/data/pg_hda.conf
    Linux: /var/lib/pgsql/data/pg_hda.conf
  • Auf dem sekundären Server, führen Sie "pg_basebackup" aus indem Sie die verfügbaren IP-Adressen getrennt durch Kommas auflisten. Die "pg_basebackup"-Datei liegt in der PostgreSQL®-Installation: PostgreSQL/<version>/bin:
    pg_basebackup -D "PG_DATA" -h ip_master1,ipmaster2 -p port_master -X stream -c fast -U username 
  • Listen Sie die geforderten IP-Adressen in der [cluster]-Sektion der Konfigurationsdatei des Monitoring Utilitys (wincc_oa/data/NGA/PostgreSQL/sql/Cluster Monitor Tool/config.ini) getrennt durch Kommas auf, z.B.:
    [cluster] p1 = host=host1,host2 port=1111 dbname=winccoa user=postgres password=postgres sslmode=prefer sslcompression=1 krbsrvname=postgres target_session_attrs=any 
Anmerkung: Wenn der erste Host der Datenbankverbindung (für Datenbankverbindung siehe Kapitel Datenbankspezifische Einstellungen) nicht erreichbar ist, führt es zu einem Timeout während des Betriebs mit dem Cluster-Knoten.