Last modified: Sun Jan 30 09:14:28 JST 2011
Bienvenue sur la page de pgpool-II


pgpool-II

pgpool-II est un middleware qui se place entre les serveurs PostgreSQL et les clients de ces derniers. Voici ses différentes fonctionalités:

  • Pooling de connexions
  • pgpool-II maintient les connexions établies aux serveurs PostgreSQL et les réutilise dès qu'une nouvelle connexion partageant les mêmes propriétés (c'est-à-dire même utilisateur, même base de données et même version de protocole) arrive. Il réduit ainsi le coût de la connexion et améliore les performances générales du système.

  • Réplication
  • pgpool-II peut gérer plusieurs serveurs PostgreSQL. En activant le mode réplication, il devient possible de créer une sauvegarde continue sur d'autres instances PostgreSQL, afin que le service puisse continuer sans interruption si l'une de ces instances était défaillante.

  • Répartition de charge
  • Si une base de données est répliquée, exécuter une requête en SELECT sur n'importe lequel de ceux-ci retournera le même résultat. pgpool-II profite ainsi avantageusement de la réplication pour réduire la charge sur chacun des serveurs PostgreSQL. Il parvient à cela en distribuant les requêtes SELECT entre tous les serveurs disponibles, ce qui qui améliore les performances générales du système. Dans un scénario idéal, les performances en lecture s'améliorent proportionnellement au nombre de serveurs PostgreSQL. La répartition de charge avec pgpool-II fonctionne au mieux dans un scénario où il y a beaucoup d'utilisateurs qui exécutent beaucoup de requêtes en lecture au même moment.

  • Limitation des connexions excédentaires
  • Dans PostgreSQL, il y a une limite maximum du nombre de connexions concurrentes au serveur (NDT: paramètre max_connections), et toutes les nouvelles connexions sont rejettées une fois que ce nombre est atteint. Augmenter ce nombre est possible mais accroît la consommation de ressources par le serveur et a un impact négatif sur les performances générales du système. Bien que pgpool-II ait aussi une limite sur le nombre de connexions maximum, il va mettre toute connexion excédentaire dans une file d'attente au lieu de retourner immédiatement une erreur.

  • Requêtes parallèlisées
  • En utilisant la fonctionalité des requêtes parallèlisées, les données peuvent être réparties sur plusieurs serveurs afin que les requêtes puissent être exécutées sur tous les serveurs à la fois, en réduisant ainsi le temps d'exécution global de la requête. Cette fonctionalité donne les meilleurs résultats lorsqu'on cherche à extraire un très grand ensemble de données.

pgpool-II utilise le même protocole que le serveur et les clients PostgreSQL, et relaie les messages entre les deux. Ainsi, une application cliente va prendre pgpool-II pour le serveur, et ce dernier va voir pgpool-II comme une application cliente. Puisque pgpool-II est complètement transparent, il peut-être utilisé pour une application sans pratiquement rien changer de son code source.

Il y a cependant quelques restrictions à l'utilisation du SQL via pgpool-II. Veuillez vous reporter à la section Restrictions pour plus de détails.

Plates-formes supportées

pgpool-II fonctionne sous Linux, Solaris, FreeBSD et la plupart des architectures UNIX. Windows n'est pas supporté. Les versions 6.4 et ultérieures de PostgreSQL sont supportées. Cependant, pour utiliser la fonctionalité de requêtage en parallèle, vous devez avoir un serveur en version 7.4 ou supérieure.

Si vous utilisez PostgreSQL en version 7.3 ou inférieure, certaines fonctionnalités de pgpool-II ne seront pas disponibles. Cependant, vous ne devriez pas utiliser une si vieille version de toute façons.

Vous devez aussi être certain que vos serveurs PostgreSQL sont tous dans la même version majeure. De plus, les architectures matérielles et logicielles (systèmes d'exploitation) doivent-être identiques si vous voulez utiliser la technologie « online recovery ».

Installation de pgpool-II

pgpool-II est téléchargeable sur la page de développement de pgpool. Plusieurs packages sont aussi fournis pour diverses plates-formes incluant CentOS, RedHat Enterprise Linux, Fedora et Debian.

Le code source de pgpool-II est téléchargeable sur la page de développement de pgpool.

Pour installer pgpool-II depuis son code source, vous aurez besoin de gcc, en version 2.9 ou supérieure, et de GNU make. pgpool-II utilisant la bibliothèque libpq de PostgreSQL, celle-ci doit aussi être installée ainsi que les fichiers d'en-tête sur la machine utilisée pour compiler pgpool-II. Si vous souhaitez activer le support d'OpenSSL dans pgpool-II, il vous faudra aussi avoir cette bibliothèque ainsi que les fichiers d'en-tête relatifs installés sur la machine de compilation.

Configuration

Après avoir extrait les sources depuis l'archive, exécutez le script de configuration comme suit.

./configure
Plusieurs options de configuration ont des valeurs par défaut, mais vous pouvez cependant les surcharger comme suit :
  • --prefix=path
    Les binaires de pgpool-II ainsi que sa documentation seront installés dans ce répertoire. La valeur par défaut est /usr/local.
  • --with-pgsql=path
    Répertoire sous lequel les bibliothèques de PostgreSQL sont installées. La valeur par défaut est fournie par l'utilitaire pg_config.
  • --with-openssl
    Avec cette option, les binaires de pgpool-II seront compilés avec le support d'OpenSSL. Par défaut, le support d'OpenSSL est désactivé.

Compilation

make
make install
Ces deux commandes suffisent pour compiler et installer pgpool-II. Si vous utilisez Solaris ou FreeBSD, remplacez make par gmake.

Installation de pgpool_regclass

Si vous utilisez PostgreSQL 8.0 ou supérieur, l'installation des fonctions pgpool_regclass, utiles à pgpool-II, est fortement recommandée. Sans celles-ci, le support de tables homonymes mais figurant dans des schémas différents pourrait ne pas fonctionner correctement (pour les tables temporaires, il n'y a aucun problème).

cd pgpool-II-x.x.x/sql/pgpool-regclass
make
make install
psql -f pgpool-regclass.sql template1

L'exécution du script pgpool-regclass.sql doit être faite sur toutes les bases qui sont accédées via pgpool-II. Vous n'avez pas besoin de le faire pour toutes les bases de données créées après l'exécution des commandes ci-dessus car la base template1 est la base utilisée comme modèle par défaut pour les nouvelles bases de données sous PostgreSQL.

Installation de pgpool_walrecrunning

Si vous utilisez PostgreSQL 9.0 ou supérieur avec le « streaming replication », vous aurez besoin d'installer la fonction pgpool_walrecrunning sur tous les serveurs PostgreSQL accedées par pgpool-II.

cd pgpool-II-x.x.x/sql/pgpool-walrecrunning
make
make install
psql -f pgpool-walrecrunning.sql template1

L'exécution du script pgpool-walrecrunning.sql doit-être faite sur toutes les bases de données accedées par pgpool-II. Comme précedemment, vous n'avez pas besoin de le faire pour toutes les bases de données créées après l'exécution des commandes ci-dessus car la base template1 est la base utilisée comme modèle par défaut pour les nouvelles bases de données sous PostgreSQL.

Configuration de pgpool-II

Les fichiers de configuration par défaut de pgpool-II sont /usr/local/etc/pgpool.conf et /usr/local/etc/pcp.conf. Plusieurs modes de fonctionnement sont disponibles sous pgpool-II. Chaque mode a des fonctionnalités associées qui peuvent être activées ou désactivées, mais aussi configurées pour contrôler leur comportement.

