Erfahrungen mit Postgresql Cluster

PHuV

Banned
Registriert
März 2005
Beiträge
14.219
Hat hier jemand Erfahrungen mit Postgresql Cluster? Ich möchte eigentlich nur wissen, ob sowas wie Rolling Updates wie bei Oracle RAC auch möglich ist, vorausgesetzt der Storage ist entsprechend ausgelagert, wie bei Oracle über ASM. Es sollen 2 Postgresql Server als Cluster laufen, so daß im laufenden Betrieb ein Update eines Servers gemacht werden kann, ohne das die Datenbank ausfällt.
 
Moin,

das ist soweit ich weiß eher schwierig. Das die Installation der neuen Version kann man oft ohne downtime machen, jedoch muss dann die Datenbank dagegen gelinkt werden. Alternativ ist es möglich vorher einen Dump zu erstellen und diesen nach dem Update wieder einzuspielen. Dabei sollten aber keinerlei Schreiboperationen an der DB vorgenommen werden.

Wie habt/wollt ihr denn die Replikation aufsetzen?

Der genrelle Updateprozess für Major-Updates läuft mittels pg_upgrade. Das ist sozusagen die "best practice". Möglicherweise ist mit Zusatztools noch mehr möglich, aber dazu kann ich nichts sagen.

https://www.postgresql.org/docs/13/pgupgrade.html


Grüße
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: madmax2010 und PHuV
nosti schrieb:
Alternativ ist es möglich vorher einen Dump zu erstellen und diesen nach dem Update wieder einzuspielen. Dabei sollten aber keinerlei Schreiboperationen an der DB vorgenommen werden.
Genau das ist das Problem, es finden permanent Schreiboperationen statt.
nosti schrieb:
Wie habt/wollt ihr denn die Replikation aufsetzen?
Das ist noch unklar, da Konzept. Wie gesagt, ich habe hier leider nur Erfahrungen mit Oracle, da geht das (da oftmals gemacht). Nur ist für das was wir brauchen ein Oracle RAC vollkommen überdimensioniert und auch zu teuer. Ich hätte gerne was ähnliches:
  • 2 Knoten
  • Zugriff auf ein gemeinsamen Storage
  • Bei Updates wird immer nur ein Knoten aktualisiert, der andere läuft weiter
  • Nach dem Update des ersten Knotens wird gewechselt
nosti schrieb:
Der genrelle Updateprozess für Major-Updates läuft mittels pg_upgrade. Das ist sozusagen die "best practice". Möglicherweise ist mit Zusatztools noch mehr möglich, aber dazu kann ich nichts sagen.
Für ein gescheites HA Verfahren braucht es wieder eine Clustersoftware, z.B. sowas
https://severalnines.com/product/clustercontrol/for_postgresql

Aber das wird dann doch wieder teurer als gedacht, weil natürlich nur die kostenpflichtige Enterprise-Version das bietet, was wir brauchen.
 
nosti schrieb:
Wie habt/wollt ihr denn die Replikation aufsetzen?
Das ist erstmal die relevante Frage :)

Grundsaetzlich kann ich dir empfehlen dir PGpool II anzusehen
https://www.pgpool.net/mediawiki/index.php/Main_Page

Mehr Ueberblick findest du hier: https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling
Slony ist leider ein bisschen tot, auch wenn es hier noch repliziert wird:
https://www.postgresql.org/docs/10/upgrading.html

Du solltest ggf. das HA Kapitel lesen: https://www.postgresql.org/docs/14/high-availability.html

Da YAML ja i Trend ist habe ich inzwischen relativ viel Postgres auf Kubernetes.
Da hat mir zum Einstieg der Artikel hier geholfen:
https://blog.crunchydata.com/blog/deploy-high-availability-postgresql-on-kubernetes

habt ihr Budget fuer Externe Beratung? Es gibt eine Open Source Support Firma in NRW die hier ausgesprochen gut sind und auch aktiv an Posgres arbeiten.
 
  • Gefällt mir
Reaktionen: nosti und PHuV
Danke für die Infos. Wie gesagt, ich muß oder möchte einfach nur mal aus erster Hand wissen, ob das Updaten so geht, wie ich denke, und dann würde ich weiter planen. Wenn das eh so nicht funktioniert, ist das alles eh hinfällig, und man muß hier weiter überlegen.

Ich hab mal mit MySql einen "Cluster" aufgebaut, aber das ist ja eher ein Witz, weil hier, wie es nosti sagte, an sich nur ein Datenbanklink angelegt wird. Im Endeffekt sind das nur 2 MariaDBs oder MySQL DBs verknüpft, mit 2 an sich verschiedenen Datenbereichen. Klar wird das dann intern irgendwie synchronisiert, aber so richtig ausfallsicher ist das nach meinen Verständnis nach nicht. Und wir haben eben das Problem, daß permanent Daten reingeschrieben werden, aber trotzdem die Sache ohne Ausfall mal aktualisiert werden soll, z.B. die VM oder Server selbst, siehe Stichwort RedHat CVE-2021-4034. So, und wie aktualisiert man nun diesen Server, ohne die Datenbank offline zu nehmen?
 
