web-dev-qa-db-fra.com

Postgres avec architecture PGPOOL

Vous trouverez ci-dessous un exemple d'architecture PGPOOL:

enter image description here

Cela implique que vous n'avez besoin que de PGPOOL sur un seul serveur; Est-ce vrai? Lorsque je regarde la configuration, je vois aussi que vous configurez des backends dans pgpool.conf; Donc, cela implique en outre cela. Mais cela n'explique pas pourquoi je vois aussi PGPOOL sur les serveurs de backend.

En regardant par-dessus la documentation Je vois aussi:

Si vous utilisez PostgreSQL 8.0 ou version ultérieure, Installation de la fonction PGPool_ReGcLass sur tout PostgreSQL à accéder par PGPOOL-II est fortement recommandée, car elle est utilisée en interne par PGPOOL-II.

Donc, je ne suis pas sûr de quoi penser; Si c'est la meilleure pratique d'avoir PGPOOL sur tous les backends ou simplement un serveur dédié?

9
user20459

Généralement, vous n'installeriez pas PGPOOL sur les serveurs Backend. Ce que vous voyez dans votre image est la configuration la plus courante. PGPOOL est un serveur autonome qui repose essentiellement devant les bases de données. Les deux serveurs Postgres sont souvent configurés avec une réplication en continu; avec un être le maître et l'autre l'esclave.

Cela permet à PGPool de charger la balance toutes les requêtes de lecture entre les deux (ou plus) bases de données. Toute requête impliquant des écrires, sera acheminée vers le serveur maître qui se reproduit à son tour sur l'esclave.

Comme @ Neil McGuigan a déclaré , vous pouvez également avoir plusieurs serveurs PGPOOL pour obtenir une meilleure haute disponibilité. Techniquement, vous pouvez installer PGPool sur les serveurs de base de données dans cette configuration, mais ce serait une mauvaise pratique. Exécuter plusieurs serveurs PGPOOL est une configuration beaucoup plus complexe. Si c'est votre première fois avec PGPool, je commencerais avec un serveur PGPOOL avant de vous rendre au travail.

Dans l'une ou l'autre configuration, votre serveur d'applications pense qu'il ne se connecte simplement à une seule base de données Postgres.

À propos de pgpool_regclass, qui devrait vraiment être une question distincte, Ceci est de la FAQ PGPOOL :

Si vous utilisez PostgreSQL 8.0 ou version ultérieure, Installation de la fonction PGPool_ReGcLass sur tout PostgreSQL à accéder par PGPOOL-II est fortement recommandée, car elle est utilisée en interne par PGPOOL-II. Sans cela, la manipulation de noms de table en double dans différents schéma pourrait causer des problèmes (des tables temporaires ne sont pas un problème).

Si vous utilisez PostgreSQL 9.4.0 ou version ultérieure et PGPOOL-II 3.3.4 ou version ultérieure, 3.4.0 ou version ultérieure, vous n'avez pas besoin d'installer pGpool_ReGclass car PostgreSQL 9.4 a intégré PGPool_regclass comme fonction "to_regclass".

Si vous en avez besoin, il s'agit simplement d'un code SQL exécuté sur votre serveur Master Postgres pour ajouter une fonction Utilisations de PGPOOL.

Avec RegClass, vous devez faire une étape supplémentaire (je pensais à insert_lock). Si vous compilez de la source (généralement la plupart des distributions ont des versions vraiment obsolètes de PGPool), vous devrez également compiler une bibliothèque Postgres.

Si vous avez compilé de la source, vous devrez entrer dans le .../pgpool-II-3.X.X/src/sql/pgpool-regclass Dossier et faire un ./configure; make.

Copiez le fichier pgpool-regclass.so dans le répertoire d'extension Postgres. Sur mon serveur Ubuntu 14.04 (à l'aide de l'installation de package Postgres 9.3), il est situé à: /usr/lib/postgresql/9.3/lib. N'oubliez pas de faire cela pour Tous Serveurs Postgres.

Une fois que c'est complet, vous pouvez exécuter pgpool-regclass.sql sur le maître. Ceci vient de mapper le pgpool_regclass Fonction à la bibliothèque que vous avez copiée.

10
Trevor Dell

Comme pour tout le reste, vous pouvez accomplir votre déploiement de haute disponibilité. Ici, je vais suggérer quelque chose de mon expérience (ma propre implémentation ha):

  1. Il est toujours préférable d'avoir plusieurs instances PGPOOL2 au lieu d'une seule. La raison est évidente: Single PGPool2 est un point unique de défaillance. Puisque PGPool a introduit la fonctionnalité de surveillance, il est facile d'accomplir.
  2. Généralement, il est légèrement préférable d'avoir des instances PGPOOL2 sur des machines distinctes que de partager la même machine entre Backend PostgreSQL et PGPOOL2. Mais il n'y a pas d'inconvénient significatif, même si vous les exécutez sur le même serveur que PostgreSQL. (Dans ma mise en œuvre de mon HA, chaque machine exécute une instance postgreSQL et une instance PGPOOL2.)

Enfin, je recommanderai ce didacticiel étape par étape qui vous mènera à partir de zéro (installer PostgreSQL Server ...) pour compléter la mise en œuvre de la haute disponibilité. Le didacticiel mentionné décrit la mise en œuvre que j'utilise.

J'espère que cela a aidé.

MISE À JOUR: Merci @MOSHE KATZ - Le lien a changé. Maintenant mis à jour ici, dans le message original aussi.

1
Aleksandar Pesic