Fonction/Mode Raw Mode (*3) Mode réplication Mode maître/esclave Mode de requêtage en parallèle
Pooling de connexions X O O O
Réplication X O X (*1)
Répartition de charge X O O (*1)
Failover O O O X
Online recovery X 0 (*2) X
Requêtage en parallèle X X X O
Nombre de serveurs requis 1 ou plus 2 ou plus 2 ou plus 2 ou plus
Base de donnée système requise? non non non oui

  • 0 signifie 'disponible' et X 'indisponible'
  • (*1) Le mode de requêtage en parallèle nécessite que la réplication et la répartition de charge soient activés, cependant la réplication et la répartition de charge ne peuvent pas être utilisés pour les tables distribuées en mode de requêtage parallèlisé.
  • (*2) Le online recovery peut-être utilisé en mode maître/esclave avec la « Streaming Replication ».
  • (*3) Les clients se connectent simplement aux serveurs PostgreSQL via pgpool-II. Ce mode est utile pour limiter simplement les connexions excédentaires aux serveurs, ou activer le failover avec de multiples serveurs.

Configuration de pcp.conf

Une interface de contrôle est fournie avec pgpool-II et permet à l'administrateur de vérifier l'état de pgpool-II et d'arrêter les processus de pgpool-II à distance. pcp.conf est le fichier contenant la définition des utilisateurs et de leurs mots de passe pour accéder à cette interface. Tous les modes d'utilisation de pgpool-II nécessitent que le fichier pcp.conf soit renseigné. Un fichier d'exemple $prefix/etc/pcp.conf.sample est créé lors de l'installation de pgpool-II. Renommez ce fichier en pcp.conf, ajoutez-y votre nom d'utilisateur ainsi que votre mot de passe.

cp $prefix/etc/pcp.conf.sample $prefix/etc/pcp.conf

