HA PostgreSQL Cluster via Shared Storage

Hallo Postgres Gemeinde,

folgende Idee kam mir in den Sinn:
Ich m�chte ein Hot-Standby PostgreSQL Cluster aufbauen. (PostgreSQL 9.1)
Ich habe ein Partition auf einem Shared Storage. Diese ist auf zwei Servern �ber NFS gemounted. Das Shared Storage ist bereits ausfallsicher Konfiguriert.
Um mir die komplizierte Replikation und das Vorhalten der gleichen Datenmenge auf beiden Servern zu sparen, m�chte ich die Datenbankdateien auf das Storage legen.
Eines der beiden Server startet Postgres ganz normal im prim�ren Modus. Der zweite starten auf den selben Datenbankdateien im Standby-Modus.

Die Frage ist jetzt nicht ob das prinzipiell funktionieren kann. Das habe ich schon ausprobiert und es l�uft in der Tat. Wenn Daten vom prim�ren Server geschrieben werden kann ich diese kurze zeit sp�ter auf dem Standby-Server lesen.
Der Stanbdy-Server darf nur lesende Transaktion ausf�hren.
Was ich mich jetzt frage ist, ob dieser Anwendungsfall von den Entwicklern so eingeplant ist???
Greift m�glicherweise Postmaster trotzdem schreibend auf die Datenbankdateien zu?
Wenn ich das richtig verstanden habe pollt auch der Standby Server st�ndig nach neuen WAL-Files im pg_xlog Verzeichnis und m�chte die einspielen. Kann es dabei zu Komplikationen kommen?

Hat jemand Erfahrung mit einer solchen Konfiguration?

Beste Gr��e,

Max

Du hast zwei Datenbankinstanzen auf dem gleichen Datenverzeichnis laufen?
Das ist definitiv nicht unterstützt, würdest du das auf der gleichen Maschine probieren würde PostgreSQL das ablehnen.

Ach ja, an deiner Stelle würde ich die Datenbank komplett neu aufsetzen, sehr wahrscheinlich hast du die Dateien bei dieser Aktion beschädigt. Du hast zwei Datenbankinstanzen auf den gleichen Dateien arbeiten lassen.


Allerdings, was wirklich funktioniert: du startest die zweite Datenbank erst, wenn du 100% sicher bist das die erste komplett gestoppt ist.
Zum Beispiel wenn dein Server ausgefallen ist. Das wäre dann der gleiche Fall wie z. B. nach einem Stromausfall: die Datenbank fährt ein Recovery und steht danach wieder zur Verfügung.

Das ist fast richtig, es sind zwei Datenbank Instanzen die auf den “selben” Datenbankdateien arbeiten. Damit meine ich nicht das komplette Data Verzeichnis. Jede Instanz hat ein eigenes Data Verzeichnis mit eigenen Konfigurationsdateien. Einige Ordner (wie base, global usw.) sind jedoch via Symlink vom Shared Storage für beide Datenbank Instanzen gleichzeitig gelinkt. Damit kann ich beide Instanzen mit unterschiedlicher Konfiguration starten. Eine Instanz läuft dabei nur im read-only Modus. Es werden also keine Schreiboperationen ausgeführt.
Was ich mich speziell frage ist, ob diese PostgreSQL Instanz im read-only Modus tatsächlich keine Datenbankdatei mit read/write lockt?
Damit dürfte die andere Instanz ja unbeeinträchtigt auf den Datenbankdateien Arbeiten und auch schreiben können.

@ads
Das ist natürlich nur ein Testsystem ohne relevante Daten die ich beschädigen könnte.
Dein Vorschlag wäre auch meine erste Lösung gewesen. Das wurde in den Foren schon öfters besprochen.
Mir ist bekannt, dass PostgreSQL den konkurrierenden Zugriff zweier Instanzen auf die selben Datenbankdateien nicht unterstützt. Deswegen wollte versuchen die Hot-Standby Lösung von PostgreSQL 9.x zu nutzen um eine Instanz im read-only Modus für Analyse-Abfragen zu betreiben. Das funktioniert ja bereits wenn die Datenbankdateien komplett auf den anderen Server repliziert werden. Dann können beide Instanzen genutzt werden und die Datenbankdateien bleiben Konsistent.

Was bitte schön meinst du mit “read-only Modus”?

Damit meine ich die Konfigurationseinstellung Hot Standby:

PostgreSQL: Documentation: 9.1: Hot Standby

Dabei werden nur Read-Only Queries ausgeführt.

Die Queries sind nur read-only. Die Datenbank schreibt aber alle Änderungen, die sie vom Master bekommt, in das Datenverzeichnis.

Es ist nicht möglich eine PostgreSQL Datenbank wirklich read-only, z. B. von einer CD-ROM zu starten.