PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Test automatisé du processus de mise à niveau pour PostgreSQL

Les tests sont une tâche qui prend du temps, mais c'est un must avant tout processus de mise à niveau sur n'importe quelle technologie. Selon le type de mise à niveau, cela peut être plus difficile ou plus facile, mais c'est toujours nécessaire si vous voulez vous assurer que vos données seront en sécurité. Il existe différentes approches de mise à niveau, en fonction de l'activité et de la tolérance aux temps d'arrêt. Par exemple, le processus pourrait tester votre application dans un environnement séparé avec la nouvelle version, vous devrez donc créer un nouveau cluster pour cela. Une autre option consiste à cloner votre environnement de production actuel et à le mettre à niveau, ce qui pourrait être utile car vous pouvez émuler tout le processus de mise à niveau et éviter les surprises à l'avenir.

En effectuant tout ce processus de test manuellement, il y a un grand risque d'erreur humaine et le processus sera lent, ce qui pourrait affecter l'objectif de temps de récupération (RTO). Dans ce blog, nous verrons comment automatiser les tests de mise à niveau de vos bases de données PostgreSQL à l'aide de ClusterControl.

Type de mises à jour de la base de données

Il existe deux types de mises à niveau :les mises à niveau mineures et les mises à niveau majeures.

Mises à jour mineures

Il s'agit de la mise à niveau la plus courante et la plus sûre, et dans la plupart des cas, elle est effectuée sur place. Comme rien n'est sécurisé à 100 %, vous devez toujours avoir des sauvegardes et des nœuds de secours, donc en cas de problème avec la mise à niveau, vous pouvez promouvoir un nœud de secours dans la version précédente, et vos systèmes peuvent toujours fonctionner sans interruption.

Vous pouvez effectuer ce type de mise à niveau à l'aide de ClusterControl. Pour cela, allez dans ClusterControl -> Sélectionnez votre cluster PostgreSQL -> Gérer -> Mises à niveau.

Sur chaque nœud sélectionné, la procédure de mise à niveau :

  • Arrêter le nœud

  • Nœud de mise à niveau

  • Noeud de démarrage

Le nœud maître dans une topologie PostgreSQL ne sera pas mis à niveau. Pour mettre à niveau le maître, un autre nœud doit d'abord être promu pour devenir le nouveau maître.

Améliorations majeures

Pour les mises à niveau majeures, la mise à niveau sur place n'est pas recommandée, car le risque de problème est trop élevé pour un environnement de production. Au lieu de cela, il existe différentes approches pour effectuer des mises à niveau.

Vous pouvez cloner votre cluster de base de données actuel, le mettre à niveau et y tester votre application, et lorsque vous avez terminé, si tout s'est bien passé, vous pouvez le recréer pour répéter le processus pour effectuer la véritable mise à niveau , ou vous pouvez également créer un nouveau cluster dans la nouvelle version, tester votre application et basculer le trafic lorsqu'il est prêt, et il y a plus d'options... L'utilisation des Load Balancers est ici utile pour améliorer la Haute Disponibilité. La meilleure approche dépend de la tolérance aux temps d'arrêt et de l'objectif de temps de récupération (RTO).

Vous ne pouvez pas effectuer directement des mises à niveau majeures avec ClusterControl, car, comme nous l'avons mentionné, vous devez d'abord tout tester, pour vous assurer que la mise à niveau est sûre, mais vous pouvez utiliser différentes fonctionnalités de ClusterControl pour faire cette tâche plus facile. Voyons donc certaines de ces fonctionnalités.

Déploiement d'un environnement de test

Pour cela, vous n'avez pas besoin de tout créer à partir de zéro. Au lieu de cela, vous pouvez utiliser ClusterControl pour le faire de manière manuelle ou automatisée.

Restaurer la sauvegarde sur un hôte autonome

Dans la section Sauvegarde, choisissez une sauvegarde et vous verrez l'option "Restaurer et vérifier sur un hôte autonome" pour restaurer une sauvegarde dans un nœud séparé.

