Cluster / Shadowing?

Hallo,

Ich bin noch total neu bei PostgreSQL und habe bisher nur mit SQL-Server, Oracle und MySQL gearbeitet. Ich würde sehr gerne bei einem neuen Projekt PostgreSQL einsetzen, bin mir aber sicher dass der Kunde irgendwann von Redundanzen und Clustering spricht.

1.
Gibt es die Möglichkeit PostgreSQL auf zwei redundanten Rechner aufzuspielen und diese dann zu synchronisieren und ein Failover einzurichten?

2.
Kann man für eine sehr hohe Anzahl von Anfragen einen Cluster aufbauen?

3.
Wie ist es mit Mehrprozessorunterstützung? Kann man auf diese Weise gut skalieren?

Hintergrund:
Transaktionsverwaltung. Geschätzte Anzahl Zugriffe/Tag im WorstCase in ca. 10 Jahren: 1 Mio inserts und 2 Mio Selects (also 125’000 Zugriffe je Std. oder 2’080 je Minute oder 35 je Sekunde). Hohe Sicherheit durch Redundanzen! Datenverlust muss beinahe unmöglich sein! Möglichst keine Unterbrechungen für Backups etc.

Kann man das mit PostgreSQL schaffen? Wäre super wenn da schon jemand Erfahrung hat und aus dem Nähkästchen plaudern kann.

Grüsse,

Kukulkan

Vorneweg: euer Projekt scheint geschäftskritisch zu sein, holt euch jemanden ins Boot, der dort tiefgreifende Erfahrungen hat. Sonst vergesst ihr ein paar wichtige Ecken und steht hinterher dumm da.

Man kann einen Cluster aufbauen, kommt drauf an, wie man das ganze aufzieht. Es gibt z.B. Slony, hier hast du einen Master und 3, 4 Slaves. Fällt der Master aus, kann ein anderer Host Master werden.
Damit kann man Anfragen sauber verteilen.

Zur Multiprozessorunterstützung: PostgreSQL bearbeitet die Anfragen in eigenen Prozessen, das Betriebssystem tut diese also fleissig auf alle vorhandenen Prozessoren verteilen.

Zur Datensicherheit: du kannst ein Online Backup fahren, schau mal unter dem Stichwort PITR (Point in Time Recovery) in die Dokumentation. Damit hast du selbst bei einem Totalabsturz bis zur letzten kompletten Anfrage alle Daten vorliegen.

Aber letztendlich bleibt: Testcase aufbauen, eingehend(!) testen, viele Fehler erzeugen und ausprobieren, was passiert. Und noch mal testen. Gut dokumentieren und von aussen absichern. Nach Möglichkeit keine extravaganten Sachen nutzen, das soll schliesslich 10 Jahre laufen, wenn ich das richtig gelesen habe.

Hallo ads,

Vorneweg: euer Projekt scheint geschäftskritisch zu sein, holt euch jemanden ins Boot, der dort tiefgreifende Erfahrungen hat. Sonst vergesst ihr ein paar wichtige Ecken und steht hinterher dumm da.

Yep. Ich muss aber vorher evaluieren ob die DB über die geforderten Funktionen verfügt.

Dank für die Informationen. Das sieht ja sehr gut aus. Ich werde das mal in einer VMWare-Maschine testen…

Grüsse,

Kukulkan

Uhm, wie gut ist diese VMWare Maschine? Grübel

Damit kannst du zwar einigermassen die Funktionalität testen, aber bei weitem nicht testen, ob das die Performance erreicht.

Du bräuchtest 2-4 VMWare Instanten, jede für einen Datenbank Host. Dabei ist jedoch zu beachten, das Queries bei einer Replikation auf allen Systemen ausgeführt werden, du also nur 50%-25% der Originalperformance erreichst.

Uhm, wie gut ist diese VMWare Maschine? Grübel

:smiley: :smiley: :smiley:

Natürlich will ich hier nicht die Performance testen sondern das ‘feeling’ und die Administrationswerkzeuge. Dessweiteren wird bei der Entwicklung die DB sowieso unter einer VMWare-Maschine auf dem Entwicklungsrechner laufen.

Interessante Erfahrung vorneweg:

Ich hab PostgreSQL unter W2000 mit dem Setup zu 8.1 installiert. Die Installation war gut (hab’s unter Administrator installiert weil ich im Forum beim durchstöbern von Problemen mit anderen Usern gelesen habe).
Dann in den PGAdmin III und mal eine Datenbank anlegen. Ich will zuerst einen Tablespace anlegen und bei jedem Versuch kommt die Meldung
ERROR: could not set junction for “??\d:\postgresql_tblspace”: Die im Analysepunktpuffer vorhandenen Daten sind ungültig.
So, im Forum kein Hinweis. Google hilft auch nicht. Solche Dinge sollten halt nicht sein. Aber andere DB’s sind da auch nicht besser. Immerhin hat das bei Oracle immer gleich geklappt (aber anderes dafür nicht).

Wenn wir schon dabei sind. Eine Idee was den Fehler auslöst? Ich gebe als Location folgendes ein (ohne Hochkommas): “d:\postgresql_tblspace”. Der Ordner existiert und ist völlig leer (NTFS).

Weitere Frage: Wo findet man PostgreSQL-Profis als Freelancer? Und wo haben die Ihre Stundensätze? Einige Info’s parat? Gibt es da einschlägige Foren oder Jobbörsen mit Schwerpunkt auf PostgreSQL?

Grüsse,

Kukulkan

Hmm, hast du die Datenbank denn schon initialisiert? Wenn das Verzeichnis leer ist, scheint dem nicht so zu sein.

Hi ads,

Hmm, hast du die Datenbank denn schon initialisiert? Wenn das Verzeichnis leer ist, scheint dem nicht so zu sein.

Hatte ich nicht. Ich ging davon aus dass die DB nach dem Setup initialisiert ist da ich den Service laufend sehen kann und der PGAdmin III anstandslos funktioniert. Ich kann ja auch eine neue DB anlegen. Nur keinen Tablespace.

Ich hab dann unter einem ‘nicht privilegierten’ User pginit -D d:\postgresql ausgeführt. Das hat funktioniert. Dann hab ich den Service beendet und neu gestartet. Dann wieder den PGAdmin III gestartet und eingelogt. Klappt. Will ich jetzt einen neuen Tablespace anlegen, kommt wieder das gleiche (bei einem neuen, leeren Verzeichnis) oder es kommt “ERROR: directory xxx is not empty”.

Wie kann ich den Standort der abzulegenden Daten (also einen Tablespace) denn definieren? Mache ich was falsch? In der Doku scheint das zu klappen…

Kukulkan

Wer war denn dein nicht privilegierter User? Das sollte eigentlich der User ‘postgres’ gewesen sein … ansonsten ist es wahrscheinlich, das du in Probleme mit Zugriffsrechten rennst.

Weiss denn die Datenbank, die du startest, auch von ihrem Glück, das du d:\postgresql nutzen möchtest? Oder nutzt die weiterhin ihren voreingestellten Pfad (wohin der auch immer zeigt)?

Problem erkannt! Es war ein gemapptes Laufwerk und das mag er nicht. Unter Angabe des korrekten (physikalischen) Laufwerkbuchstabens hat es dann geklappt!!!

PS. Danke für dein Angebot per PN. Ich werde mich definitiv an Dich wenden wenn es soweit ist. Schick mir doch deinen Standort (PLZ und Bundesland) und einen Stundensatz per PN. Falls wir Dich mal anheuern möchten…

Grüsse,

Kukulkan