Benutzer-Werkzeuge

Webseiten-Werkzeuge


datenbank:ha-postgresql-cluster

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
datenbank:ha-postgresql-cluster [2026-05-13 21:43:45] manfreddatenbank:ha-postgresql-cluster [2026-05-29 10:09:43] (aktuell) – [Tests] manfred
Zeile 1: Zeile 1:
 ====== HA-PostgreSQL-Cluster ====== ====== HA-PostgreSQL-Cluster ======
 +
 +siehe auch: **[[::Datenbank:PostgreSQL]]**
  
  
Zeile 6: Zeile 8:
 //Es soll ein hochverfügbarer PostgreSQL‑Cluster mit Patroni, EtcE, HAProxy und KeepaliveD auf drei Systemen installiert werden.// //Es soll ein hochverfügbarer PostgreSQL‑Cluster mit Patroni, EtcE, HAProxy und KeepaliveD auf drei Systemen installiert werden.//
  
-Wichtige Unterschiede zwischen diesem HA-PostgreSQL-Cluster mit 3 Systemen, gegenüber einem HA-PostgreSQL-Cluster mit 5 Systemen sind, dass hier alle Pakete auf allen 3 Systemen installiert werden müssen. Und weil PostgreSQL und HAProxy auf dem selben Host laufen, muß der Datenbank-Zugriff über den Cluster-Zugang (HAProxy) auf einen anderen Port laufen. In diesem Fall laufen die PostgreSQL-Instanzen aus dem Standard-Port (''5432'') und der HAProxy jeweils auf einen neuen Port (''5433''). +Wichtige Unterschiede zwischen diesem HA-PostgreSQL-Cluster mit 3 Systemen, gegenüber einem HA-PostgreSQL-Cluster mit 5 Systemen sind, dass hier alle Pakete auf allen 3 Systemen installiert werden müssen. Und weil PostgreSQL und HAProxy auf dem selben Host laufen, muß der Datenbank-Zugriff über den Cluster-Zugang (HAProxy) auf einen anderen Port laufen. 
-Weiterhin gibt es in diesem Aufbau noch einen schreibgeschützten Port (''5443''), über den man auf den man nicht in die DB schreiben kann und von den Replicas liest, um den Leader zu entlasten.+In diesem Fall laufen die PostgreSQL-Instanzen auf dem Standard-Port (''5432'') und der HAProxy jeweils auf neuen Ports (schreiben: ''5433'' / lesen: ''5443'').
  
 In einem HA-PostgreSQL-Cluster mit 5 Systemen laufen EtcE, HAProxy und KeepaliveD auf 2 separate Systeme und dann können PostgreSQL und HAProxy auf dem gleichen Port laufen. In einem HA-PostgreSQL-Cluster mit 5 Systemen laufen EtcE, HAProxy und KeepaliveD auf 2 separate Systeme und dann können PostgreSQL und HAProxy auf dem gleichen Port laufen.
Zeile 201: Zeile 203:
 === Hinweis === === Hinweis ===
  
-**//Solange der Cluster unhealthy ist, sind Verwaltungsoperationen wie etcdctl member add absichtlich verboten.//**+**//Solange der Cluster unhealthy ist, sind Verwaltungsoperationen wie ''etcdctl member add'' absichtlich verboten.//**
  
 <code bash> <code bash>
Zeile 418: Zeile 420:
  
 ==== KeepaliveD ==== ==== KeepaliveD ====
- 
-//KeepaliveD hat Probleme mit den NIC ''vlan203@bond2'' klar zu kommen, deshalb wir hier Multicast verwendet.// 
  
 <file bash Knoten 1 – /etc/keepalived/keepalived.conf> <file bash Knoten 1 – /etc/keepalived/keepalived.conf>
Zeile 458: Zeile 458:
         }         }
  
-        mcast_src_ip 10.145.43.31+        #mcast_src_ip 10.145.43.31
  
-#        unicast_src_ip 10.145.43.31 +        unicast_src_ip 10.145.43.31 
-       unicast_peer { +        unicast_peer { 
-               #10.145.43.31 +                #10.145.43.31 
-               10.145.43.32 +                10.145.43.32 
-               10.145.43.33 +                10.145.43.33 
-       }+        }
 } }
 </file> </file>
Zeile 506: Zeile 506:
         }         }
  
-        mcast_src_ip 10.145.43.32+        #mcast_src_ip 10.145.43.32
  
-#        unicast_src_ip 10.145.43.32 +        unicast_src_ip 10.145.43.32 
-       unicast_peer { +        unicast_peer { 
-               10.145.43.31 +                10.145.43.31 
-               #10.145.43.32 +                #10.145.43.32 
-               10.145.43.33 +                10.145.43.33 
-       }+        }
 } }
 </file> </file>
Zeile 554: Zeile 554:
         }         }
  
-        mcast_src_ip 10.145.43.33+        #mcast_src_ip 10.145.43.33
  
-#        unicast_src_ip 10.145.43.33 +        unicast_src_ip 10.145.43.33 
-       unicast_peer { +        unicast_peer { 
-               10.145.43.31 +                10.145.43.31 
-               10.145.43.32 +                10.145.43.32 
-               #10.145.43.33 +                #10.145.43.33 
-       }+        }
 } }
 </file> </file>
Zeile 620: Zeile 620:
  
 <code bash Netzwerkzugriffe erlauben> <code bash Netzwerkzugriffe erlauben>
