Hallo,
wir planen, einen hochverfügbaren PostGreSQL “Cluster” zu installieren, bestehend aus drei Streaming-Replikas.
Wir nutzen Patroni, etcd, HA Proxy. Soweit ist alles klar und gut beschrieben.
Als Backup Lösung werden wir pgBackRest einsetzen.
Leider lässt PG die Wiederherstellung einzelner Datenbanken einer Instanz nicht ohne weiteres zu (außer Ersatzinstanz und pg_Dump), sodass wir überlegen, die HA Lösung mit mehreren Instanzen aufzusetzen. Jede Instanz enthält eine Anwendungsdatenbank und wird separat gesichert und bei Bedarf wieder hergestellt.
Ist es möglich, dass Patroni die Replikation mehrere Instanzen die in einem PG-Binary laufen, steuern und verwalten kann. Kann ich evtl. sogar, die Master-Instanzen auf dem PostGres Cluster verteilen.
Hat jemand mit diesem Konstrukt Erfahrungen und ist dies praktikabel?
Lieben Dank
Peter
wir hatten mal was Ähnliches – mehrere Instanzen pro Knoten gehen, aber du brauchst für jede eine eigene Patroni-Config und einen eigenen Prozess. Patroni kann das verwalten, aber ist nicht ganz trivial.
Master auf verschiedene Knoten zu verteilen klappt grundsätzlich, wird aber schnell komplex im Handling.
Kommt also drauf an, ob sich der Aufwand für euch lohnt.
Danke dir.
Ich hab es im Labor mal aufgebaut und es läuft soweit.
Wie du schon sagst, du brauchst eine eigene Patroniinstanz (siehe auch dbi Blog) - geht aber auch gut.
Inwieweit sich die Instanzen CPU wegnehmen muss ich nochmal testen.
Dafür gibt es wohl pgcgroup.
Wenn du von pg_cgroups sprichst, so ist das praktisch toter Code. Es unterstützt nur Control Groups v1, und alle Linux-Distributionen (außer vielleicht sehr alten Enterprise-tauglichen) verwenden cgroups v2. Als ich es damals geschrieben habe, war das Echo derart unterwältigend, daß ich mich nicht weiter damit beschäftigt habe. Ich nehme an, die Leute, die so eine Funktionalität wollen, nehmen heutzutage Container.
Zu meiner Überraschung habe ich auch pg_cgroup gefunden, zu dem ich nicht viel sagen kann, außer daß es 7 Jahre alt ist. Aber vielleicht ist es flexibler.
Vielen Dank für die wertvollen Hinweise.
Wir sind noch am sondieren der Möglichkeiten, aber die Instanzen müssen irgendwie sinnvoll limitiert werden.
Das Problem ist eigentlich die sperrige Möglichkeit zum Restore einer einzelnen DB (PIT) in einer Instanz, daher die Auftrennung in Instanzen. Oder gibt es da mittlerweile andere Möglichkeiten? Mir gefallen die vielen Instanzen im Replikaset auch nicht.
Ich kenne nur die Möglichkeit, die gesamte Instanz auf einer Ersatzumgebung wieder herstellen und ein Ex- und Import der DB.
Es schreit förmlich nach einer Containerlösung, was aber nicht gewünscht wird
Das ist überhaupt kein Problem. Einfach zwei virtuelle Maschinen für jede Instanz verwenden (zusätzlich zu den drei etcd-Instanzen für alle. Dann ist alles softwaretechnisch sauber getrennt.
Wenn die Nichtwünscher der Containerlösung dann mit den Zähnen knirschen, weil so viele VMs benötigt werden: Zahnschutz besorgen.