Zuletzt bearbeitet:
Kann pgpool auch Updates managen? Ich dachte das ist eher fürs Connection Sharing, Load Balancing und Replikation? Zumindest sind das die Punkte, welche wir damit berücksichtigen.

Falls das mit der externen Firma interessant ist, könnte ich auch noch etwas dazu beitragen.

Sofern ihr bereits containerisierte Dienste einsetzt finde ich die Idee von @madmax2010 auch nicht verkehrt. Falls nicht, wäre es aber recht viel Aufwand und vor allem einiges neu zu lernen.

EDIT:

MySQL/MariaDB und so weiter kannst du mittels Multi Master Replikation aufsetzen. Das ist aber auch nicht ganz trivial finde ich. Für gewöhnlich hat man eher einen Master und dann mehrere Read Only Slaves mit entsprechender Replikation. Postgres kann da schon auch andere Sachen und als erstes muss man eben sehen welche Möglichkeit der Replikation geeignet ist.

Gibt schon gute Gründe warum sich Microsoft/Oracle und andere solche Lösungen richtig gut bezahlen lassen.

Auf die schnelle habe ich noch https://severalnines.com/database-blog/how-upgrade-postgresql10-postgresql11-zero-downtime gefunden. Ist zwar schon etwas älter, aber vielleicht gibt es noch andere Möglichkeiten in der Richtung.

Ich werde am Montag mal einen befreundeten Postgres Consultant anhauen. Vielleicht hat er einen Tip.

Grüße
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: PHuV
Also aus meiner Sicht solltest du erst mal klären, was du warum brauchst und auch auf welchem OS es laufen soll.

Also

1. Welches OS
2. Habt ihr Performanceanforderungen
3. Braucht ihr Faulttolerance oder reicht euch HA
4. Wie definiert ihr HA? Also wie lange darf der Service im Fehlerfall weg sein
5. Habt ihr ein Budget
6. Wie groß ist die Datenbank(en)
7. Hängen davon Produktivsysteme ab
8. Wir sieht denn euer aktuelles System aus und was ist daran das Problem


Ich denke das ist das Minimalset an Fragen die man beantworten sollte.
 
Danke, aber das würde aus meiner Sicht zu weit führen und habe es mit Absicht so nicht ausführlich formuliert. Bitte nicht falsch verstehen, Deine Fragen sind gut und würde ich genau so stellen, wenn es konkrete Anhaltspunkte gibt.

Wir wollen mit RedHat Linux und Postgresql einfach nur eine ausfallsichere Lösung haben, so daß ohne Probleme der jeweilige Server bzw. Knoten aktualisiert werden kann, ohne daß das fortwährende Schreiben in die Datenbank in einer selbstverständlich produktiven Umgebung unterbrochen werden muß. Und dann ist es aus meiner Sicht eine einfache Frage, geht sowas oder nicht?

Wie gesagt, als Beispiel habe ich Oracle RAC im Sinn, da weiß ich, das es geht (da selber ich Rolling Updates an hunderten von Servern machte).

Wenn das so nicht geht, hast sich ja der Rest der Fragen erübrigt. 😉 Daher ja die einfache Frage, ob das hier jemand schon mal praktisch so gemacht hat.
 
Zuletzt bearbeitet:
Naja, der Kasus Knacksus ist Frage 3. Wenn du/ihr wirklich fault tolerance braucht, dann sind das meines Wissens nach immer die Lösungen die Asche kosten und im Allgemeinen nicht zu wenig. Wenn ihr aber 3-300s Ausfall verkraften könnt, dann gibt es sicherlich ein halbes Dutzend an möglichen Lösungen.

Wir betreiben z.B. MariaDB im Container. Da laufen Updates über nen Neustart des Containers, was ein paar Sekunden dauert so lange man kein Update an der DB Struktur machen muss. Dann kann das schon mal ne Weile dauern. Aber das wars dann.

Man kann aber auch klassisches HA machen mit zwei Systemen und dann halt mit Failover für das Update arbeiten. Aber das ist halt IMMER nur HA was man sich da zusammenzimmern kann.

Aber irgendwie habe ich das Gefühl, dass dir das schon bewusst ist. Oder?
 
  • Gefällt mir
Reaktionen: PHuV
Ich benutz Patroni (https://github.com/zalando/patroni) hierfür. Es scheint anfangs Overhead zu sein, aber es lohnt sich. Ist aber in meinem Fall alles self made. Mittlerweile gibt es auch von Percona eine PostgreSQL Patroni "Distribution". Die solltest du dir unbedingt anschauen: https://www.percona.com/software/postgresql-distribution
Gemeinsamen Storage gibt es hier nicht, das ist nur bei RAC so. Bei Postgres und MySQL läuft das grundsätzlich immer so, dass jeder node die Daten hat. (Außer der Arbitrator wenn vorhanden)
Für Rolling Upgrades benutze ich den postgres operator (https://github.com/zalando/postgres-operator), aber dafür muss man auch k8s einsetzen.
 
  • Gefällt mir
Reaktionen: PHuV
Zurück
Oben