Postgres mit pgpool Architektur


9

Unten finden Sie ein Beispiel für eine pgpool-Architektur:

Geben Sie hier die Bildbeschreibung ein

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?


Wenn Sie hohe Verfügbarkeit anstreben, möchten Sie wahrscheinlich zwei pgpool-Server vor mindestens zwei Postgresql-Servern (alle auf verschiedenen Boxen)
Neil McGuigan

Antworten:


10

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 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. Ohne dies kann die Behandlung doppelter Tabellennamen in verschiedenen Schemata zu Problemen führen (temporäre Tabellen sind kein Problem).

Wenn Sie PostgreSQL 9.4.0 oder höher und pgpool-II 3.3.4 oder höher, 3.4.0 oder höher verwenden, müssen Sie pgpool_regclass nicht installieren, da in PostgreSQL 9.4 die Funktion pgpool_regclass wie "to_regclass" integriert ist.

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-regclassOrdner 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.sqlauf dem Master ausgeführt werden. Dadurch wird die pgpool_regclassFunktion nur der Bibliothek zugeordnet, über die Sie kopiert haben.


1

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):

  1. Es ist immer besser, mehrere pgpool2-Instanzen anstelle einer einzigen zu haben. Der Grund liegt auf der Hand: Single Pgpool2 ist Single Point of Failure. Da pgpool die Watchdog-Funktion eingeführt hat, ist dies einfach durchzuführen.
  2. Im Allgemeinen ist es etwas besser, pgpool2-Instanzen auf separaten Computern zu haben, als denselben Computer zwischen PostgreSQL-Backend und pgpool2 gemeinsam zu nutzen. Aber es gibt keinen wesentlichen Nachteil, selbst wenn Sie sie auf demselben Server wie PostgreSQL ausführen. (In meiner HA-Implementierung führt jeder Computer eine PostgreSQL-Instanz und eine pgpool2-Instanz aus.)

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.


2
Die von Ihnen genannte Website itenlight.com/blog/2016/05/18/… scheint nicht verfügbar zu sein. Kannst du dir das mal ansehen?
user6807024

Es sieht so aus, als ob der Artikel jetzt unter fatdragon.me/blog/2016/05/postgresql-ha-pgpool-ii-part-1
Moshe Katz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.