Upgrade pg11 vers pg 12 ou 13

Initialiser un cluster, gérer les accès, modifier les paramètres par défaut, interroger le catalogue avec psql ou pgAdmin, déplacer les données avec pgdump etc.
Répondre
tsalle
Messages : 1
Enregistré le : mer. 30 sept. 2020 11:57

Upgrade pg11 vers pg 12 ou 13

Message par tsalle »

Bonjour,
Je gère actuellement un cluster Postgresql en version 11 (primary + standby).
Je souhaiterait mettre à jour ce cluster en version 12 ou 13 avec le minimum de downtime possible.
Qu'elle est la meilleure solution ?
- pgdump_all + pg_restore sur une nouvelle instance ?
j'ai environ 300Go de données, ça risque de prendre pas mal de temps.
- créer un standby pg 12 ou 13 via réplication logique ?
j'ai beaucoup de tables et de schémas, certaines n'ont pas de pk et donc la réplication logique ne fonctionne pas.
de plus certaines tables sont très grosses, et le worker pg de replication logique plante.

Est-il possible de créer un standby phsycical en pg11, puis de faire un pg_upgrade sur celui-ci et reprendre la réplication physique ensuite ?
Ainsi, je n'aurait qu'a stopper mon primaire actuel, switcher mon nouveau serveur en primaire (j'utilise consul comme service discovery pour avoir un dns qui pointe toujours vers le primary, donc pas de changement a fair edu côté des applis).

J'envisage également une migration vers du google cloud SQL managé.
Idem, comment migrer les données sans downtime (le moins possible) ?
Phil
Administrateur du site
Messages : 291
Enregistré le : mar. 1 sept. 2015 00:38
Localisation : France
Contact :

Re: Upgrade pg11 vers pg 12 ou 13

Message par Phil »

Merci pour cette question.
Je souhaiterait mettre à jour ce cluster en version 12 ou 13 avec le minimum de downtime possible.
PostgreSQL 11 est supporté jusque fin 2023 donc cette mise à jour n'est pas encore obligatoire. PostgreSQL 13 vient seulement de sortir mais il est vrai que cette version apporte plusieurs avancées intéressantes. Je n'ai toutefois pour l'instant fait des upgrades vers PostgreSQL 13 qu'à des fins d'évaluation, j'attendrai que Debian 11 soit stable courant 2021 pour passer à PostgreSQL 13 en production. Plusieurs versions mineures seront sorties d'ici là.
- pgdump_all + pg_restore sur une nouvelle instance ?
j'ai environ 300Go de données, ça risque de prendre pas mal de temps.
300Go, c'est un petit cluster avec les systèmes actuels. Vous pouvez procéder par pg_dump/pg_restore en parallèle si vous avez les ressources I/O & CPU, cela ne prendra pas si longtemps, je vous suggère de faire l'essai sur vos systèmes. Un export/import aura le mérite de réaliser la réindexation dans le processus et de bénéficier immédiatement des apports de PostgreSQL 13 à ce niveau.
Est-il possible de créer un standby phsycical en pg11, puis de faire un pg_upgrade sur celui-ci et reprendre la réplication physique ensuite ?
Vous pouvez en effet utiliser pg_upgrade mais il n'y a pas forcément d'intérêt à créer une standby spécialement pour ça, sauf pour sécuriser davantage le processus. Il n'est en effet techniquement pas possible d'avoir un cluster primaire répliquant physiquement vers une standby dans une autre version majeure.
pg_upgrade ne touche de toute façon pas à votre cluster original s'il n'est pas utilisé en mode "link". Il y a toujours possibilité de repartir sur le cluster d'origine en cas d'échec dans le processus. Utiliser pg_upgrade en mode check avant toute opération réelle de toute façon.
pg_upgrade peut faire une copie complète mais il faut le double de l'espace et copier 300Go n'est tout de même pas instantané.
Ce n'est toutefois pas la seule possibilité puisque la cible est PostgreSQL 12 ou 13. Si vous avez un FS qui supporte reflink (exemple : XFS), pg_upgrade peut réaliser une copie en mode clone : c'est extrêmement rapide, ne nécessite pas d'espace ET vous ne touchez pas au cluster d'origine
Si votre FS d'origine est ext4 ou autre FS ne supportant pas reflink, vous pouvez mettre en réplication une standby stockée dans un FS supportant le mode reflink, arrêter l'applicatif, vérifier l'application des dernières infos de journalisaiton, appliquer pg_upgrade en mode clone sur la standby et redémarrer l'applicatif sur ce cluster mis à jour. C'est entièrement sécurisé et rapide.
Sinon il y a toujours eu la possibilité d'utiliser le mode "link" mais je n'aime pas beaucoup le principe, c'est basé sur des liens symboliques et c'est aussi le seul mode qui ne permet pas de repartir sur le cluster d'origine en cas de problème.

A noter que si vous utilisez Debian (ou une Debian-like comme Ubuntu), une commande facilite tout le processus tout en vous laissant le choix parmi les différentes possibilités d'upgrade évoquées : https://manpages.debian.org/buster/post ... .1.en.html , export/import, pg_upgrade ...
Le mode clone n'est pas disponible car Debian 10 intègre PostgreSQL 11 mais elle apparaît avec Debian 11 qui intégrera PostgreSQL 13 : https://manpages.debian.org/testing/pos ... .1.en.html
J'envisage également une migration vers du google cloud SQL managé.
Idem, comment migrer les données sans downtime (le moins possible) ?
Si vous avez la possibilité de construire une standby, cela prendra juste le temps du failover. S'il n'y a pas de possibilité de créer un streaming WAL vers le cloud, il y aura de toute façon juste le différentiel de WAL à appliquer entre la base d'origine et la copie de sauvegarde restaurée en cible.
Cdlt. Phil - pgphil.ovh
Répondre