Ich verwende ein ZFS-gestütztes NAS mit zwei Köpfen für gemeinsam genutzten Hochverfügbarkeitsclusterspeicher, basierend auf der hier empfohlenen Architektur von Nexenta:
Die Festplatten in 1 JBOD speichern die Datenbankdateien für eine einzelne 4-TB-Postgres-Datenbank, und die Festplatten in der anderen JBOD speichern 20 TB große binäre Roh-Flatfiles (Clusterergebnisse für Kollisionssimulationen mit großen Sternobjekten). Mit anderen Worten, der JBOD, der die Postgres-Dateien sichert, verarbeitet hauptsächlich zufällige Workloads, während der JBOD, der die Simulationsergebnisse unterstützt, hauptsächlich serielle Workloads verarbeitet. Beide Kopfknoten haben 256 GB Speicher und 16 Kerne. Der Cluster hat ungefähr 200 Kerne, die jeweils eine Postgres-Sitzung verwalten, daher erwarte ich ungefähr 200 gleichzeitige Sitzungen.
Ich frage mich, ob es in meinem Setup sinnvoll ist, die ZFS-Kopfknoten gleichzeitig als gespiegeltes Paar von Postgres-Datenbankservern für meinen Cluster zu fungieren. Die einzigen Nachteile, die ich sehen kann, sind:
- Weniger Flexibilität bei der Skalierung meiner Infrastruktur.
- Etwas geringerer Redundanzgrad.
- Begrenzte Speicher- und CPU-Ressourcen für Postgres.
Der Vorteil, den ich sehe, ist jedoch, dass ZFS in Bezug auf automatisches Failover sowieso ziemlich dumm ist und ich nicht viel Arbeit aufwenden muss, um jeden Postgres-Datenbankserver dazu zu bringen, herauszufinden, ob ein Kopfknoten ausgefallen ist, da er zusammen mit dem Kopf ausfällt Knoten.
postmaster.pid
), führen zu schwerwiegenden Datenbeschädigungen.