Postgres con architettura pgpool


9

Di seguito è riportato un esempio di architettura pgpool:

inserisci qui la descrizione dell'immagine

Questo implica che devi avere solo pgpool su un singolo server; è vero? Quando guardo la configurazione vedo anche che configuri backend all'interno pgpool.conf; quindi implica ulteriormente questo. Ma non spiega perché vedo pgpool anche su server back-end.

Quando guardo la documentazione vedo anche:

Se si utilizza PostgreSQL 8.0 o versioni successive, si consiglia vivamente di installare la funzione pgpool_regclass su tutti PostgreSQL a cui accede pgpool-II, poiché viene utilizzato internamente da pgpool-II.

Quindi non sono sicuro di cosa pensare; se è meglio avere pgpool su tutti i backend o solo su un server dedicato?


se stai cercando l'alta disponibilità, probabilmente vuoi due server pgpool di fronte ad almeno 2 server postgresql (tutti su scatole diverse)
Neil McGuigan

Risposte:


10

Generalmente non si installa Pgpool sui server back-end. Quello che vedi nella tua foto è la configurazione più comune. Pgpool è un server autonomo che si trova essenzialmente di fronte ai database. I due server Postgres sono spesso configurati con replica in streaming; con l'uno il padrone e l'altro lo schiavo.

Ciò consente a Pgpool di bilanciare il carico di tutte le query di lettura tra i due (o più) database. Qualsiasi query che implichi qualsiasi scrittura, verrà instradata al server principale che a sua volta si replica allo slave.

Come ha detto @Neil McGuigan , puoi anche avere più server Pgpool per ottenere una migliore disponibilità elevata. Tecnicamente potresti installare Pgpool sui server di database in questa configurazione, ma sarebbe una cattiva pratica. L'esecuzione di più server Pgpool è una configurazione molto più complessa. Se questa è la prima volta con Pgpool, inizierei con un server Pgpool prima di farne funzionare due.

In entrambe le configurazioni, il server delle applicazioni ritiene che si stia semplicemente connettendo a un singolo database Postgres.

A proposito pgpool_regclass, che dovrebbe davvero essere una domanda separata, questo è dalle FAQ di Pgpool :

Se si utilizza PostgreSQL 8.0 o versioni successive, si consiglia vivamente di installare la funzione pgpool_regclass su tutti PostgreSQL a cui accede pgpool-II, poiché viene utilizzato internamente da pgpool-II. Senza questo, la gestione di nomi di tabella duplicati in diversi schemi potrebbe causare problemi (le tabelle temporanee non sono un problema).

Se stai usando PostgreSQL 9.4.0 o successivo e pgpool-II 3.3.4 o successivo, 3.4.0 o successivo, non è necessario installare pgpool_regclass poiché PostgreSQL 9.4 ha pgpool_regclass incorporato come la funzione "to_regclass".

Se ti serve, è solo un po 'di codice SQL eseguito sul tuo server master Postgres per aggiungere una funzione che Pgpool usa.

Con regclass, c'è un ulteriore passaggio che devi fare (stavo pensando a insert_lock). Se stai compilando dal sorgente (generalmente la maggior parte delle distribuzioni ha versioni davvero obsolete di Pgpool), dovrai compilare anche una libreria di Postgres.

Se hai compilato dal sorgente, dovrai andare nella .../pgpool-II-3.X.X/src/sql/pgpool-regclasscartella e fare un ./configure; make.

Copia il file pgpool-regclass.so nella directory delle estensioni di Postgres. Sul mio server Ubuntu 14.04 (solo utilizzando il pacchetto di Postgres 9.3 installazione), che si trova all'indirizzo: /usr/lib/postgresql/9.3/lib. Ricordati di farlo per tutti i server Postgres.

Una volta completato, puoi eseguire pgpool-regclass.sqlsul master. Questo mappa semplicemente la pgpool_regclassfunzione sulla libreria su cui hai copiato.


1

Come per tutto il resto, ci sono molti modi in cui è possibile realizzare la distribuzione ad alta disponibilità. Qui suggerirò qualcosa della mia esperienza (la mia implementazione HA):

  1. È sempre meglio avere più istanze di pgpool2 invece di una sola. Il motivo è ovvio: single pgpool2 è un singolo punto di errore. Dal momento che pgpool ha introdotto la funzione watchdog, è facile da realizzare.
  2. Generalmente è leggermente meglio avere istanze pgpool2 su macchine separate piuttosto che condividere la stessa macchina tra il backend PostgreSQL e pgpool2. Ma non ci sono svantaggi significativi anche se li esegui sullo stesso server di PostgreSQL. (Nella mia implementazione HA ogni macchina esegue un'istanza PostgreSQL e un'istanza pgpool2.)

Infine ti consiglierò questo tutorial passo-passo che ti guiderà da zero (installazione del server PostgreSQL ...) per completare l'implementazione ad alta disponibilità. Il tutorial menzionato descrive l'implementazione che uso.

Spero abbia aiutato.

AGGIORNAMENTO: Grazie @Moshe Katz - il collegamento è stato modificato. Ora aggiornato qui, anche nel post originale.


2
Il sito web da te indicato itenlight.com/blog/2016/05/18/… sembra essere inattivo. Puoi dare un'occhiata?
user6807024

Sembra che l'articolo sia ora disponibile su fatdragon.me/blog/2016/05/postgresql-ha-pgpool-ii-part-1
Moshe Katz
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.