J'évalue PostgreSQL 9.1 et j'ai quelques questions concernant les détails de basculement et de réplication.
J'ai quelques scénarios de test. Le premier avec un serveur maître et quelques esclaves. En cas de plantage du Maître, je veux que l'un des Esclaves devienne Maître. Une fois que le maître est revenu à son état normal, il doit se synchroniser avec les autres serveurs du cluster (appliquer toutes les modifications effectuées alors qu'il était en panne) et revendiquer le rôle de maître ou devenir esclave.
Les problèmes que je vois avec PostgreSQL et le scénario actuel sont les suivants.
1) Je ne vois pas d'outils intégrés pour détecter une panne du serveur maître. J'ai lu que pgpool peut le gérer et créer un fichier déclencheur, j'ai également lu que les gens utilisent le rythme cardiaque Linux ou des outils similaires pour cela. D'accord, je peux détecter le basculement et affecter un nouveau maître dans le cluster. Les autres esclaves comprendront-ils qu'il existe un nouveau maître et devraient-ils le sauvegarder maintenant?
2) Je ne comprends pas la procédure de rétablissement. Les configurations d'hôte maître et esclave sont différentes. Alors, est-ce que j'aurai deux Masters après le crash du Master? Comment les serveurs reviendront-ils synchronisés? Je n'ai vu que des solutions manuelles comme "transférer le dossier de données vers le serveur et le redémarrer". Alors, quelle est la solution ou la meilleure pratique ou au moins le principe clé ici?
3) Comment dois-je gérer les pannes de serveur côté client? Lorsque je crée une connexion, je spécifie explicitement l'IP du serveur. Dois-je développer une sorte de ConnectionManager qui connaîtra ma structure maître-esclave, enverra des demandes au maître uniquement et en cas de perte de connexion, basculera vers des serveurs de sauvegarde, etc.? J'ai lu que pgpool peut être un point d'entrée pour les applications et gérer les connexions de manière correcte. Pgpool est-il la seule solution ici? Gère-t-il bien le basculement et le rétablissement?
4) Existe-t-il des solutions (commerciales également) pour que je puisse éviter de copier manuellement les données, de reconfigurer les instances PostgreSQL et d'autres choses qui devraient être faites à la main? Donc, type de configuration de cluster lorsque tout le monde est synchronisé, il est clair qui est maître et tout bascule automatiquement sans l'attention de l'opérateur?
Selon ces fils et articles
Réplication et basculement en continu sur PostgreSQL
Automatiser le basculement dans PostgreSQL 9.1
http://denishjpatel.blogspot.com/2010/11/possibility-of-graceful-switchover.html
il n'y a pas de solution unique entièrement automatique pour résoudre ces questions. Ai-je raison?
Merci!
la source
Réponses:
Oui, ils sont différents et vous devez en créer de nouveaux pour l'ancien maître. Cependant, l'ancien serveur de secours continuera de fonctionner en tant que maître, mais vous devez définir max_wal_senders sur ce nœud. vous devez également définir pg_hba.conf du nouveau maître après le basculement. après le basculement (lorsque les nœuds changent de rôle maître-> esclave esclave-> maître), vous devez transférer les nouveaux fichiers wal vers le nouveau répertoire de données des dossiers de secours que vous définissez dans le fichier recovery.conf. ou simplement vous pouvez utiliser rsync.
peut-être que vous pouvez utiliser pgbouncer. de cette façon, vous allez simplement changer le serveur pgbouncer adres en nouveau maître.
EnterpriseDB dispose de quelques outils commerciaux. peut-être que vous pouvez les vérifier.
et enfin oui vous avez raison. il n'y a pas de solution unique entièrement automatique pour résoudre ces questions.
la source