Ici, vous pouvez spécifier si vous souhaitez que ClusterControl installe le logiciel dans le nouveau nœud et désactivez le pare-feu ou AppArmor/SELinux (selon le système d'exploitation). Pour cela, vous avez besoin d'un hôte dédié (ou VM) qui ne fait pas partie du cluster.

Vous pouvez garder le nœud opérationnel ou ClusterControl peut arrêter la base de données service jusqu'à la prochaine tâche de restauration. Une fois terminé, vous verrez la sauvegarde restaurée/vérifiée dans la liste de sauvegarde marquée d'une coche.

Si vous ne souhaitez pas effectuer cette tâche manuellement, vous pouvez planifier ce processus à l'aide de la fonctionnalité de vérification de sauvegarde, pour répéter ce travail périodiquement dans un travail de sauvegarde. Nous allons voir comment procéder dans la section suivante.

Vérification automatique de la sauvegarde ClusterControl

Pour automatiser cette tâche, accédez à ClusterControl -> Sélectionnez votre cluster PostgreSQL -> Sauvegarde -> Créer une sauvegarde, et choisissez l'option Sauvegarde planifiée. La fonction de vérification automatique de la sauvegarde n'est disponible que pour les sauvegardes planifiées.

Dans la deuxième étape, assurez-vous d'avoir activé l'option Vérifier la sauvegarde, et remplissez les informations requises.

Lorsque le travail est terminé, vous pouvez voir l'icône de vérification dans le ClusterControl Section de sauvegarde, la même que vous aurez en effectuant la vérification de manière manuelle, à la différence que vous n'avez pas à vous soucier de la tâche de restauration. ClusterControl restaurera automatiquement la sauvegarde à chaque fois et vous pourrez tester votre application avec les données les plus récentes.

Créer un cluster à partir d'une sauvegarde

Une autre façon de créer un environnement de test consiste à créer un nouveau cluster à partir d'une sauvegarde de votre cluster principal. Pour cela, allez dans ClusterControl -> Sélectionnez votre cluster PostgreSQL -> Sauvegarde. Là, choisissez la sauvegarde à restaurer dans la liste et sélectionnez Restaurer -> Créer un cluster à partir de la sauvegarde.

Cette option créera un nouveau cluster PostgreSQL à partir de la sauvegarde sélectionnée.

Vous devez ajouter les informations d'identification du système d'exploitation et de la base de données et les informations pour déployer le nouveau cluster. Une fois cette tâche terminée, vous verrez le nouveau cluster dans l'interface utilisateur de ClusterControl.

Réplication de cluster à cluster

Depuis ClusterControl 1.7.4, il existe une fonctionnalité appelée réplication de cluster à cluster. Il vous permet d'avoir une réplication en cours d'exécution entre deux clusters autonomes.

Création d'une réplication de cluster à cluster

Allez dans ClusterControl -> Sélectionnez votre cluster PostgreSQL -> Actions du cluster -> Créer un cluster esclave.

Le cluster esclave sera créé en diffusant les données du cluster principal actuel.

Vous devez spécifier les informations d'identification et le port SSH, un nom pour votre cluster esclave, et si vous souhaitez que ClusterControl installe pour vous les logiciels et configurations correspondants.

Après avoir configuré les informations d'accès SSH, vous devez définir la version de la base de données, datadir, port et informations d'identification d'administrateur. Comme il utilisera la réplication en continu, assurez-vous d'utiliser la même version de base de données et les informations d'identification doivent être les mêmes que celles utilisées par le cluster principal.

Dans cette étape, vous devez ajouter le serveur au nouveau cluster esclave . Pour cette tâche, vous pouvez entrer à la fois l'adresse IP ou le nom d'hôte du nœud de la base de données.

Vous pouvez surveiller l'état du travail dans le moniteur d'activité de ClusterControl. Une fois la tâche terminée, vous pouvez voir le cluster dans l'écran principal de ClusterControl.

Récupération automatique et basculement

Lorsque la fonction de récupération automatique est activée, en cas d'échec, ClusterControl promouvra le nœud de secours le plus avancé en nœud principal et vous informera du problème. Il bascule également sur le reste des nœuds de secours pour répliquer à partir du nouveau serveur principal.

S'il y a des équilibreurs de charge dans la topologie, ClusterControl les reconfigurera pour appliquer les changements de topologie.

Vous pouvez également exécuter un basculement manuellement si nécessaire. Allez dans ClusterControl -> Sélectionnez votre cluster PostgreSQL -> Nœuds -> Sélectionnez le nœud à promouvoir -> Actions du nœud -> Promouvoir l'esclave.

De cette façon, si quelque chose ne va pas pendant la mise à niveau, vous pouvez utiliser ClusterControl pour le réparer dès que possible.

Automatiser les choses avec ClusterControl CLI

ClusterControl CLI, également connu sous le nom de s9s, est un outil de ligne de commande introduit dans ClusterControl version 1.4.1 pour interagir, contrôler et gérer les clusters de bases de données à l'aide du système ClusterControl. ClusterControl CLI ouvre une porte pour l'automatisation des clusters où vous pouvez facilement l'intégrer aux outils d'automatisation de déploiement existants comme Ansible, Puppet, Chef, etc. Voyons maintenant quelques exemples de cet outil.

Mettre à niveau

$ s9s cluster --cluster-id=9 \
--check-pkg-upgrades \
--log
$ s9s cluster --cluster-id=9 \
--available-upgrades \
--nodes=10.10.10.122 \
--log \
--print-json
$ s9s cluster --cluster-id=9 \
--upgrade-cluster \
--nodes=10.10.10.122 \
--log

Vérifier les sauvegardes

$ s9s backup --verify \
--backup-id=2 \
--test-server=10.10.10.124 \
--cluster-id=9 \
--log

Réplication de cluster à cluster

$ s9s cluster --create \
--cluster-name=PostgreSQL-c2c \
--cluster-type=postgresql \
--provider-version=13 \
--nodes=10.10.10.125 \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--db-admin=admin \
--db-admin-passwd=********* \
--vendor=postgres \
--remote-cluster-id=9 \
--log

Promouvoir le nœud esclave

$ s9s cluster --promote-slave \
--cluster-id=9 \
--nodes='10.10.10.122' \
--log

Conclusion

Les mises à niveau sont des tâches nécessaires mais chronophages car vous devez tester votre application pour éviter tout problème pendant le processus. Déployer un environnement de test chaque fois que vous avez besoin de le mettre à niveau et de le maintenir à jour sans aucun outil d'automatisation peut s'avérer difficile.

ClusterControl vous permet d'effectuer des mises à niveau mineures à partir de l'interface utilisateur ou de la CLI de ClusterControl, ou même de déployer l'environnement de test pour rendre la tâche de mise à niveau plus facile et plus sûre. Vous pouvez également l'intégrer à différents outils d'automatisation tels qu'Ansible, Puppet, etc.