Réplication PostgreSQL


45

Nous discutons constamment de cela autour du bureau et la question continue de se poser. Comment traitez-vous la réplication PostgreSQL? Je ne parle même pas nécessairement de clusters avancés, mais simplement de garder les choses simples avec Master-Slave, Master-MultiSlave et Master-Master. Je trouve que la configuration de MySQL est généralement assez simple. Le basculement est simple sinon parfait, en particulier pour la facilité de configuration. Nous avons joué avec Slony, mais c'est un peu trop pratique (les modifications de schéma nécessitent une intervention, les nouvelles bases de données nécessitent une intervention, etc.). PGPool2 était plutôt sympa, jusqu'à ce qu'un nœud tombe en panne et que nous ne trouvions pas de moyen élégant (autre que de tout ramasser et de réensemencer le nœud tombé) pour que la réplication soit synchronisée. En gros, voici ce que je recherche généralement:

  • Configuration facile (je me contenterai d'une configuration difficile, mais facile à développer)
  • Basculement simpliste
  • Ramener un nœud tombé dans le système ne prend que du temps (par exemple, comme mysql. Le serveur tombe en panne, vous le relancez et attendez que la réplication se rattrape)
  • Les modifications de schéma n'interrompent pas la réplication
  • L'ajout d'une nouvelle base de données sur le serveur est transparent (c.-à-d. Comme mysql, vous pouvez répliquer un serveur de base de données complet. Ainsi, une nouvelle base de données est créée sur le maître, elle se propage automatiquement vers l'esclave).

MySQL gère assez bien la plupart de ces problèmes, mais je tiens particulièrement à PostgreSQL. De plus, dans certaines situations, c'est notre seule option et nous aimerions ajouter la réplication au mélange. Qu'utilisez-vous actuellement et que pensez-vous de votre solution? Ce n'est pas une publication MySQL contre PostgreSQL, je le promets, car ce n'est pas ce que j'essaie de commencer. :)


3
Je suis intéressé par la réponse à cela. Venant d’un contexte MySQL, les options de réplication pour PSQL sont pour l’agriculture peu exploitables.
Dave Cheney

Oui, jusqu'à présent, toutes les options avec lesquelles j'ai joué présentaient des inconvénients importants. En espérant qu'il me manque quelque chose d'évident .. mais je ne pense pas que je sois
f4nt

Je soupçonne qu'il n'y a rien d'autre, mais j'ai hâte que quelqu'un me
prouve

BTW, avez-vous essayé pgsql-general@postgresql.org?
Vinko Vrsalovic

Réponses:


9

Réponse courte: il n’existe pas encore de telle solution pour PostgreSQL si vous avez besoin d’esclaves en lecture seule en ligne.

Il existe actuellement deux projets de développement majeurs dans ce domaine, qui sont inclus dans PostgreSQL 9.0 (printemps / été 2010), à savoir:

  • Réplication synchrone:

http://wiki.postgresql.org/wiki/NTT's_Development_Projects

  • Lire uniquement les esclaves en attente à chaud:

http://wiki.postgresql.org/wiki/Hot_Standby

qui, dans leur combinaison, visent à obtenir la simplicité d’utilisation de la réplication de style MySQL moins les bugs / problèmes rencontrés par MySQL, ainsi que la fiabilité connue des utilisateurs par PostgreSQL.

Tout cela a été lancé par un manifeste de l’équipe principale de PostgreSQL en 2008:

http://archives.postgresql.org/pgsql-hackers/2008-05/msg00913.php

Les solutions de réplication PostgreSQL utilisées à ce jour avec la plus grande base d'utilisateurs sont Slony-I (plus coûteux pour les écritures, rend les modifications de schéma difficiles), WAL shipping / walmgr (les esclaves ne peuvent pas être utilisés en ligne) et pgQ / londiste de Skype / Skytools ( plus d'outils / blocs de construction qu'une solution finie).

J'ai écrit quelques choses sur Log Shipping, Walmgr et Slony-I, voir

http://blogs.amd.co.at/mt/mt-search.cgi?blog_id=1&tag=pgrep&limit=20 pour plus d'informations.


6
La réplication synchrone et la redondance d'UC sont maintenant disponibles - voir wiki.postgresql.org/wiki/… pour un bon résumé des techniques disponibles
David Fraser

5

Et pour lancer une autre solution dans le ring: rubyrep.

Pour comparer avec vos besoins:

  • Configuration facile
    Oui, c'est en fait le principal objectif de rubyrep.
  • Basculement simpliste
    Oui. En fait, rubyrep effectue une réplication maître-maître - pour basculer, aucune action n'est nécessaire. Commencez simplement à utiliser l'autre base de données.
  • Les modifications de schéma n'interrompent pas la réplication
    Oui.
    Pour les modifications de clés non principales, la réplication n'a même pas à s'arrêter (mais assurez-vous que le schéma est modifié des deux côtés en même temps).
    Pour ajouter / supprimer des tables, redémarrez simplement le démon de réplication. Changer seulement la colonne de clé primaire d'une table demande un peu d'effort.
  • L'ajout d'une nouvelle base de données au serveur est transparent (par exemple, comme mysql, vous pouvez répliquer un serveur de base de données complet, de sorte qu'une nouvelle base de données soit créée sur le maître, elle se propage automatiquement vers l'esclave).
    Cette fonctionnalité n'est prise en charge que de manière limitée: Le programme d'installation ne réplique qu'une base de données à la fois. (Mais il est très facile de configurer la réplication pour plusieurs bases de données.)

4

Vous n'avez pas mentionné la nécessité d'avoir un esclave de lecture à chaud, alors je vais proposer d'utiliser Heartbeat avec un stockage partagé ou DRBD. Il fait juste la bonne chose et l'administration est un jeu d'enfant. C'est l'équivalent Linux de l'ancien clustering Microsoft SQL Server. Un nœud est actif et l'autre nœud est passif, tandis que les données sont partagées entre les deux. Vous n'avez pas à vous soucier de la réplication basée sur SQL car elle est gérée plus bas au niveau des blocs.

Sérieusement, c'est de loin la meilleure solution si vous n'avez pas besoin d'esclaves lus. Les archives de WAL étaient au mieux hokey et vous devez tout configurer à nouveau si vous interrompez un jour le processus d’expédition pour un redémarrage du serveur. slony et londiste ne coupent pas la moutarde. Si vous voulez rester sur l’arbre principal et ne pas devenir commercial, Heartbeat est votre meilleur choix.


2

D'après vos exigences, il semble que PITR soit le moyen le plus simple de résoudre votre problème:

Sauvegarde en ligne et récupération à un point dans le temps (PITR)

Vous n'avez pas dit que vous deviez interroger le serveur esclave, alors PITR est peut-être juste.

C'est la partie standard de PostgreSQL à partir de la version 8.0, vous avez donc probablement déjà tout le nécessaire pour la lancer.

Si les instructions vous paraissent trop volumineuses , jetez un coup d'œil à SkyTools WalMgr, qui rendra le processus de création / basculement vers la tâche de commande unique de données en attente hot-standby.

Pour des scénarios de réplication plus complexes, j’avais une bonne expérience de Slony-1, mais PostgreSQL dispose de nombreuses options de réplication / haute disponibilité.


et ces options sont ...?
Dave Cheney

... listée dans l'article de blog blog.endpoint.com/2009/05/competitors-to-bucardo-version-1.html référencée dans l'une des réponses ...
dpavlin

2

Si vous souhaitez une réplication maître / esclave asynchrone, considérez Londiste (partie du paquetage skytools de Skype) wiki.postgresql.org/wiki/Londiste_Tutorial

C'est facile à installer, l'ajout d'une nouvelle base de données est facile, la réplication "rattrape".

Le basculement n'est pas intégré cependant. Vous devrez modifier les chaînes de connexion de votre application ou masquer la connexion à la base de données derrière une autre couche de logiciel.

Certaines modifications de schéma sont faciles. D'autres sont plus difficiles. Cela dépend de votre application. La prochaine version de skytools (version 3.0) est censée gérer DDL et inclure des fonctionnalités facilitant le basculement.

Nous avons déménagé à Londiste après avoir trouvé Slony trop pénible à utiliser.



1

Il n’existe vraiment aucun moyen gratuit / open-source de fournir ce que vous recherchez. Si vous voulez quelque chose d'aussi clé en main, examinez les différentes solutions de réplication commerciale tierces.

Désormais, il est possible de trier votre propre réplication avec Postgres à l'aide de l'expédition de journal d'écriture (WAL):

http://www.postgresql.org/docs/8.3/interactive/warm-standby.html

En gros, vous pouvez placer un nœud secondaire en mode de récupération continue et y importer des journaux de transaction tous les {petits intervalles}. La configuration de Postgres a des "stubs" pour vous permettre de faire certaines choses lorsqu'un Postgres quand une WAL est terminée et donc non, et c'est ce sur quoi repose cette configuration: utiliser ces "stubs".

Toutefois, cela ne vous permet pas d'effectuer une réplication maître-maître et / ou circulaire.

Dans tous les cas, cela fonctionne vraiment pour erdundancy, mais je n’appellerais pas cela une "installation facile", un "basculement simpliste", "transparent" ou quelque chose du genre.


Cette réponse fait double emploi avec la suggestion de PITR, car PITR utilise WAL :-)
dpavlin

1

Sauf pour «ajouter une nouvelle base de données», vous pouvez essayer Mammoth Replicator ( https://projects.commandprompt.com/public/replicator ). Il est open-source, facile à installer et prend en charge le basculement. Les principales limitations sont la base de données unique et l'incapacité de répliquer les modifications DDL, les deux sont dans la liste TODO.



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.