L'évolutivité est la propriété d'un système pour gérer un nombre croissant de demandes en ajoutant des ressources. Les raisons de ce nombre de demandes peuvent être temporaires, par exemple, si vous lancez une remise sur une vente, ou permanentes, pour une augmentation du nombre de clients ou d'employés. Dans tous les cas, vous devriez pouvoir ajouter ou supprimer des ressources pour gérer ces changements en fonction des demandes ou de l'augmentation du trafic.
Il existe différentes approches disponibles pour faire évoluer votre base de données. Dans ce blog, nous verrons quelles sont ces approches et comment faire évoluer votre base de données PostgreSQL à l'aide de Connection Poolers et Load Balancers.
Mise à l'échelle horizontale et verticale
Il existe deux manières principales de faire évoluer votre base de données.
- Mise à l'échelle horizontale (scale-out) :il est effectué en ajoutant plus de nœuds de base de données en créant ou en augmentant un cluster de base de données. Cela peut vous aider à améliorer les performances de lecture en équilibrant le trafic entre les nœuds.
- Échelle verticale (mise à l'échelle) :elle est effectuée en ajoutant plus de ressources matérielles (processeur, mémoire, disque) à un nœud de base de données existant. Il peut être nécessaire de modifier certains paramètres de configuration pour permettre à PostgreSQL d'utiliser une ressource matérielle nouvelle ou meilleure.
Groupeurs de connexions et équilibreurs de charge
Dans la mise à l'échelle horizontale et verticale, il peut être utile d'ajouter un outil externe pour réduire la charge sur votre base de données, ce qui améliorera les performances. Ce n'est peut-être pas suffisant, mais c'est un bon point de départ. Pour cela, il est judicieux d'implémenter un pooler de connexion et un load balancer. J'ai dit "et" parce qu'ils sont conçus pour des rôles différents.
Un regroupement de connexions est une méthode permettant de créer un pool de connexions et de les réutiliser en évitant d'ouvrir constamment de nouvelles connexions à la base de données, ce qui augmentera considérablement les performances de vos applications. PgBouncer est un pooleur de connexions populaire conçu pour PostgreSQL.
L'utilisation d'un équilibreur de charge est un moyen d'avoir une haute disponibilité dans la topologie de votre base de données et il est également utile d'augmenter les performances en équilibrant le trafic entre les nœuds disponibles. Pour cela, HAProxy est une bonne option pour PostgreSQL, car il s'agit d'un proxy open source qui peut être utilisé pour implémenter la haute disponibilité, l'équilibrage de charge et le proxy pour les applications basées sur TCP et HTTP.
Comment implémenter une combinaison de HAProxy, PgBouncer et PostgreSQL
Une combinaison des deux technologies, HAProxy et PgBouncer, est probablement le meilleur moyen d'évoluer et d'améliorer les performances de votre environnement PostgreSQL. Nous allons donc voir comment l'implémenter en utilisant l'architecture suivante :
Nous supposerons que vous avez installé ClusterControl, sinon, vous pouvez aller sur le site officiel, voire se référer à la documentation officielle pour l'installer.
Tout d'abord, vous devez déployer votre cluster PostgreSQL avec HAProxy devant. Pour cela, veuillez suivre les étapes de cet article de blog pour déployer à la fois PostgreSQL et HAProxy à l'aide de ClusterControl.
À ce stade, vous aurez quelque chose comme ceci :
Maintenant, vous pouvez installer PgBouncer sur chaque nœud de base de données ou sur une machine externe .
Pour obtenir le logiciel PgBouncer, vous pouvez vous rendre dans la section de téléchargement de PgBouncer, ou utiliser les référentiels RPM ou DEB. Pour cet exemple, nous utiliserons CentOS 8 et l'installerons à partir du référentiel officiel PostgreSQL.
Tout d'abord, téléchargez et installez le dépôt correspondant depuis le site PostgreSQL (si vous ne l'avez pas encore en place) :
$ wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ rpm -Uvh pgdg-redhat-repo-latest.noarch.rpm
Ensuite, installez le package PgBouncer :
$ yum install pgbouncer
Une fois terminé, vous aurez un nouveau fichier de configuration situé dans /etc/pgbouncer/pgbouncer.ini. Comme fichier de configuration par défaut, vous pouvez utiliser l'exemple suivant :
$ cat /etc/pgbouncer/pgbouncer.ini
[databases]
world = host=127.0.0.1 port=5432 dbname=world
[pgbouncer]
logfile = /var/log/pgbouncer/pgbouncer.log
pidfile = /var/run/pgbouncer/pgbouncer.pid
listen_addr = *
listen_port = 6432
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
admin_users = admindb
Et le fichier d'authentification :
$ cat /etc/pgbouncer/userlist.txt
"admindb" "root123"
Ceci n'est qu'un exemple de base. Pour obtenir tous les paramètres disponibles, vous pouvez consulter la documentation officielle.
Donc, dans ce cas, j'ai installé PgBouncer dans le même nœud de base de données, en écoutant toutes les adresses IP, et il se connecte à une base de données PostgreSQL appelée "world". Je gère également les utilisateurs autorisés dans le fichier userlist.txt avec un mot de passe en texte brut qui peut être chiffré si nécessaire.
Pour démarrer le service PgBouncer, il vous suffit d'exécuter la commande suivante :
$ pgbouncer -d /etc/pgbouncer/pgbouncer.ini
Maintenant, exécutez la commande suivante en utilisant vos informations locales (port, hôte, nom d'utilisateur et nom de la base de données) pour accéder à la base de données PostgreSQL :
$ psql -p 6432 -h 127.0.0.1 -U admindb world
Password for user admindb:
psql (12.4)
Type "help" for help.
world=#
Il s'agit d'une topologie de base. Vous pouvez l'améliorer, par exemple, en ajoutant deux ou plusieurs nœuds d'équilibrage de charge pour éviter un seul point de défaillance, et en utilisant un outil comme « Keepalived », pour assurer la disponibilité. Cela peut également être fait en utilisant ClusterControl.
Pour plus d'informations sur PgBouncer et son utilisation, vous pouvez vous référer à cet article de blog.
Conclusion
Si vous avez besoin de mettre à l'échelle votre cluster PostgreSQL, l'ajout de HAProxy et PgBouncer est un bon moyen d'évoluer en même temps, car vous pouvez ajouter plus de nœuds de secours pour équilibrer le trafic. et vous améliorerez les performances en réutilisant les connexions ouvertes.
ClusterControl fournit toute une gamme de fonctionnalités, allant de la surveillance, de l'alerte, du basculement automatique, de la sauvegarde, de la récupération ponctuelle, de la vérification de la sauvegarde à la mise à l'échelle des répliques en lecture. Cela peut vous aider à faire évoluer votre base de données PostgreSQL de manière horizontale ou verticale à partir d'une interface utilisateur conviviale et intuitive.