La haute disponibilité est une exigence pour de nombreux systèmes, quelle que soit la technologie que vous utilisez. Ceci est particulièrement important pour les bases de données, car elles stockent les données sur lesquelles les applications s'appuient. Selon les besoins, il existe différentes manières de déployer un environnement Haute Disponibilité pour PostgreSQL, mais il est toujours nécessaire d'utiliser un outil complémentaire car les fonctionnalités natives de PostgreSQL ne suffisent pas.
Dans ce blog, nous verrons comment déployer Percona Distribution pour PostgreSQL pour la haute disponibilité, et quels types d'outils sont nécessaires pour le faire.
Distribution Percona pour PostgreSQL
C'est une collection d'outils pour vous aider à gérer votre système de base de données PostgreSQL. Il installe PostgreSQL et le complète par une sélection d'extensions qui permettent de résoudre efficacement les tâches pratiques essentielles, notamment :
- pg_repack :Il reconstruit les objets de la base de données PostgreSQL.
- pgaudit :Il fournit une journalisation d'audit détaillée de session ou d'objet via la fonction de journalisation standard de PostgreSQL.
- pgBackRest :Il s'agit d'une solution de sauvegarde et de restauration pour PostgreSQL.
- Patroni :Il s'agit d'une solution de haute disponibilité pour PostgreSQL.
- pg_stat_monitor :Il collecte et agrège des statistiques pour PostgreSQL et fournit des informations d'histogramme.
- Une collection d'extensions de contribution PostgreSQL supplémentaires.
Haute disponibilité sur PostgreSQL
Il existe différentes architectures pour la haute disponibilité de PostgreSQL, mais la plus courante est d'avoir une topologie Maître-Esclave (Primaire-Secours). Il est basé sur une base de données principale avec un ou plusieurs nœuds de secours. Ces bases de secours resteront synchronisées (ou presque synchronisées) avec la primaire, selon que la réplication est synchrone ou asynchrone. Si le serveur principal tombe en panne, le serveur de secours contient presque toutes les données du serveur principal et peut rapidement être transformé en nouveau serveur de base de données principal.
Mais une configuration maître-esclave ne suffit pas pour assurer efficacement une haute disponibilité, car vous devez également gérer les pannes. Une fois qu'une panne est détectée, vous devriez être en mesure de sélectionner un nœud de secours et de basculer vers celui-ci avec le plus petit délai possible. PostgreSQL lui-même n'inclut pas de mécanisme de basculement automatique, ce qui nécessitera un script personnalisé ou des outils tiers pour cette automatisation.
Après un basculement, les applications doivent être notifiées en conséquence, afin qu'elles puissent commencer à utiliser le nouveau nœud principal. De plus, vous devez évaluer l'état de notre architecture après un basculement, car vous pouvez exécuter dans une situation où vous n'avez que le nouveau nœud principal en cours d'exécution (c'est-à-dire que vous aviez un nœud principal et un seul nœud de secours avant le problème). Dans ce cas, vous devrez ajouter un nouveau nœud de secours d'une manière ou d'une autre afin de recréer la configuration maître-esclave que vous aviez à l'origine pour la haute disponibilité.
Pour que cela fonctionne, vous aurez besoin de différents outils/services pour vous aider dans cette tâche.
Équilibreurs de charge
Les équilibreurs de charge sont des outils qui peuvent être utilisés pour gérer le trafic de votre application afin de tirer le meilleur parti de votre architecture de base de données.
Non seulement il est utile pour équilibrer la charge de nos bases de données, mais il aide également les applications à être redirigées vers les nœuds disponibles/sains et même à spécifier des ports avec des rôles différents.
HAProxy est un équilibreur de charge qui répartit le trafic d'une origine vers une ou plusieurs destinations et peut définir des règles et/ou des protocoles spécifiques pour cette tâche. Si l'une des destinations cesse de répondre, elle est marquée comme étant hors ligne et le trafic est envoyé vers le reste des destinations disponibles.
Keepalived est un service qui vous permet de configurer une adresse IP virtuelle au sein d'un groupe de serveurs actifs/passifs. Cette adresse IP virtuelle est attribuée à un serveur actif. Si ce serveur tombe en panne, l'IP est automatiquement migrée vers le serveur passif "Secondaire", lui permettant de continuer à fonctionner avec la même IP de manière transparente pour les systèmes.
Pour implémenter toutes ces choses, vous pouvez le faire manuellement, ce qui signifie un travail supplémentaire et des tâches chronophages, ou vous pouvez le faire à partir d'un seul système en utilisant ClusterControl.
Voyons comment importer votre distribution Percona existante pour PostgreSQL vers ClusterControl, puis comment configurer un environnement haute disponibilité à l'aide de HAProxy et Keepalived autour de cette configuration à partir d'une interface conviviale et facile à utiliser.
Topologie PostgreSQL pour la haute disponibilité
Une topologie haute disponibilité de base pour PostgreSQL peut être :
- 3 serveurs PostgreSQL 12 (un nœud principal et deux nœuds de secours).
- 2 équilibreurs de charge HAProxy.
- Keepalived configuré entre les serveurs d'équilibrage de charge.
- 1 serveur ClusterControl
Ainsi, vous aurez la topologie suivante :
Comment installer Percona Distribution pour PostgreSQL
Commençons par installer Percona Distribution pour PostgreSQL. Pour cet exemple, nous utiliserons CentOS 7 et PostgreSQL 12.
Si votre cluster est installé, passez à la section suivante pour importer votre base de données existante dans ClusterControl.
Installer epel-release et percona-release
$ yum install epel-release
$ yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
Activer le référentiel PostgreSQL 12
$ percona-release setup ppg-12
* Disabling all Percona Repositories
* Enabling the Percona Distribution for PostgreSQL 12 repository
<*> All done!
Installer le package serveur
$ yum install percona-postgresql12-server
Notez que ce package n'installera pas tous les composants de Percona Distribution. Pour installer ces composants, utilisez les packages facultatifs appropriés, comme indiqué ci-dessous :
$ yum install percona-pg_repack12
$ yum install percona-pgaudit
$ yum install percona-pgbackrest
$ yum install percona-patroni
$ yum install percona-pg-stat-monitor12
$ yum install percona-postgresql12-contrib
Initialiser la base de données
$ /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK
Assurez-vous d'avoir la bonne configuration pour pouvoir configurer une réplication PostgreSQL, similaire à :
$ vi /var/lib/pgsql/12/data/postgresql.conf
listen_addresses = '*'
wal_level=logical
max_wal_senders = 16
wal_keep_segments = 32
hot_standby = on
Ensuite, démarrez le service de base de données
$ systemctl start postgresql-12
Maintenant, si vous souhaitez ajouter des nœuds de secours, répétez les étapes 1, 2 et 3 dans tous les nœuds que vous souhaitez ajouter au cluster. Pour ces nœuds, vous n'avez rien d'autre à configurer car ClusterControl créera la configuration correspondante.
Importation de la distribution Percona pour PostgreSQL dans ClusterControl
Avec ClusterControl, vous pouvez déployer ou importer différents moteurs de base de données open source à partir du même système, et seul un accès SSH et un utilisateur privilégié sont requis pour l'utiliser.
Allez dans la section "Importer" et remplissez les informations requises de votre serveur PostgreSQL.
Vous devez spécifier l'utilisateur, la clé ou le mot de passe et le port pour vous connecter par SSH à vos serveurs. Vous avez également besoin d'un nom pour votre nouveau cluster, sinon ClusterControl vous en attribuera un générique.
Après avoir configuré les informations d'accès SSH, vous devez définir les informations d'identification de la base de données, version, basedir et l'adresse IP ou le nom d'hôte pour chaque nœud de base de données.
Si vous n'avez pas encore configuré la réplication, il vous suffit d'ajouter l'adresse IP ou le nom d'hôte du nœud principal, car nous vous montrerons comment ajouter le reste des nœuds plus tard.
Assurez-vous d'obtenir la coche verte lors de la saisie du nom d'hôte ou de l'adresse IP, indiquant que ClusterControl est capable de communiquer avec le nœud. Ensuite, cliquez sur le bouton Importer et attendez que ClusterControl termine son travail. Vous pouvez surveiller le processus dans la section d'activité ClusterControl. Une fois terminé, vous verrez le nouveau cluster sur l'écran principal de ClusterControl. Pour ajouter un nouveau réplica, accédez aux actions du cluster et sélectionnez l'option "Ajouter un esclave de réplication".
Si vous avez suivi les étapes précédentes, vous aurez installé Percona Distribution for PostgreSQL dans tous les nœuds de secours, vous devez donc désactiver le « Installer le logiciel PostgreSQL » dans cette section.
De cette manière, ClusterControl utilisera à la place les packages Percona Distribution for PostgreSQL installés d'installer les packages PostgreSQL officiels.
Lorsque vous avez terminé, vous verrez tous les nœuds du cluster et leur état dans la section de présentation.
Maintenant que vous avez la base de données prête, voyons comment compléter le High Environnement de disponibilité en ajoutant le reste des outils à l'aide de ClusterControl.
Déploiement de l'équilibreur de charge
Pour effectuer un déploiement d'équilibreur de charge, sélectionnez l'option "Ajouter un équilibreur de charge" dans les actions du cluster et remplissez les informations demandées.
Il vous suffit d'ajouter l'adresse IP ou le nom d'hôte, le port, la stratégie et les nœuds que vous allez ajouter à la configuration de l'équilibreur de charge.
Déploiement Keepalive
Pour effectuer un déploiement Keepalived, sélectionnez le cluster, accédez aux actions du cluster, sélectionnez "Ajouter un équilibreur de charge", puis accédez à la section "Keepalived".
Pour votre environnement Haute Disponibilité, vous devez sélectionner les serveurs d'équilibrage de charge et l'adresse IP virtuelle, que vous devrez utiliser pour accéder à votre cluster. Keepalived configure cette IP virtuelle dans l'équilibreur de charge actif et la migre d'un équilibreur de charge à un autre en cas de panne, afin que votre configuration puisse continuer à fonctionner normalement.
Conclusion
Comme vous ne pouvez pas encore déployer Percona Distribution pour PostgreSQL directement à partir de ClusterControl, dans ce blog, nous vous avons montré comment pouvoir le gérer à l'aide de ClusterControl, et comment ajouter différents outils comme HAProxy et Keepalived pour avoir un environnement de haute disponibilité en place de manière simple.