web-dev-qa-db-fra.com

Qu'est-ce qu'un "cluster" PostgreSQL et comment en créer un?

Je suis très nouveau dans les bases de données, je n'y ai pas beaucoup travaillé. Maintenant, je veux comprendre le terme de clusters de bases de données. J'ai beaucoup cherché sur Google et trouvé de nombreux liens utiles, mais je ne suis pas en mesure de les comprendre - peut-être parce que j'ai très peu de connaissances de base sur les bases de données et qu'elles étaient également dans un langage très technique.

J'ai besoin de conseils sur ces points:

  1. Que sont les clusters de bases de données dans PostgreSQL?
  2. Comment créer des clusters dans PostgreSQL?
57
Sunil Kumar

Un "cluster" de bases de données PostgreSQL est un postmaster et un groupe de processus subsidiaires, tous gérant un répertoire de données partagées contenant une ou plusieurs bases de données.

Le terme "cluster" dans PostgreSQL est une bizarrerie historique*, et est complètement différent de la signification générale de "cluster de calcul" , qui fait normalement référence à des groupes d'ordinateurs qui travaillent ensemble pour obtenir des performances et/ou une disponibilité plus élevées. Elle n'est pas non plus liée à la commande PostgreSQL CLUSTER, qui concerne l'organisation des tables.


Si vous lisez ceci, vous cherchez peut-être des informations sur la haute disponibilité, la réplication ou le regroupement, auquel cas vous devriez lire l'article Réplication, clustering et haute disponibilité wiki et haut disponibilité section du manuel de PostgreSQL, puis examinez des outils comme repmgr .


Un cluster est normalement créé pour vous lorsque vous installez PostgreSQL; l'installation va généralement initdb un nouveau cluster pour vous. Il est assez inhabituel pour un utilisateur basique ou intermédiaire d'avoir jamais besoin de créer des clusters ou de gérer plusieurs clusters, donc cela aiderait si vous expliquiez pourquoi vous voulez faites cela, et quel est le problème sous-jacent que vous essayez de résoudre . Le manuel de l'utilisateur pourrait probablement mieux expliquer cela, car il suppose que vous installez PostgreSQL à partir des sources et relativement peu de gens le font.

Le répertoire de données de chaque cluster est créé avec initdb et géré avec un postmaster démarré via un service système (service Windows, launchd, init, upstart, systemd, etc. selon le système d'exploitation et la version) ou directement via pg_ctl.

Le cluster possède des bases de données intégrées template0, template1 et postgres; d'autres bases de données sont créées par l'utilisateur.

Le postmaster d'un cluster accepte les connexions entrantes en écoutant sur un port tcp et les transmet aux backends des travailleurs. Un seul postmaster peut s'exécuter sur un port donné, donc chaque cluster doit avoir un port différent.

J'ai écrit plus sur la structure de PostgreSQL dans cette réponse précédente . Voir la sous-rubrique "Relations? Schéma? Huh?".

Comment "créer" des clusters dans Pg dépend entièrement de la façon dont vous l'exécutez. Puisque vous posez la question, je soupçonne que vous utilisez un système Ubuntu qui utilise pg_wrapper , auquel cas vous utiliseriez le pg_wrapper commandes comme pg_createcluster .


* La confusion entre un "cluster" dans la terminologie PostgreSQL et l'utilisation courante du terme "cluster" est une bizarrerie historique déroutante et regrettable, en particulier lors de la discussion sur le clustering des instances PostgreSQL. Vous pouvez avoir un cluster de clusters PostgreSQL, ce qui est juste pénible.

103
Craig Ringer