Postgres con arquitectura pgpool

9

A continuación se muestra un ejemplo de arquitectura pgpool:

ingrese la descripción de la imagen aquí

Esto implica que solo necesita tener pgpool en un único servidor; ¿Es esto cierto? Cuando miro la configuración, también veo que configuras backends pgpool.conf; así que esto implica más. Pero, no explica por qué veo pgpool en los servidores de fondo también.

Cuando reviso la documentación también veo:

Si está utilizando PostgreSQL 8.0 o posterior, se recomienda encarecidamente instalar la función pgpool_regclass en todos los PostgreSQL a los que accede pgpool-II, ya que pgpool-II lo utiliza internamente.

Entonces no estoy seguro de qué pensar; si es una buena práctica tener pgpool en todos los servidores o solo un servidor dedicado?

Erwin Brandstetter
fuente
si busca alta disponibilidad, probablemente quiera dos servidores pgpool frente a al menos 2 servidores postgresql (todos en diferentes cajas)
Neil McGuigan

Respuestas:

10

En general, no instalaría Pgpool en los servidores de fondo. Lo que ves en tu imagen es la configuración más común. Pgpool es un servidor independiente que esencialmente se encuentra frente a las bases de datos. Los dos servidores Postgres a menudo se configuran con replicación de transmisión; siendo uno el amo y el otro el esclavo.

Esto permite que Pgpool equilibre la carga de todas las consultas de lectura entre las dos (o más) bases de datos. Cualquier consulta que involucre escrituras se enrutará al servidor maestro, que a su vez se replica al esclavo.

Como dijo @Neil McGuigan , también puede tener múltiples servidores Pgpool para lograr una mejor disponibilidad. Técnicamente, podría instalar Pgpool en los servidores de bases de datos en esta configuración, pero esto sería una mala práctica. Ejecutar múltiples servidores Pgpool es una configuración mucho más compleja. Si esta es su primera vez con Pgpool, comenzaría con un servidor Pgpool antes de que funcionen dos.

En cualquiera de las configuraciones, su servidor de aplicaciones cree que solo se está conectando a una única base de datos Postgres.

Acerca de pgpool_regclass, que realmente debería ser una pregunta separada, esto es de las preguntas frecuentes de Pgpool :

Si está utilizando PostgreSQL 8.0 o posterior, se recomienda encarecidamente instalar la función pgpool_regclass en todos los PostgreSQL a los que accede pgpool-II, ya que pgpool-II lo utiliza internamente. Sin esto, el manejo de nombres de tablas duplicados en diferentes esquemas puede causar problemas (las tablas temporales no son un problema).

Si está utilizando PostgreSQL 9.4.0 o posterior y pgpool-II 3.3.4 o posterior, 3.4.0 o posterior, no necesita instalar pgpool_regclass ya que PostgreSQL 9.4 tiene incorporado pgpool_regclass como la función "to_regclass".

Si necesita esto, es solo un código SQL ejecutado en su servidor maestro de Postgres para agregar una función que Pgpool utiliza.

Con regclass, hay un paso adicional que debes hacer (estaba pensando en insert_lock). Si está compilando desde la fuente (generalmente la mayoría de las distribuciones tienen versiones realmente desactualizadas de Pgpool), también deberá compilar una biblioteca de Postgres.

Si compiló desde la fuente, tendrá que ir a la .../pgpool-II-3.X.X/src/sql/pgpool-regclasscarpeta y hacer un ./configure; make.

Copie el archivo pgpool-regclass.so en el directorio de extensión de Postgres. En mi servidor de Ubuntu 14.04 (solo usando el paquete Postgres 9.3 instalación), se encuentra en: /usr/lib/postgresql/9.3/lib. Recuerde hacer esto para todos los servidores de Postgres.

Una vez que se haya completado, puede ejecutar pgpool-regclass.sqlen el maestro. Esto solo asigna la pgpool_regclassfunción a la biblioteca que copió.

Trevor Dell
fuente
1

Al igual que con todo lo demás, hay muchas maneras en que puede lograr su implementación de alta disponibilidad. Aquí sugeriré algo de mi experiencia (mi propia implementación de HA):

  1. Siempre es mejor tener varias instancias de pgpool2 en lugar de una sola. La razón es obvia: un solo pgpool2 es un único punto de falla. Dado que pgpool ha introducido la función de vigilancia, es fácil de lograr.
  2. En general, es un poco mejor tener instancias de pgpool2 en máquinas separadas que compartir la misma máquina entre el backend de PostgreSQL y pgpool2. Pero no hay inconvenientes significativos, incluso si los ejecuta en el mismo servidor que PostgreSQL. (En mi implementación de HA, cada máquina ejecuta una instancia de PostgreSQL y una instancia de pgpool2).

Finalmente, recomendaré este tutorial paso a paso que lo guiará desde cero (instalando el servidor PostgreSQL ...) para completar la implementación de alta disponibilidad. El tutorial mencionado describe la implementación que uso.

Espero que haya ayudado.

ACTUALIZACIÓN: Gracias @Moshe Katz: el enlace cambió. Ahora actualizado aquí, en la publicación original también.

Aleksandar Pesic
fuente
2
El sitio web señalado por usted itenlight.com/blog/2016/05/18/… parece estar caído. ¿Puedes echar un vistazo?
user6807024
Parece que el artículo ya está disponible en fatdragon.me/blog/2016/05/postgresql-ha-pgpool-ii-part-1
Moshe Katz