-> echo "listen_addresses = '*'" >> /etc/postgresql/16/main/postgresql.conf+> echo "listen_addresses = '*'" >> /etc/postgresql/16/main/pg_hba.conf
 > echo "host    replication     all             0.0.0.0/              scram-sha-256" >> /etc/postgresql/16/main/pg_hba.conf > echo "host    replication     all             0.0.0.0/              scram-sha-256" >> /etc/postgresql/16/main/pg_hba.conf
 > echo "host    replication     all             ::/                   scram-sha-256" >> /etc/postgresql/16/main/pg_hba.conf > echo "host    replication     all             ::/                   scram-sha-256" >> /etc/postgresql/16/main/pg_hba.conf
Zeile 1057: Zeile 1057:
  
 Wenn das so aussieht, dann kann von den Replicas nicht gelesen werden. Wenn das so aussieht, dann kann von den Replicas nicht gelesen werden.
-Um Problem das zu beheben, müssen die Replicas (beide) reinitialisiert werden.+Um das Problem zu beheben, müssen die Replicas (beide) reinitialisiert werden.
  
  
Zeile 1123: Zeile 1123:
 </code> </code>
  
-<code bash reparieren>+<code bash einen zum Leader bestimmen>
 > patronictl -c /etc/patroni/config.yml failover pgcluster > patronictl -c /etc/patroni/config.yml failover pgcluster
 + Cluster: pgcluster (7637598528541987072) -------+----+-----------+ + Cluster: pgcluster (7637598528541987072) -------+----+-----------+
Zeile 1341: Zeile 1341:
  repl      | Replication  repl      | Replication
 </code> </code>
- 
-//Wie das beste Vorgehen bei Wartungsarbeiten ist, muß erst noch ermittelt ausgelotet werden.// 
  
 <code bash> <code bash>
Zeile 1946: Zeile 1944:
     nvme3n1      -      -      0    676    138  14.6M     nvme3n1      -      -      0    676    138  14.6M
 -----------  -----  -----  -----  -----  -----  ----- -----------  -----  -----  -----  -----  -----  -----
 +</code>
 +
 +
 +==== Testdaten einspielen ====
 +
 +<code bash>
 +> echo "COPY tabelle FROM '/tmp/export_mit_header.tsv' WITH (FORMAT csv, DELIMITER E'\t', HEADER MATCH, NULL '');" | psql -U dbuser -d testdb
 +
 +oder
 +
 +> cat /tmp/export_mit_header.tsv | psql -d testdb -U dbuser -c "COPY tabelle FROM STDIN WITH (FORMAT csv, DELIMITER E'\t', HEADER MATCH, NULL '');"
 +</code>
 +
 +<code bash Datensätze zählen>
 +> echo "SELECT COUNT(*) AS Tabellenname FROM tabelle;" | psql -d testdb -U dbuser
 +</code>
 +
 +
 +===== Verbindungen SSL/TLS-Verschlüsselt =====
 +
 +
 +==== Verschlüsselung konfigurieren ====
 +
 +<code bash postgresql.conf>
 +> patronictl -c /etc/patroni/config.yml edit-config pgcluster
 +loop_wait: 10
 +maximum_lag_on_failover: 1048576
 +postgresql:
 +  parameters:
 +    hot_standby: 'on'
 +    max_replication_slots: 10
 +    max_wal_senders: 10
 +    wal_level: replica
 +    ssl: on
 +    ssl_ca_file: '/etc/ssl/server-ca.pem'
 +    ssl_cert_file: '/etc/ssl/server-cert.pem'
 +    ssl_key_file: '/etc/ssl/server-key.pem'
 +    ssl_min_protocol_version: 'TLSv1.2'
 +    ssl_ciphers: 'HIGH:!aNULL:!3DES:!MD5:!DES:!MEDIUM'
 +    ssl_prefer_server_ciphers: on
 +  use_pg_rewind: true
 +retry_timeout: 10
 +ttl: 30
 +</code>
 +
 +
 +==== Verschlüsselung erzwingen ====
 +
 +<code bash pg_hba.conf>
 +> vim /etc/patroni/config.yml
 +...
 +pg_hba:
 +    - hostnossl all all 0.0.0.0/0 reject
 +    - hostnossl all all ::/0 reject
 +    - hostssl replication all 0.0.0.0/0 scram-sha-256
 +    - hostssl replication all ::/0 scram-sha-256
 +    - hostssl all all 0.0.0.0/0 scram-sha-256
 +    - hostssl all all ::/0 scram-sha-256
 +</code>
 +
 +
 +==== Verschlüsselung aktivieren ====
 +
 +<code bash kompletten Cluster restarten>
 +> patronictl -c /etc/patroni/config.yml restart pgcluster
 +</code>
 +
 +
 +===== temp_tablespaces =====
 +
 +<code bash temp_tablespaces-Verzeichnis anlegen>
 +> mkdir -p /var/lib/postgresql/temp_tablespaces
 +> chown postgres:postgres /var/lib/postgresql/temp_tablespaces
 +> chmod 0700 /var/lib/postgresql/temp_tablespaces
 +</code>
 +
 +<code bash temp_tablespaces konfigurieren>
 +> echo "SELECT spcname, pg_tablespace_location(oid) FROM pg_tablespace WHERE spcname = 'fasttmp';" | sudo -u postgres psql
 +> echo "CREATE TABLESPACE fasttmp LOCATION '/var/lib/postgresql/temp_tablespaces';" | sudo -u postgres psql
 +> echo "SELECT spcname, pg_tablespace_location(oid) FROM pg_tablespace WHERE spcname = 'fasttmp';" | sudo -u postgres psql
 +
 +> patronictl -c /etc/patroni/config.yml edit-config
 +...
 +postgresql:
 +  parameters:
 +    temp_file_limit: '-1'
 +    temp_tablespaces: fasttmp
 +    ...
 </code> </code>
  
  
/home/http/wiki/data/attic/datenbank/ha-postgresql-cluster.1778708625.txt · Zuletzt geändert: von manfred