Unten finden Sie ein Beispiel für eine pgpool-Architektur:
Dies bedeutet, dass Sie pgpool nur auf einem einzelnen Server haben müssen. Ist das wahr? Wenn ich mir die Konfiguration ansehe, sehe ich auch, dass Sie Backends innerhalb konfigurieren pgpool.conf
. also impliziert es dies weiter. Aber es erklärt nicht, warum ich pgpool auch auf Backend-Servern sehe.
Wenn ich mir die Dokumentation ansehe, sehe ich auch:
Wenn Sie PostgreSQL 8.0 oder höher verwenden, wird dringend empfohlen, die Funktion pgpool_regclass auf allen PostgreSQL zu installieren, auf die pgpool-II zugreifen soll, da sie intern von pgpool-II verwendet wird.
Ich bin mir also nicht sicher, was ich denken soll. ob es empfehlenswert ist, pgpool auf allen backends oder nur auf einem dedizierten server zu haben?
quelle
Antworten:
Im Allgemeinen würden Sie Pgpool nicht auf den Backend-Servern installieren. Was Sie in Ihrem Bild sehen, ist die häufigste Konfiguration. Pgpool ist ein eigenständiger Server, der sich im Wesentlichen vor den Datenbanken befindet. Die beiden Postgres-Server werden häufig mit Streaming-Replikation konfiguriert. Der eine ist der Meister und der andere der Sklave.
Dadurch kann Pgpool alle Leseabfragen zwischen den zwei (oder mehr) Datenbanken ausgleichen. Alle Abfragen, die Schreibvorgänge beinhalten, werden an den Master-Server weitergeleitet, der sich wiederum auf den Slave repliziert.
Wie @Neil McGuigan sagte , können Sie auch mehrere Pgpool-Server haben, um eine bessere Hochverfügbarkeit zu erzielen. Technisch gesehen könnten Sie Pgpool in dieser Konfiguration auf den Datenbankservern installieren, dies wäre jedoch eine schlechte Vorgehensweise. Das Ausführen mehrerer Pgpool-Server ist eine viel komplexere Konfiguration. Wenn Sie zum ersten Mal mit Pgpool arbeiten, würde ich mit einem Pgpool-Server beginnen, bevor zwei zum Laufen kommen.
In beiden Konfigurationen glaubt Ihr Anwendungsserver, dass nur eine Verbindung zu einer einzelnen Postgres-Datenbank hergestellt wird.
Über
pgpool_regclass
, was eigentlich eine separate Frage sein sollte, ist dies aus den Pgpool FAQ :Wenn Sie dies benötigen, wird nur ein SQL-Code auf Ihrem Postgres-Masterserver ausgeführt, um eine von Pgpool verwendete Funktion hinzuzufügen.
Mit regclass müssen Sie einen zusätzlichen Schritt ausführen (ich habe an insert_lock gedacht). Wenn Sie aus dem Quellcode kompilieren (im Allgemeinen haben die meisten Distributionen wirklich veraltete Versionen von Pgpool), müssen Sie auch eine Postgres-Bibliothek kompilieren.
Wenn Sie aus dem Quellcode kompiliert haben, müssen Sie in den
.../pgpool-II-3.X.X/src/sql/pgpool-regclass
Ordner gehen und a./configure; make
.Kopieren Sie die Datei pgpool-regclass.so in das Postgres-Erweiterungsverzeichnis. Auf meinem Ubuntu 14.04-Server (nur mit der Postgres 9.3-Paketinstallation) befindet es sich unter :
/usr/lib/postgresql/9.3/lib
. Denken Sie daran, dies für alle Postgres-Server zu tun .Sobald dies abgeschlossen ist, können Sie
pgpool-regclass.sql
auf dem Master ausgeführt werden. Dadurch wird diepgpool_regclass
Funktion nur der Bibliothek zugeordnet, über die Sie kopiert haben.quelle
Wie bei allem anderen gibt es viele Möglichkeiten, wie Sie Ihre Hochverfügbarkeitsbereitstellung durchführen können. Hier werde ich etwas aus meiner Erfahrung vorschlagen (meine eigene HA-Implementierung):
Abschließend empfehle ich dieses Schritt-für-Schritt-Tutorial , das Sie von Grund auf führt (Installation des PostgreSQL-Servers ...), um die Implementierung mit hoher Verfügbarkeit abzuschließen. Das erwähnte Tutorial beschreibt die Implementierung, die ich benutze.
Ich hoffe es hat geholfen.
UPDATE: Danke @Moshe Katz - der Link hat sich geändert. Jetzt hier aktualisiert, auch im Originalbeitrag.
quelle