Hallo zusammen,
ich möchte gerne unsere derzeitige PostgreSQL-Umgebung aktualisieren. Vielleicht hat jemand Verbesserungsvorschläge?
Ist-Zustand:
eine Postgres-DB für interne und externe Applikationen
täglich 3.5 Mio. externe Transaktionen (RW) in eine bestimmte Tabelle
interne Applikationen führen nur lesende (RO) Abfragen auf diese Tabelle aus
wegen der Größe wird die Tabelle in Monatsscheiben aufgeteilt
Sicherungsverfahren durch COPY/rsync
keine Hotstandby
Soll-Zustand:Entlastung der DB durch die Trennung interner und externer Abfragen (Monatsscheiben für interne Applikationen auf eine zweite DB)
Hotstandby-/Cluster-Funktionalität
Hier mein Grobkonzept:
ext. App.
|
|
NODE1 <--heartbeat--> NODE2
DB1(postgresql1/aktiv) ---DRBD-------> DB1(postgresql1/inaktiv)
|
|
---slony rep---
|
DB2(postgresql2/inaktiv) --------------> DB2(postgresql2/aktiv)
^ | |
| | |
---------- COPY ------------ |
|
int. App.
- DB1 ist die DB für die externe Applikation.
- DB2 ist die DB für die interne Applikation.
- DB1 und DB2 sind unterschiedliche Prozesse. DB1 läuft auf Port 5432, DB2 auf 5431.
- Auf dem NODE1 ist nur DB1 aktiv, auf dem NODE2 nur DB2.
- Failover mittels heartbeat. DB1 wird gestartet, DB2 gestoppt.
- Sollte ein NODE ausfallen, werden beide DBs auf dem aktiven NODE gestartet.
- DB1 wird durch zwei DRBD-Partitionen (drbd0-/var/lib/pgsql; drbd1-/var/lib/pgsql/pg_xlog)
von NODE1 auf NODE2 gesynct
- Die von der externen Applikation aktuelle Monats-Tabelle wird per Slony auf DB2/NODE2 repliziert.
- DB2 wird per COPY/dump gesichert.
Kann man das so machen? Oder würdet ihr an irgendeiner Stelle anders vorgehen?
Ich könnte für die zweite DB auch eine weitere DRBD-Partition erstellen. Dann wäre es vielleicht übersichtlicher. Dann würde die Synchronisation so aussehen:
Anstatt das...:
NODE1 NODE2
DB1 --DRBD---> DB1
|
-------SLONY--> DB2
|
DB2 <--COPY-------
diese Variante:
NODE1 NODE2
DB1 --DRBD---> DB1
DB2 <---DRBD-- DB2
Das wäre jedoch mit dem Nachteil verbunden, dass schreibende Transaktionen auf DB2 auch DB1 (wegen Synchronisation) belasten. Vorteil, ganz klar: ich habe beidseitig eine Hotstandby. Für interne sowie auch externe Applikationen.
Vielen Dank und viele Grüße,
pingufreak
p.s. ich hoffe ich habe das verständlich zusammengefasst?