Une ligne vide ou commençant par un dièse (#) est traitée comme un commentaire et sera ignorée. Un nom d'utilisateur et son mot de passe doivent être écrits sur une seule ligne et respecter le format suivant :

nom_d_utilisateur:[mot de passe crypté en md5]

Le [mot de passe crypté en md5] peut être obtenu avec la commande $prefix/bin/pg_md5.

pg_md5 -p
password: <votre mot de passe>

ou

./pg_md5 foo
acbd18db4cc2f85cedef654fccc4a4d8

Le fichier pcp.conf doit être lisible par l'utilisateur qui exécute pgpool-II.

Configuration de pgpool.conf

Comme cela a déjà été expliqué, chaque mode de pgpool-II a ses propres paramètres de configuration dans le fichier pgpool.conf. Un fichier d'exemple $prefix/etc/pgpool.conf.sample est créé lors de l'installation de pgpool-II. Renommez ce fichier en pgpool.conf et éditez son contenu.

cp $prefix/etc/pgpool.conf.sample $prefix/etc/pgpool.conf

Toute ligne vide ou commençant par "#" sera traitée comme un commentaire et sera donc ignorée.

Paramètres communs

listen_addresses

Spécifie le nom de la machine ou son adresse IP, sur laquelle pgpool-II acceptera les connexions TCP/IP. '*' accepte toutes les connexions. '' empêchera toute connexion TCP/IP. La valeur par défaut est 'localhost'. Les connexions via les sockets UNIX sont toujours acceptées. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

port

Spécifie le numéro de port sur lequel pgpool-II écoute les connexions. La valeur par défaut est 9999. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

socket_dir

Répertoire dans lequel sera créé le socket UNIX de pgpool-II pour les connexions entrantes. La valeur par défaut est '/tmp'. Faites attention au fait que ce socket pourrait être effacé par une tâche programmée en cron. Aussi, nous vous recommandons de configurer cette valeur à '/var/run' ou un répertoire de ce type. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

pcp_port

Numéro de port sur lequel le processus PCP accepte les connexions. La valeur par défaut est 9898. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

pcp_socket_dir

Chemin du répertoire UNIX où le socket UNIX acceptant les connexions pour les commandes PCP est créé. La valeur par défaut est '/tmp'. Faites attention au fait que cet socket pourrait être effacé par une tâche programmée en cron. Aussi, nous vous recommandons de configurer cette valeur à '/var/run' ou un répertoire de ce type. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

backend_socket_dir

À NE PLUS UTILISER Ce paramètre n'est présent que pour garantir la cohérence avec la politique par défaut de la bibliothèque libpq. Reportez-vous à la définition du paramètre backend_hostname pour adapter votre configuration.

Ce paramètre permettait de définir le répertoire UNIX servant au serveur PostgreSQL.

pcp_timeout

Délai maximum en secondes pour l'établissement d'une connexion PCP. Si un client ne répond plus au bout de cette valeur en secondes, le processus PCP ferme la connexion avec le client. La valeur par défaut est de 10 secondes. 0 signifie que la vérification du délai est désactivée. Ce paramètre est pris en compte lors du rechargement des fichiers de configuration.

num_init_children

Nombre de processus pré-forkés de pgpool-II. La valeur par défaut est de 32. num_init_children est aussi la limite du nombre de connexions clientes concurrentes à pgpool-II. Si plus de num_init_children clients essaient de se connecter à pgpool-II, ceux-ci sont bloqués (mais pas rejettés), jusqu'à ce qu'une connexion à l'un des processus de pgpool-II soit fermé. On peut avoir ansi jusqu'à deux fois num_init_children clients dans la queue de connexion.

Quelques précisions et astuces :

  • L'annulation d'une requête crée une autre connexion au processus serveur PostgreSQL ; ainsi, une requête ne peut pas être annulée si toutes les connexions sont utilisées. Si vous voulez vous assurer que les requêtes puissent être annulées, positionnez cette valeur au double des connexions attendues.
  • PostgreSQL permet un certain nombre de connexions pour les utilisateurs qui ne sont pas superutilisateurs. On le calcule ainsi :max_connections - superuser_reserved_connections

Pour résumer, max_pool,num_init_children, max_connections et superuser_reserved_connections doivent satisfaire la formule suivante :

  • Si on n'a pas besoin de l'annulation de requêtes :
    max_pool*num_init_children <= (max_connections - superuser_reserved_connections)
  • Si on a besoin de l'annulation de requêtes :
    max_pool*num_init_children*2 <= (max_connections - superuser_reserved_connections)
Ce paramètre ne peut être modifié qu'au démarrage du serveur.

child_life_time

Durée de vie en secondes d'un processus fils de pgpool-II. Lorsqu'un processus fils est sans activité depuis ce nombre de secondes, il se termine et un nouveau processus fils est créé. Ce paramètre est une mesure pour prévenir tout problème de mémoire et autres erreurs inattendues. La valeur par défaut est 300 (5 minutes). Cette fonctionalité est désactivée si cette option a une valeur de 0. Notez que cela ne s'applique qu'aux processus qui n'ont pas encore été utilisés ou qui n'ont pas encore accepté de connexions. Vous devez recharger le fichier de configuration pgpool.conf si vous changez cette valeur.

child_max_connections

Un processus fils de pgpool-II sera terminé après avoir accepté ce nombre de connexions clientes. Ce paramètre est utile sur un serveur à ce point chargé que ni child_life_time, ni connection_life_time ne sont déclenchés. Vous devez recharger pgpool-II si vous changez cette valeur.

client_idle_limit

Déconnecte un client s'il est resté inactif pendant ce nombre de secondes après que la dernière requête ne se soit terminée. Ceci est utile pour empêcher qu'un processus fils de pgpool-II ne soit occupé par un client inactif ou une connexion TCP/IP rompue entre le client et pgpool-II. La valeur par défaut de client_idle_limit est de 0, ce qui signifie que cette fonctionalité est désactivée. Ce paramètre est ignoré dans la seconde phase d'un online recovery. Vous aurez besoin de recharger pgpool-II si vous modifiez client_idle_limit.

authentication_timeout

Spécifie le délai maximum en secondes pour terminer une authentification. 0 désactive cette fonctionnalité. Vous aurez besoin de redémarrer pgpool-II si vous changez cette valeur.

logdir

Répertoire utilisé pour les logs. pgpool_status est écrit dans ce répertoire.

log_destination

pgpool-II utilise plusieurs méthodes pour écrire les messages du serveur. Cela inclut stderr et syslog. La valeur par défaut est d'envoyer les messages à stderr.

Note: vous aurez besoin de modifier la configuration du serveur syslog de votre système pour que l'écriture des messages vers syslog fonctionne. pgpool-II peut envoyer les traces à syslog en utilisant les niveaux LOCAL0 à LOCAL7 (voir la documentation de syslog), mais la valeur par défaut de syslog sur la plupart des plates-formes ignorera de tels messages. Vous aurez donc besoin d'ajouter quelque-chose comme

	local0.*    /var/log/pgpool.log
	

au fichier de configuration de votre démon syslog pour le faire fonctionner.

syslog_facility

Lorsque la sortie des messages vers syslog est configurée, ce paramètre détermine le niveau syslog à utiliser. Vous pouvez choisir toute valeur entre LOCAL0 et LOCAL7. La valeur par défaut est LOCAL0. Veillez à vous reporter à la documentation système au sujet de syslog.

syslog_ident

Lorsque la sortie vers syslog est configurée, ce paramètre permet de déterminer le nom du programme utilisé pour identifier les messages de pgpool-II dans les traces enregistrées par syslog. La valeur par défaut est pgpool.

pid_file_name

Chemin complet vers le fichier qui contient le numéro d'identifiant du processus pgpool. La valeur par défaut est "/var/run/pgpool/pgpool.pid". Vous aurez besoin de redémarrer pgpool-II pour changer cette valeur.

print_timestamp

Ajoute un horodatage dans les traces lorsque cette valeur est à true. La valeur par défaut est true. Vous aurez besoin de recharger pgpool-II si vous changez cette valeur afin qu'elle soit prise en compte.

connection_cache

Cache les connexions à PostgreSQL lorsque cette valeur est configurée à true. La valeur par défaut est true.

health_check_timeout

pgpool-II essaie périodiquement de se connecter à PostgreSQL afin de détecter toute erreur sur les serveurs ou sur le réseau. Cette procédure de vérification d'erreurs est appelée « health check ». Si une erreur est détectée, pgpool-II essaie d'exécuter un failover ou une dégénération. Ce paramètre permet d'empêcher qu'un "health check" n'attende tron8.0 ou supérieur, l'installation des fonctions pgpool_regclass, utiles à pgpool-II, est fortement recommandée. Sans celles-ci, le support de tables homonymes mais figurant dans des schémas différents pourrait ne pas fonctionner correctement (pour les tables temporaires, il n'y a aucun problème).

cd pgpool-II-x.x.x/sql/pgpool-regclass
make
make install
psql -f pgpool-regclass.sql template1

L'exécution du script pgpool-regclass.sql doit être faite sur toutes les bases qui sont accédées via pgpool-II. Vous n'avez pas besoin de le faire pour toutes les bases de données créées après l'exécution des commandes ci-dessus car la base template1 est la base utilisée comme modèle par défaut pour les nouvelles bases de données sous PostgreSQL.

Installation de pgpool_walrecrunning

Si vous utilisez PostgreSQL 9.0 ou supérieur avec le « streaming replication », vous aurez besoin d'installer la fonction pgpool_walrecrunning sur tous les serveurs PostgreSQL accedées par pgpool-II.

cd pgpool-II-x.x.x/sql/pgpool-walrecrunning
make
make install
psql -f pgpool-walrecrunning.sql template1

L'exécution du script pgpool-walrecrunning.sql doit-être faite sur toutes les bases de données accedées par pgpool-II. Comme précedemment, vous n'avez pas besoin de le faire pour toutes les bases de données créées après l'exécution des commandes ci-dessus car la base template1 est la base utilisée comme modèle par défaut pour les nouvelles bases de données sous PostgreSQL.

Configuration de pgpool-II

Les fichiers de configuration par défaut de pgpool-II sont /usr/local/etc/pgpool.conf et /usr/local/etc/pcp.conf. Plusieurs modes de fonctionnement sont disponibles sous pgpool-II. Chaque mode a des fonctionnalités associées qui peuvent être activées ou désactivées, mais aussi configurées pour contrôler leur comportement.

Fonction/Mode Raw Mode (*3) Mode réplication Mode maître/esclave Mode de requêtage en parallèle
Pooling de connexions X O O O
Réplication X O X (*1)
Répartition de charge X O O (*1)
Failover O O O X
Online recovery X 0 (*2) X
Requêtage en parallèle X X X O
Nombre de serveurs requis 1 ou plus 2 ou plus 2 ou plus 2 ou plus
Base de donnée système requise? non non non oui

  • 0 signifie 'disponible' et X 'indisponible'
  • (*1) Le mode de requêtage en parallèle nécessite que la réplication et la répartition de charge soient activés, cependant la réplication et la répartition de charge ne peuvent pas être utilisés pour les tables distribuées en mode de requêtage parallèlisé.
  • (*2) Le online recovery peut-être utilisé en mode maître/esclave avec la « Streaming Replication ».
  • (*3) Les clients se connectent simplement aux serveurs PostgreSQL via pgpool-II. Ce mode est utile pour limiter simplement les connexions excédentaires aux serveurs, ou activer le failover avec de multiples serveurs.

Configuration de pcp.conf

Une interface de contrôle est fournie avec pgpool-II et permet à l'administrateur de vérifier l'état de pgpool-II et d'arrêter les processus de pgpool-II à distance. pcp.conf est le fichier contenant la définition des utilisateurs et de leurs mots de passe pour accéder à cette interface. Tous les modes d'utilisation de pgpool-II nécessitent que le fichier pcp.conf soit renseigné. Un fichier d'exemple $prefix/etc/pcp.conf.sample est créé lors de l'installation de pgpool-II. Renommez ce fichier en pcp.conf, ajoutez-y votre nom d'utilisateur ainsi que votre mot de passe.

cp $prefix/etc/pcp.conf.sample $prefix/etc/pcp.conf

Une ligne vide ou commençant par un dièse (#) est traitée comme un commentaire et sera ignorée. Un nom d'utilisateur et son mot de passe doivent être écrits sur une seule ligne et respecter le format suivant :

nom_d_utilisateur:[mot de passe crypté en md5]

Le [mot de passe crypté en md5] peut être obtenu avec la commande $prefix/bin/pg_md5.

pg_md5 -p
password: <votre mot de passe>

ou

./pg_md5 foo
acbd18db4cc2f85cedef654fccc4a4d8

Le fichier pcp.conf doit être lisible par l'utilisateur qui exécute pgpool-II.

Configuration de pgpool.conf

Comme cela a déjà été expliqué, chaque mode de pgpool-II a ses propres paramètres de configuration dans le fichier pgpool.conf. Un fichier d'exemple $prefix/etc/pgpool.conf.sample est créé lors de l'installation de pgpool-II. Renommez ce fichier en pgpool.conf et éditez son contenu.

cp $prefix/etc/pgpool.conf.sample $prefix/etc/pgpool.conf

Toute ligne vide ou commençant par "#" sera traitée comme un commentaire et sera donc ignorée.

Paramètres communs

listen_addresses

Spécifie le nom de la machine ou son adresse IP, sur laquelle pgpool-II acceptera les connexions TCP/IP. '*' accepte toutes les connexions. '' empêchera toute connexion TCP/IP. La valeur par défaut est 'localhost'. Les connexions via les sockets UNIX sont toujours acceptées. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

port

Spécifie le numéro de port sur lequel pgpool-II écoute les connexions. La valeur par défaut est 9999. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

socket_dir

Répertoire dans lequel sera créé le socket UNIX de pgpool-II pour les connexions entrantes. La valeur par défaut est '/tmp'. Faites attention au fait que ce socket pourrait être effacé par une tâche programmée en cron. Aussi, nous vous recommandons de configurer cette valeur à '/var/run' ou un répertoire de ce type. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

pcp_port

Numéro de port sur lequel le processus PCP accepte les connexions. La valeur par défaut est 9898. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

pcp_socket_dir

Chemin du répertoire UNIX où le socket UNIX acceptant les connexions pour les commandes PCP est créé. La valeur par défaut est '/tmp'. Faites attention au fait que cet socket pourrait être effacé par une tâche programmée en cron. Aussi, nous vous recommandons de configurer cette valeur à '/var/run' ou un répertoire de ce type. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

backend_socket_dir

À NE PLUS UTILISER Ce paramètre n'est présent que pour garantir la cohérence avec la politique par défaut de la bibliothèque libpq. Reportez-vous à la définition du paramètre backend_hostname pour adapter votre configuration.

Ce paramètre permettait de définir le répertoire UNIX servant au serveur PostgreSQL.

pcp_timeout

Délai maximum en secondes pour l'établissement d'une connexion PCP. Si un client ne répond plus au bout de cette valeur en secondes, le processus PCP ferme la connexion avec le client. La valeur par défaut est de 10 secondes. 0 signifie que la vérification du délai est désactivée. Ce paramètre est pris en compte lors du rechargement des fichiers de configuration.

num_init_children

Nombre de processus pré-forkés de pgpool-II. La valeur par défaut est de 32. num_init_children est aussi la limite du nombre de connexions clientes concurrentes à pgpool-II. Si plus de num_init_children clients essaient de se connecter à pgpool-II, ceux-ci sont bloqués (mais pas rejettés), jusqu'à ce qu'une connexion à l'un des processus de pgpool-II soit fermé. On peut avoir ansi jusqu'à deux fois num_init_children clients dans la queue de connexion.

Quelques précisions et astuces :

  • L'annulation d'une requête crée une autre connexion au processus serveur PostgreSQL ; ainsi, une requête ne peut pas être annulée si toutes les connexions sont utilisées. Si vous voulez vous assurer que les requêtes puissent être annulées, positionnez cette valeur au double des connexions attendues.
  • PostgreSQL permet un certain nombre de connexions pour les utilisateurs qui ne sont pas superutilisateurs. On le calcule ainsi :max_connections - superuser_reserved_connections

Pour résumer, max_pool,num_init_children, max_connections et superuser_reserved_connections doivent satisfaire la formule suivante :

  • Si on n'a pas besoin de l'annulation de requêtes :
    max_pool*num_init_children <= (max_connections - superuser_reserved_connections)
  • Si on a besoin de l'annulation de requêtes :
    max_pool*num_init_children*2 <= (max_connections - superuser_reserved_connections)
Ce paramètre ne peut être modifié qu'au démarrage du serveur.

child_life_time

Durée de vie en secondes d'un processus fils de pgpool-II. Lorsqu'un processus fils est sans activité depuis ce nombre de secondes, il se termine et un nouveau processus fils est créé. Ce paramètre est une mesure pour prévenir tout problème de mémoire et autres erreurs inattendues. La valeur par défaut est 300 (5 minutes). Cette fonctionalité est désactivée si cette option a une valeur de 0. Notez que cela ne s'applique qu'aux processus qui n'ont pas encore été utilisés ou qui n'ont pas encore accepté de connexions. Vous devez recharger le fichier de configuration pgpool.conf si vous changez cette valeur.

child_max_connections

Un processus fils de pgpool-II sera terminé après avoir accepté ce nombre de connexions clientes. Ce paramètre est utile sur un serveur à ce point chargé que ni child_life_time, ni connection_life_time ne sont déclenchés. Vous devez recharger pgpool-II si vous changez cette valeur.

client_idle_limit

Déconnecte un client s'il est resté inactif pendant ce nombre de secondes après que la dernière requête ne se soit terminée. Ceci est utile pour empêcher qu'un processus fils de pgpool-II ne soit occupé par un client inactif ou une connexion TCP/IP rompue entre le client et pgpool-II. La valeur par défaut de client_idle_limit est de 0, ce qui signifie que cette fonctionalité est désactivée. Ce paramètre est ignoré dans la seconde phase d'un online recovery. Vous aurez besoin de recharger pgpool-II si vous modifiez client_idle_limit.

authentication_timeout

Spécifie le délai maximum en secondes pour terminer une authentification. 0 désactive cette fonctionnalité. Vous aurez besoin de redémarrer pgpool-II si vous changez cette valeur.

logdir

Répertoire utilisé pour les logs. pgpool_status est écrit dans ce répertoire.

log_destination

pgpool-II utilise plusieurs méthodes pour écrire les messages du serveur. Cela inclut stderr et syslog. La valeur par défaut est d'envoyer les messages à stderr.

Note: vous aurez besoin de modifier la configuration du serveur syslog de votre système pour que l'écriture des messages vers syslog fonctionne. pgpool-II peut envoyer les traces à syslog en utilisant les niveaux LOCAL0 à LOCAL7 (voir la documentation de syslog), mais la valeur par défaut de syslog sur la plupart des plates-formes ignorera de tels messages. Vous aurez donc besoin d'ajouter quelque-chose comme

	local0.*    /var/log/pgpool.log
	

au fichier de configuration de votre démon syslog pour le faire fonctionner.

syslog_facility

Lorsque la sortie des messages vers syslog est configurée, ce paramètre détermine le niveau syslog à utiliser. Vous pouvez choisir toute valeur entre LOCAL0 et LOCAL7. La valeur par défaut est LOCAL0. Veillez à vous reporter à la documentation système au sujet de syslog.

syslog_ident

Lorsque la sortie vers syslog est configurée, ce paramètre permet de déterminer le nom du programme utilisé pour identifier les messages de pgpool-II dans les traces enregistrées par syslog. La valeur par défaut est pgpool.

pid_file_name

Chemin complet vers le fichier qui contient le numéro d'identifiant du processus pgpool. La valeur par défaut est "/var/run/pgpool/pgpool.pid". Vous aurez besoin de redémarrer pgpool-II pour changer cette valeur.

print_timestamp

Ajoute un horodatage dans les traces lorsque cette valeur est à true. La valeur par défaut est true. Vous aurez besoin de recharger pgpool-II si vous changez cette valeur afin qu'elle soit prise en compte.

connection_cache

Cache les connexions à PostgreSQL lorsque cette valeur est configurée à true. La valeur par défaut est true.

health_check_timeout

pgpool-II essaie périodiquement de se connecter à PostgreSQL afin de détecter toute erreur sur les serveurs ou sur le réseau. Cette procédure de vérification d'erreurs est appelée « health check ». Si une erreur est détectée, pgpool-II essaie d'exécuter un failover ou une dégénération. Ce paramètre permet d'empêcher qu'un "health check" n'attende tron8.0 ou supérieur, l'installation des fonctions pgpool_regclass, utiles à pgpool-II, est fortement recommandée. Sans celles-ci, le support de tables homonymes mais figurant dans des schémas différents pourrait ne pas fonctionner correctement (pour les tables temporaires, il n'y a aucun problème).

cd pgpool-II-x.x.x/sql/pgpool-regclass
make
make install
psql -f pgpool-regclass.sql template1

L'exécution du script pgpool-regclass.sql doit être faite sur toutes les bases qui sont accédées via pgpool-II. Vous n'avez pas besoin de le faire pour toutes les bases de données créées après l'exécution des commandes ci-dessus car la base template1 est la base utilisée comme modèle par défaut pour les nouvelles bases de données sous PostgreSQL.

Installation de pgpool_walrecrunning

Si vous utilisez PostgreSQL 9.0 ou supérieur avec le « streaming replication », vous aurez besoin d'installer la fonction pgpool_walrecrunning sur tous les serveurs PostgreSQL accedées par pgpool-II.

cd pgpool-II-x.x.x/sql/pgpool-walrecrunning
make
make install
psql -f pgpool-walrecrunning.sql template1

L'exécution du script pgpool-walrecrunning.sql doit-être faite sur toutes les bases de données accedées par pgpool-II. Comme précedemment, vous n'avez pas besoin de le faire pour toutes les bases de données créées après l'exécution des commandes ci-dessus car la base template1 est la base utilisée comme modèle par défaut pour les nouvelles bases de données sous PostgreSQL.

Configuration de pgpool-II

Les fichiers de configuration par défaut de pgpool-II sont /usr/local/etc/pgpool.conf et /usr/local/etc/pcp.conf. Plusieurs modes de fonctionnement sont disponibles sous pgpool-II. Chaque mode a des fonctionnalités associées qui peuvent être activées ou désactivées, mais aussi configurées pour contrôler leur comportement.

Fonction/Mode Raw Mode (*3) Mode réplication Mode maître/esclave Mode de requêtage en parallèle
Pooling de connexions X O O O
Réplication X O X (*1)
Répartition de charge X O O (*1)
Failover O O O X
Online recovery X 0 (*2) X
Requêtage en parallèle X X X O
Nombre de serveurs requis 1 ou plus 2 ou plus 2 ou plus 2 ou plus
Base de donnée système requise? non non non oui

  • 0 signifie 'disponible' et X 'indisponible'
  • (*1) Le mode de requêtage en parallèle nécessite que la réplication et la répartition de charge soient activés, cependant la réplication et la répartition de charge ne peuvent pas être utilisés pour les tables distribuées en mode de requêtage parallèlisé.
  • (*2) Le online recovery peut-être utilisé en mode maître/esclave avec la « Streaming Replication ».
  • (*3) Les clients se connectent simplement aux serveurs PostgreSQL via pgpool-II. Ce mode est utile pour limiter simplement les connexions excédentaires aux serveurs, ou activer le failover avec de multiples serveurs.

Configuration de pcp.conf

Une interface de contrôle est fournie avec pgpool-II et permet à l'administrateur de vérifier l'état de pgpool-II et d'arrêter les processus de pgpool-II à distance. pcp.conf est le fichier contenant la définition des utilisateurs et de leurs mots de passe pour accéder à cette interface. Tous les modes d'utilisation de pgpool-II nécessitent que le fichier pcp.conf soit renseigné. Un fichier d'exemple $prefix/etc/pcp.conf.sample est créé lors de l'installation de pgpool-II. Renommez ce fichier en pcp.conf, ajoutez-y votre nom d'utilisateur ainsi que votre mot de passe.

cp $prefix/etc/pcp.conf.sample $prefix/etc/pcp.conf

Une ligne vide ou commençant par un dièse (#) est traitée comme un commentaire et sera ignorée. Un nom d'utilisateur et son mot de passe doivent être écrits sur une seule ligne et respecter le format suivant :

nom_d_utilisateur:[mot de passe crypté en md5]

Le [mot de passe crypté en md5] peut être obtenu avec la commande $prefix/bin/pg_md5.

pg_md5 -p
password: <votre mot de passe>

ou

./pg_md5 foo
acbd18db4cc2f85cedef654fccc4a4d8

Le fichier pcp.conf doit être lisible par l'utilisateur qui exécute pgpool-II.

Configuration de pgpool.conf

Comme cela a déjà été expliqué, chaque mode de pgpool-II a ses propres paramètres de configuration dans le fichier pgpool.conf. Un fichier d'exemple $prefix/etc/pgpool.conf.sample est créé lors de l'installation de pgpool-II. Renommez ce fichier en pgpool.conf et éditez son contenu.

cp $prefix/etc/pgpool.conf.sample $prefix/etc/pgpool.conf

Toute ligne vide ou commençant par "#" sera traitée comme un commentaire et sera donc ignorée.

Paramètres communs

listen_addresses

Spécifie le nom de la machine ou son adresse IP, sur laquelle pgpool-II acceptera les connexions TCP/IP. '*' accepte toutes les connexions. '' empêchera toute connexion TCP/IP. La valeur par défaut est 'localhost'. Les connexions via les sockets UNIX sont toujours acceptées. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

port

Spécifie le numéro de port sur lequel pgpool-II écoute les connexions. La valeur par défaut est 9999. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

socket_dir

Répertoire dans lequel sera créé le socket UNIX de pgpool-II pour les connexions entrantes. La valeur par défaut est '/tmp'. Faites attention au fait que ce socket pourrait être effacé par une tâche programmée en cron. Aussi, nous vous recommandons de configurer cette valeur à '/var/run' ou un répertoire de ce type. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

pcp_port

Numéro de port sur lequel le processus PCP accepte les connexions. La valeur par défaut est 9898. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

pcp_socket_dir

Chemin du répertoire UNIX où le socket UNIX acceptant les connexions pour les commandes PCP est créé. La valeur par défaut est '/tmp'. Faites attention au fait que cet socket pourrait être effacé par une tâche programmée en cron. Aussi, nous vous recommandons de configurer cette valeur à '/var/run' ou un répertoire de ce type. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

backend_socket_dir

À NE PLUS UTILISER Ce paramètre n'est présent que pour garantir la cohérence avec la politique par défaut de la bibliothèque libpq. Reportez-vous à la définition du paramètre backend_hostname pour adapter votre configuration.

Ce paramètre permettait de définir le répertoire UNIX servant au serveur PostgreSQL.

pcp_timeout

Délai maximum en secondes pour l'établissement d'une connexion PCP. Si un client ne répond plus au bout de cette valeur en secondes, le processus PCP ferme la connexion avec le client. La valeur par défaut est de 10 secondes. 0 signifie que la vérification du délai est désactivée. Ce paramètre est pris en compte lors du rechargement des fichiers de configuration.

num_init_children

Nombre de processus pré-forkés de pgpool-II. La valeur par défaut est de 32. num_init_children est aussi la limite du nombre de connexions clientes concurrentes à pgpool-II. Si plus de num_init_children clients essaient de se connecter à pgpool-II, ceux-ci sont bloqués (mais pas rejettés), jusqu'à ce qu'une connexion à l'un des processus de pgpool-II soit fermé. On peut avoir ansi jusqu'à deux fois num_init_children clients dans la queue de connexion.

Quelques précisions et astuces :

  • L'annulation d'une requête crée une autre connexion au processus serveur PostgreSQL ; ainsi, une requête ne peut pas être annulée si toutes les connexions sont utilisées. Si vous voulez vous assurer que les requêtes puissent être annulées, positionnez cette valeur au double des connexions attendues.
  • PostgreSQL permet un certain nombre de connexions pour les utilisateurs qui ne sont pas superutilisateurs. On le calcule ainsi :max_connections - superuser_reserved_connections

Pour résumer, max_pool,num_init_children, max_connections et superuser_reserved_connections doivent satisfaire la formule suivante :

  • Si on n'a pas besoin de l'annulation de requêtes :
    max_pool*num_init_children <= (max_connections - superuser_reserved_connections)
  • Si on a besoin de l'annulation de requêtes :
    max_pool*num_init_children*2 <= (max_connections - superuser_reserved_connections)
Ce paramètre ne peut être modifié qu'au démarrage du serveur.

child_life_time

Durée de vie en secondes d'un processus fils de pgpool-II. Lorsqu'un processus fils est sans activité depuis ce nombre de secondes, il se termine et un nouveau processus fils est créé. Ce paramètre est une mesure pour prévenir tout problème de mémoire et autres erreurs inattendues. La valeur par défaut est 300 (5 minutes). Cette fonctionalité est désactivée si cette option a une valeur de 0. Notez que cela ne s'applique qu'aux processus qui n'ont pas encore été utilisés ou qui n'ont pas encore accepté de connexions. Vous devez recharger le fichier de configuration pgpool.conf si vous changez cette valeur.

child_max_connections

Un processus fils de pgpool-II sera terminé après avoir accepté ce nombre de connexions clientes. Ce paramètre est utile sur un serveur à ce point chargé que ni child_life_time, ni connection_life_time ne sont déclenchés. Vous devez recharger pgpool-II si vous changez cette valeur.

client_idle_limit

Déconnecte un client s'il est resté inactif pendant ce nombre de secondes après que la dernière requête ne se soit terminée. Ceci est utile pour empêcher qu'un processus fils de pgpool-II ne soit occupé par un client inactif ou une connexion TCP/IP rompue entre le client et pgpool-II. La valeur par défaut de client_idle_limit est de 0, ce qui signifie que cette fonctionalité est désactivée. Ce paramètre est ignoré dans la seconde phase d'un online recovery. Vous aurez besoin de recharger pgpool-II si vous modifiez client_idle_limit.

authentication_timeout

Spécifie le délai maximum en secondes pour terminer une authentification. 0 désactive cette fonctionnalité. Vous aurez besoin de redémarrer pgpool-II si vous changez cette valeur.

logdir

Répertoire utilisé pour les logs. pgpool_status est écrit dans ce répertoire.

log_destination

pgpool-II utilise plusieurs méthodes pour écrire les messages du serveur. Cela inclut stderr et syslog. La valeur par défaut est d'envoyer les messages à stderr.

Note: vous aurez besoin de modifier la configuration du serveur syslog de votre système pour que l'écriture des messages vers syslog fonctionne. pgpool-II peut envoyer les traces à syslog en utilisant les niveaux LOCAL0 à LOCAL7 (voir la documentation de syslog), mais la valeur par défaut de syslog sur la plupart des plates-formes ignorera de tels messages. Vous aurez donc besoin d'ajouter quelque-chose comme

	local0.*    /var/log/pgpool.log
	

au fichier de configuration de votre démon syslog pour le faire fonctionner.

syslog_facility

Lorsque la sortie des messages vers syslog est configurée, ce paramètre détermine le niveau syslog à utiliser. Vous pouvez choisir toute valeur entre LOCAL0 et LOCAL7. La valeur par défaut est LOCAL0. Veillez à vous reporter à la documentation système au sujet de syslog.

syslog_ident

Lorsque la sortie vers syslog est configurée, ce paramètre permet de déterminer le nom du programme utilisé pour identifier les messages de pgpool-II dans les traces enregistrées par syslog. La valeur par défaut est pgpool.

pid_file_name

Chemin complet vers le fichier qui contient le numéro d'identifiant du processus pgpool. La valeur par défaut est "/var/run/pgpool/pgpool.pid". Vous aurez besoin de redémarrer pgpool-II pour changer cette valeur.

print_timestamp

Ajoute un horodatage dans les traces lorsque cette valeur est à true. La valeur par défaut est true. Vous aurez besoin de recharger pgpool-II si vous changez cette valeur afin qu'elle soit prise en compte.

connection_cache

Cache les connexions à PostgreSQL lorsque cette valeur est configurée à true. La valeur par défaut est true.

health_check_timeout

pgpool-II essaie périodiquement de se connecter à PostgreSQL afin de détecter toute erreur sur les serveurs ou sur le réseau. Cette procédure de vérification d'erreurs est appelée « health check ». Si une erreur est détectée, pgpool-II essaie d'exécuter un failover ou une dégénération. Ce paramètre permet d'empêcher qu'un "health check" n'attende tron8.0 ou supérieur, l'installation des fonctions pgpool_regclass, utiles à pgpool-II, est fortement recommandée. Sans celles-ci, le support de tables homonymes mais figurant dans des schémas différents pourrait ne pas fonctionner correctement (pour les tables temporaires, il n'y a aucun problème).

cd pgpool-II-x.x.x/sql/pgpool-regclass
make
make install
psql -f pgpool-regclass.sql template1

L'exécution du script pgpool-regclass.sql doit être faite sur toutes les bases qui sont accédées via pgpool-II. Vous n'avez pas besoin de le faire pour toutes les bases de données créées après l'exécution des commandes ci-dessus car la base template1 est la base utilisée comme modèle par défaut pour les nouvelles bases de données sous PostgreSQL.

Installation de pgpool_walrecrunning

Si vous utilisez PostgreSQL 9.0 ou supérieur avec le « streaming replication », vous aurez besoin d'installer la fonction pgpool_walrecrunning sur tous les serveurs PostgreSQL accedées par pgpool-II.

cd pgpool-II-x.x.x/sql/pgpool-walrecrunning
make
make install
psql -f pgpool-walrecrunning.sql template1

L'exécution du script pgpool-walrecrunning.sql doit-être faite sur toutes les bases de données accedées par pgpool-II. Comme précedemment, vous n'avez pas besoin de le faire pour toutes les bases de données créées après l'exécution des commandes ci-dessus car la base template1 est la base utilisée comme modèle par défaut pour les nouvelles bases de données sous PostgreSQL.

Configuration de pgpool-II

Les fichiers de configuration par défaut de pgpool-II sont /usr/local/etc/pgpool.conf et /usr/local/etc/pcp.conf. Plusieurs modes de fonctionnement sont disponibles sous pgpool-II. Chaque mode a des fonctionnalités associées qui peuvent être activées ou désactivées, mais aussi configurées pour contrôler leur comportement.

Fonction/Mode Raw Mode (*3) Mode réplication Mode maître/esclave Mode de requêtage en parallèle
Pooling de connexions X O O O
Réplication X O X (*1)
Répartition de charge X O O (*1)
Failover O O O X
Online recovery X 0 (*2) X
Requêtage en parallèle X X X O
Nombre de serveurs requis 1 ou plus 2 ou plus 2 ou plus 2 ou plus
Base de donnée système requise? non non non oui

  • 0 signifie 'disponible' et X 'indisponible'
  • (*1) Le mode de requêtage en parallèle nécessite que la réplication et la répartition de charge soient activés, cependant la réplication et la répartition de charge ne peuvent pas être utilisés pour les tables distribuées en mode de requêtage parallèlisé.
  • (*2) Le online recovery peut-être utilisé en mode maître/esclave avec la « Streaming Replication ».
  • (*3) Les clients se connectent simplement aux serveurs PostgreSQL via pgpool-II. Ce mode est utile pour limiter simplement les connexions excédentaires aux serveurs, ou activer le failover avec de multiples serveurs.

Configuration de pcp.conf

Une interface de contrôle est fournie avec pgpool-II et permet à l'administrateur de vérifier l'état de pgpool-II et d'arrêter les processus de pgpool-II à distance. pcp.conf est le fichier contenant la définition des utilisateurs et de leurs mots de passe pour accéder à cette interface. Tous les modes d'utilisation de pgpool-II nécessitent que le fichier pcp.conf soit renseigné. Un fichier d'exemple $prefix/etc/pcp.conf.sample est créé lors de l'installation de pgpool-II. Renommez ce fichier en pcp.conf, ajoutez-y votre nom d'utilisateur ainsi que votre mot de passe.

cp $prefix/etc/pcp.conf.sample $prefix/etc/pcp.conf

Une ligne vide ou commençant par un dièse (#) est traitée comme un commentaire et sera ignorée. Un nom d'utilisateur et son mot de passe doivent être écrits sur une seule ligne et respecter le format suivant :

nom_d_utilisateur:[mot de passe crypté en md5]

Le [mot de passe crypté en md5] peut être obtenu avec la commande $prefix/bin/pg_md5.

pg_md5 -p
password: <votre mot de passe>

ou

./pg_md5 foo
acbd18db4cc2f85cedef654fccc4a4d8

Le fichier pcp.conf doit être lisible par l'utilisateur qui exécute pgpool-II.

Configuration de pgpool.conf

Comme cela a déjà été expliqué, chaque mode de pgpool-II a ses propres paramètres de configuration dans le fichier pgpool.conf. Un fichier d'exemple $prefix/etc/pgpool.conf.sample est créé lors de l'installation de pgpool-II. Renommez ce fichier en pgpool.conf et éditez son contenu.

cp $prefix/etc/pgpool.conf.sample $prefix/etc/pgpool.conf

Toute ligne vide ou commençant par "#" sera traitée comme un commentaire et sera donc ignorée.

Paramètres communs

listen_addresses

Spécifie le nom de la machine ou son adresse IP, sur laquelle pgpool-II acceptera les connexions TCP/IP. '*' accepte toutes les connexions. '' empêchera toute connexion TCP/IP. La valeur par défaut est 'localhost'. Les connexions via les sockets UNIX sont toujours acceptées. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

port

Spécifie le numéro de port sur lequel pgpool-II écoute les connexions. La valeur par défaut est 9999. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

socket_dir

Répertoire dans lequel sera créé le socket UNIX de pgpool-II pour les connexions entrantes. La valeur par défaut est '/tmp'. Faites attention au fait que ce socket pourrait être effacé par une tâche programmée en cron. Aussi, nous vous recommandons de configurer cette valeur à '/var/run' ou un répertoire de ce type. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

pcp_port

Numéro de port sur lequel le processus PCP accepte les connexions. La valeur par défaut est 9898. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

pcp_socket_dir

Chemin du répertoire UNIX où le socket UNIX acceptant les connexions pour les commandes PCP est créé. La valeur par défaut est '/tmp'. Faites attention au fait que cet socket pourrait être effacé par une tâche programmée en cron. Aussi, nous vous recommandons de configurer cette valeur à '/var/run' ou un répertoire de ce type. Ce paramètre ne peut être modifié qu'au démarrage du serveur.

backend_socket_dir

À NE PLUS UTILISER Ce paramètre n'est présent que pour garantir la cohérence avec la politique par défaut de la bibliothèque libpq. Reportez-vous à la définition du paramètre backend_hostname pour adapter votre configuration.

Ce paramètre permettait de définir le répertoire UNIX servant au serveur PostgreSQL.

pcp_timeout

Délai maximum en secondes pour l'établissement d'une connexion PCP. Si un client ne répond plus au bout de cette valeur en secondes, le processus PCP ferme la connexion avec le client. La valeur par défaut est de 10 secondes. 0 signifie que la vérification du délai est désactivée. Ce paramètre est pris en compte lors du rechargement des fichiers de configuration.

num_init_children

Nombre de processus pré-forkés de pgpool-II. La valeur par défaut est de 32. num_init_children est aussi la limite du nombre de connexions clientes concurrentes à pgpool-II. Si plus de num_init_children clients essaient de se connecter à pgpool-II, ceux-ci sont bloqués (mais pas rejettés), jusqu'à ce qu'une connexion à l'un des processus de pgpool-II soit fermé. On peut avoir ansi jusqu'à deux fois num_init_children clients dans la queue de connexion.

Quelques précisions et astuces :

  • L'annulation d'une requête crée une autre connexion au processus serveur PostgreSQL ; ainsi, une requête ne peut pas être annulée si toutes les connexions sont utilisées. Si vous voulez vous assurer que les requêtes puissent être annulées, positionnez cette valeur au double des connexions attendues.
  • PostgreSQL permet un certain nombre de connexions pour les utilisateurs qui ne sont pas superutilisateurs. On le calcule ainsi :max_connections - superuser_reserved_connections

Pour résumer, max_pool,num_init_children, max_connections et superuser_reserved_connections doivent satisfaire la formule suivante :

  • Si on n'a pas besoin de l'annulation de requêtes :
    max_pool*num_init_children <= (max_connections - superuser_reserved_connections)
  • Si on a besoin de l'annulation de requêtes :
    max_pool*num_init_children*2 <= (max_connections - superuser_reserved_connections)
Ce paramètre ne peut être modifié qu'au démarrage du serveur.

child_life_time

Durée de vie en secondes d'un processus fils de pgpool-II. Lorsqu'un processus fils est sans activité depuis ce nombre de secondes, il se termine et un nouveau processus fils est créé. Ce paramètre est une mesure pour prévenir tout problème de mémoire et autres erreurs inattendues. La valeur par défaut est 300 (5 minutes). Cette fonctionalité est désactivée si cette option a une valeur de 0. Notez que cela ne s'applique qu'aux processus qui n'ont pas encore été utilisés ou qui n'ont pas encore accepté de connexions. Vous devez recharger le fichier de configuration pgpool.conf si vous changez cette valeur.

child_max_connections

Un processus fils de pgpool-II sera terminé après avoir accepté ce nombre de connexions clientes. Ce paramètre est utile sur un serveur à ce point chargé que ni child_life_time, ni connection_life_time ne sont déclenchés. Vous devez recharger pgpool-II si vous changez cette valeur.

client_idle_limit

Déconnecte un client s'il est resté inactif pendant ce nombre de secondes après que la dernière requête ne se soit terminée. Ceci est utile pour empêcher qu'un processus fils de pgpool-II ne soit occupé par un client inactif ou une connexion TCP/IP rompue entre le client et pgpool-II. La valeur par défaut de client_idle_limit est de 0, ce qui signifie que cette fonctionalité est désactivée. Ce paramètre est ignoré dans la seconde phase d'un online recovery. Vous aurez besoin de recharger pgpool-II si vous modifiez client_idle_limit.

authentication_timeout

Spécifie le délai maximum en secondes pour terminer une authentification. 0 désactive cette fonctionnalité. Vous aurez besoin de redémarrer pgpool-II si vous changez cette valeur.

logdir

Répertoire utilisé pour les logs. pgpool_status est écrit dans ce répertoire.

log_destination

pgpool-II utilise plusieurs méthodes pour écrire les messages du serveur. Cela inclut stderr et syslog. La valeur par défaut est d'envoyer les messages à stderr.

Note: vous aurez besoin de modifier la configuration du serveur syslog de votre système pour que l'écriture des messages vers syslog fonctionne. pgpool-II peut envoyer les traces à syslog en utilisant les niveaux LOCAL0 à LOCAL7 (voir la documentation de syslog), mais la valeur par défaut de syslog sur la plupart des plates-formes ignorera de tels messages. Vous aurez donc besoin d'ajouter quelque-chose comme

	local0.*    /var/log/pgpool.log
	

au fichier de configuration de votre démon syslog pour le faire fonctionner.

syslog_facility

Lorsque la sortie des messages vers syslog est configurée, ce paramètre détermine le niveau syslog à utiliser. Vous pouvez choisir toute valeur entre LOCAL0 et LOCAL7. La valeur par défaut est LOCAL0. Veillez à vous reporter à la documentation système au sujet de syslog.

syslog_ident

Lorsque la sortie vers syslog est configurée, ce paramètre permet de déterminer le nom du programme utilisé pour identifier les messages de pgpool-II dans les traces enregistrées par syslog. La valeur par défaut est pgpool.

pid_file_name

Chemin complet vers le fichier qui contient le numéro d'identifiant du processus pgpool. La valeur par défaut est "/var/run/pgpool/pgpool.pid". Vous aurez besoin de redémarrer pgpool-II pour changer cette valeur.

print_timestamp

Ajoute un horodatage dans les traces lorsque cette valeur est à true. La valeur par défaut est true. Vous aurez besoin de recharger pgpool-II si vous changez cette valeur afin qu'elle soit prise en compte.

connection_cache

Cache les connexions à PostgreSQL lorsque cette valeur est configurée à true. La valeur par défaut est true.

health_check_timeout

pgpool-II essaie périodiquement de se connecter à PostgreSQL afin de détecter toute erreur sur les serveurs ou sur le réseau. Cette procédure de vérification d'erreurs est appelée « health check ». Si une erreur est détectée, pgpool-II essaie d'exécuter un failover ou une dégénération. Ce paramètre permet d'empêcher qu'un "health check" n'attende tron8.0 ou supérieur, l'installation des fonctions pgpool_regclass, utiles à pgpool-II, est fortement recommandée. Sans celles-ci, le support de tables homonymes mais figurant dans des schémas différents pourrait ne pas fonctionner correctement (pour les tables temporaires, il n'y a aucun problème).

cd pgpool-II-x.x.x/sql/pgpool-regclass
make
make install
psql -f pgpool-regclass.sql template1

L'exécution du script pgpool-regclass.sql doit être faite sur toutes les bases qui sont accédées via pgpool-II. Vous n'avez pas besoin de le faire pour toutes les bases de données créées après l'exécution des commandes ci-dessus car la base template1 est la base utilisée comme modèle par défaut pour les nouvelles bases de données sous PostgreSQL.

Installation de pgpool_walrecrunning

Si vous utilisez PostgreSQL 9.0 ou supérieur avec le « streaming replication », vous aurez besoin d'installer la fonction pgpool_walrecrunning sur tous les serveurs PostgreSQL accedées par pgpool-II.

cd pgpool-II-x.x.x/sql/pgpool-walrecrunning
make
make install
psql -f pgpool-walrecrunning.sql template1

L'exécution du script pgpool-walrecrunning.sql doit-être faite sur toutes les bases de données accedées par pgpool-II. Comme précedemment, vous n'avez pas besoin de le faire pour toutes les bases de données créées après l'exécution des commandes ci-dessus car la base template1 est la base utilisée comme modèle par défaut pour les nouvelles bases de données sous PostgreSQL.

Configuration de pgpool-II

Les fichiers de configuration par défaut de pgpool-II sont /usr/local/etc/pgpool.conf et /usr/local/etc/pcp.conf. Plusieurs modes de fonctionnement sont disponibles sous pgpool-II. Chaque mode a des fonctionnalités associées qui peuvent être activées ou désactivées, mais aussi configurées pour contrôler leur comportement.

Fonction/Mode Raw Mode (*3) Mode réplication Mode maître/esclave Mode de requêtage en parallèle
Pooling de connexions X O O O
Réplication X O X (*1)
Répartition de charge X O O (*1)
Failover O O O X
Online recovery X 0 (*2) X
Requêtage en parallèle X X X O
Nombre de serveurs requis 1 ou plus 2 ou plus 2 ou plus 2 ou plus
Base de donnée système requise? non non non oui

  • 0 signifie 'disponible' et X 'indisponible'
  • (*1) Le mode de requêtage en parallèle nécessite que la réplication et la répartition de charge soient activés, cependant la réplication et la répartition de charge ne peuvent pas être utilisés pour les tables distribuées en mode de requêtage parallèlisé.
  • (*2) Le online recovery peut-être utilisé en mode maître/esclave avec la « Streaming Replication ».
  • (*3) Les clients se connectent simplement aux serveurs PostgreSQL via pgpool-II. Ce mode est utile pour limiter simplement les connexions excédentaires aux serveurs, ou activer le failover avec de multiples serveurs.

Configuration de pcp.conf

Une interface de contrôle est fournie avec pgpool-II et permet à l'administrateur de vérifier l'état de pgpool-II et d'arrêter les processus de pgpool-II à distance. pcp.conf est le fichier contenant la définition des utilisateurs et de leurs mots de passe pour accéder à cette interface. Tous les modes d'utilisation de pgpool-II nécessitent que le fichier pcp.conf soit renseigné. Un fichier d'exemple $prefix/etc/pcp.conf.sample est créé lors de l'installation de pgpool-II. Renommez ce fichier en pcp.conf, ajoutez-y votre nom d'utilisateur ainsi que votre mot de passe.

cp $prefix/etc/pcp.conf.sample $prefix/etc/pcp.conf

Une ligne vide ou commençant par un dièse (#) est traitée comme un commentaire et sera ignorée. Un nom d'utilisateur et son mot de passe doivent être écrits sur une seule ligne et respecter le format suivant :

nom_d_utilisateur:[mot de passe crypté en md5]

Le [mot de passe crypté en md5] peut être obtenu avec la commande $prefix/bin/pg_md5.

pg_md5 -p
password: <votre mot de passe>

ou

./pg_md5 foo
acbd18db4cc2f85cedef654fccc4a4d8

Le fichier pcp.conf doit être lisible par l'utilisateur qui exécute pgpool-II.

Configuration de pgpool.conf

Comme cela a déjÃ