Bloqué dans une boucle de mise à jour après la mise à jour de PostgreSQL 13

J’ai lu la documentation ici, mais elle ne couvre pas mon cas : PostgreSQL 13 update

Je suis bloqué dans la situation « Chaque reconstruction refait la mise à niveau, créant une boucle de mise à niveau » :

-------------------------------------------------------------------------------------
MISE À NIVEAU DE POSTGRES TERMINÉE

L'ancienne base de données 10 est stockée dans /shared/postgres_data_old

Pour terminer la mise à niveau, reconstruisez à nouveau en utilisant :

./launcher rebuild app
-------------------------------------------------------------------------------------

La documentation indique que cela est dû au fait qu’« il reste encore des fichiers de la dernière mise à niveau. Déplacez-les ailleurs avant de continuer. »

Mais je n’ai aucun ancien fichier :

root@connect:/var/discourse# ls /mnt/volume_ams3_01/shared/standalone/
backups  letsencrypt  log  postgres_backup  postgres_data  postgres_data_new  postgres_run  redis_data  ssl  state  tmp  uploads

Deux autres remarques :

  • Le dossier postgres_data est vide.
  • J’utilise un dossier partagé séparé via DigitalOcean Spaces.

Que puis-je essayer pour résoudre ce problème ?

Bonjour Alex,

Je ne suis pas certain de ce qui provoque la boucle de redémarrage, mais vous pourriez contourner le problème. Le répertoire postgres_data_new contient-il votre base de données ? Si oui, vérifiez le fichier PG_VERSION à l’intérieur de ce répertoire pour voir si la mise à niveau a fonctionné. De plus, les journaux complets seraient utiles si vous pouviez les copier ici.

2 « J'aime »

Oui, postgres_data_new contient ma base de données et le fichier PG_VERSION qu’il contient confirme que la version est 13.

Je ne suis pas sûr de savoir quels journaux seraient utiles à partager avec vous (et où les trouver).

Dans ce cas, vous devriez pouvoir copier postgres_data_new dans le répertoire postgres_data, puis procéder à une reconstruction. launcher détectera que la base de données est déjà à jour sur PG13 et reprendra à partir de là.

1 « J'aime »

Salut Michael ! J’avais oublié de mentionner que depuis ma publication initiale ici, j’ai essayé cela (deux fois). Je suis toujours bloqué dans la boucle.

1 « J'aime »

Je ne suis pas sûr de savoir comment capturer la sortie de ./launcher rebuild app, mais voici ce que j’ai obtenu.

Cela commence ainsi :

root@connect:/var/discourse# ./launcher rebuild app
Assurance que le lanceur est à jour
Récupération de l'origine
Le lanceur est à jour
Arrêt de l'ancien conteneur
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
Depuis https://github.com/discourse/pups
   17f04ec..e0ff889  master     -> origin/master
 * [nouveau tag]         v1.1.1     -> v1.1.1
 * [nouveau tag]         v1.1.0     -> v1.1.0
Mise à jour de 17f04ec..e0ff889
Avancement rapide
 .github/workflows/ci.yml     |  29 ++++++
 .github/workflows/lint.yml   |  27 +++++
 .rubocop.yml                 |   3 +
 Gemfile                      |   2 +
 Guardfile                    |   4 +-
 README.md                    |  21 ++++
 Rakefile                     |  14 +--
 bin/pups                     |   8 +-
 lib/pups.rb                  |  32 ++++--
 lib/pups/cli.rb              |  92 ++++++++++-------
 lib/pups/command.rb          |  25 +++--
 lib/pups/config.rb           | 240 +++++++++++++++++++++++--------------------
 lib/pups/docker.rb           |  69 +++++++++++++
 lib/pups/exec_command.rb     | 182 ++++++++++++++++----------------
 lib/pups/file_command.rb     |  60 +++++------
 lib/pups/merge_command.rb    |  94 ++++++++---------
 lib/pups/replace_command.rb  |  70 +++++++------
 lib/pups/runit.rb            |  47 +++++----
 lib/pups/version.rb          |   4 +-
 pups.gemspec                 |  37 ++++---
 test/cli_test.rb             | 102 +++++++++++++++---
 test/config_test.rb          | 215 ++++++++++++++++++++++++++++----------
 test/docker_test.rb          | 157 ++++++++++++++++++++++++++++
 test/exec_command_test.rb    |  62 ++++++-----
 test/file_command_test.rb    |  17 ++-
 test/merge_command_test.rb   |  64 ++++++------
 test/replace_command_test.rb |  86 ++++++++--------
 test/test_helper.rb          |   2 +
 28 fichiers modifiés, 1158 insertions(+), 607 suppressions(-)
 création du mode 100644 .github/workflows/ci.yml
 création du mode 100644 .github/workflows/lint.yml
 création du mode 100644 .rubocop.yml
 création du mode 100644 lib/pups/docker.rb
 création du mode 100644 test/docker_test.rb
Note : vérification de la sortie 'v1.0.3'.

Vous êtes dans un état « HEAD détaché ». Vous pouvez regarder autour de vous, apporter des modifications expérimentales et les valider, et vous pouvez abandonner toutes les validations que vous effectuez dans cet état sans affecter aucune branche en effectuant une autre vérification.

Si vous souhaitez créer une nouvelle branche pour conserver les validations que vous créez, vous pouvez le faire (maintenant ou plus tard) en utilisant -b avec la commande checkout à nouveau. Exemple :

  git checkout -b <nom-de-nouvelle-branche>

HEAD est maintenant sur d1db030 couper une nouvelle version
I, [2021-10-19T05:37:44.995716 #1]  INFO -- : Chargement de --stdin
I, [2021-10-19T05:37:45.001857 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2021-10-19T05:37:45.031533 #1]  INFO -- : Génération des paramètres régionaux (cela peut prendre un certain temps)...
Génération terminée.

I, [2021-10-19T05:37:45.032260 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2021-10-19T05:37:45.037403 #1]  INFO -- :
I, [2021-10-19T05:37:45.038002 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2021-10-19T05:37:45.041480 #1]  INFO -- :
I, [2021-10-19T05:37:45.041974 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2021-10-19T05:37:45.044313 #1]  INFO -- :
I, [2021-10-19T05:37:45.044759 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2021-10-19T05:37:45.047047 #1]  INFO -- :
I, [2021-10-19T05:37:45.047605 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2021-10-19T05:37:45.051062 #1]  INFO -- :
I, [2021-10-19T05:37:45.051463 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres already running stop container ; exit 1
2021/10/19 05:37:45 socat[33] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Aucun fichier ou répertoire de ce type
I, [2021-10-19T05:37:45.058669 #1]  INFO -- :
I, [2021-10-19T05:37:45.058976 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2021-10-19T05:37:45.061427 #1]  INFO -- :
I, [2021-10-19T05:37:45.061743 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2021-10-19T05:37:45.063969 #1]  INFO -- :
I, [2021-10-19T05:37:45.064258 #1]  INFO -- : > mkdir -p /shared/postgres_run/13-main.pg_stat_tmp
I, [2021-10-19T05:37:45.068148 #1]  INFO -- :
I, [2021-10-19T05:37:45.068570 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/13-main.pg_stat_tmp
I, [2021-10-19T05:37:45.070400 #1]  INFO -- :
I, [2021-10-19T05:37:45.074243 #1]  INFO -- : Fichier > /etc/service/postgres/run  chmod: +x  chown:
I, [2021-10-19T05:37:45.077577 #1]  INFO -- : Fichier > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2021-10-19T05:37:45.081084 #1]  INFO -- : Fichier > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2021-10-19T05:37:45.084463 #1]  INFO -- : Fichier > /root/upgrade_postgres  chmod: +x  chown:
I, [2021-10-19T05:37:45.084841 #1]  INFO -- : > chown -R root /var/lib/postgresql/13/main
I, [2021-10-19T05:37:45.766251 #1]  INFO -- :
I, [2021-10-19T05:37:45.766560 #1]  INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/13/bin/initdb -D /shared/postgres_data || exit 0
I, [2021-10-19T05:37:45.769955 #1]  INFO -- :
I, [2021-10-19T05:37:45.770597 #1]  INFO -- : > chown -R postgres:postgres /shared/postgres_data
I, [2021-10-19T05:37:45.841916 #1]  INFO -- :
I, [2021-10-19T05:37:45.842605 #1]  INFO -- : > chown -R postgres:postgres /var/run/postgresql
I, [2021-10-19T05:37:45.845109 #1]  INFO -- :
I, [2021-10-19T05:37:45.845574 #1]  INFO -- : > /root/upgrade_postgres
initdb : avertissement : activation de l'authentification « trust » pour les connexions locales
Vous pouvez modifier cela en éditant pg_hba.conf ou en utilisant l'option -A, ou
--auth-local et --auth-host, la prochaine fois que vous exécuterez initdb.
debconf : report de la configuration du package, car apt-utils n'est pas installé

Ensuite, cela passe trop vite (avec de nombreuses lignes dans /shared/postgres_data/base/whatever) et se termine ainsi :

  /shared/postgres_data/base/16400/203028
  /shared/postgres_data/base/16400/203045
  /shared/postgres_data/base/16400/203047
  /shared/postgres_data/base/16400/203049
  /shared/postgres_data/base/16400/203050
  /shared/postgres_data/base/13014/2613
  /shared/postgres_data/base/13014/2683
  /shared/postgres_data/base/1/2613
  /shared/postgres_data/base/1/2683
                                                            ok
Définition du prochain OID pour le nouveau cluster            ok
Synchronisation du répertoire de données vers le disque         ok
Création du script pour analyser le nouveau cluster             ok
Création du script pour supprimer l'ancien cluster              ok

Mise à niveau terminée
----------------
Les statistiques de l'optimiseur ne sont pas transférées par pg_upgrade, donc,
une fois que vous démarrez le nouveau serveur, envisagez d'exécuter :
    ./analyze_new_cluster.sh

L'exécution de ce script supprimera les fichiers de données de l'ancien cluster :
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
MISE À NIVEAU DE POSTGRES TERMINÉE

L'ancienne base de données 10 est stockée dans /shared/postgres_data_old

Pour terminer la mise à niveau, reconstruisez à nouveau en utilisant :

./launcher rebuild app
-------------------------------------------------------------------------------------

a68ed0b1b54e4a0e2dae2543dc27d87be02ca1f81738e0d2e43511a46524a980

Pourriez-vous partager quels modèles vous incluez dans containers/app.yml ?

Bien sûr :

templates:
  # - "templates/postgres.10.template.yml"
  - "templates/postgres.13.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/web.replygif.template.yml" # pour le plugin ReplyGIF : https://github.com/cpradio/discourse-plugin-replygif

(Je vais commenter celui de replygif, puisque je ne l’utilise de toute façon pas.)

Que signifie cela ? Je pense que cela pourrait être lié.

Pourquoi ne s’agit-il pas simplement du modèle Postgres sans le 13 ?

Cela pourrait être le problème.

1 « J'aime »

Salut Jay !

Tu as raison, c’est une erreur et cela semble être le coupable probable. J’ai changé cela pour templates/postgres.template.yml et j’ai reconstruit deux fois, mais je suis toujours bloqué dans la boucle.

J’ai suivi ce guide (à l’époque où il était disponible) pour utiliser DigitalOcean Spaces pour les sauvegardes et les téléchargements d’images.

Mes données PostgreSQL semblent être à deux endroits :

  • /var/postgres_data_discourse (PG_VERSION = 10)
  • /mnt/volume_ams3_01/shared/standalone/postgres_data_new (PG_VERSION = 13)
  • /mnt/volume_ams3_01/shared/standalone/postgres_data (PG_VERSION = 13) – J’ai copié ces fichiers manuellement depuis postgres_data_new comme suggéré précédemment

Mon hypothèse actuelle est que cela a quelque chose à voir avec votre mappage de volumes.

Cependant, ce qui précède semble indiquer que vous disposez d’une instance PostgreSQL distincte de celle que Discourse met à jour. Discourse n’a aucun lien avec la base PostgreSQL située dans /var/postgres_data_discourse. Peut-être avez-vous essayé d’utiliser votre propre PostgreSQL plutôt que celui fourni par Discourse ? Cela ne ressemble pas à une installation standard.

1 « J'aime »

Il s’agit d’une installation standard de 2016 que j’ai mise à jour depuis, donc peut-être que quelque chose a changé entre-temps ?

Pour la mappage des volumes, j’ai suivi les étapes du guide que j’ai lié ci-dessus.

Je ne pense pas avoir essayé d’installer mon propre PostgreSQL — je ne suis pas assez technique pour savoir pourquoi je voudrais même le faire :smiley:

Je peux dire que j’ai rencontré le « problème de boucle » lorsque j’ai essayé de passer de PostgreSQL 10 à 12, et je l’ai donc mis de côté pour y revenir plus tard. L’autre jour, je n’ai plus été capable de reconstruire du tout, et d’après les messages d’erreur, j’ai supposé que cela avait un lien avec PostgreSQL, alors j’ai essayé de mettre à jour en pensant que cela pourrait résoudre le problème.

Est-il possible de revenir au modèle PostgreSQL 10 pour voir quelles erreurs il génère ?

Édition : toute autre suggestion est la bienvenue ! Je ne suis pas sûr de savoir comment procéder à ce stade.

Il aurait été bon de le mentionner dans votre premier message.

Je procéderais à une installation propre et restaurerais votre sauvegarde la plus récente. C’est la solution la plus simple. Votre système d’exploitation est probablement également obsolète.

2 « J'aime »

Cela semble être beaucoup d’efforts pour résoudre un seul problème, mais c’est au moins une voie concrète. Merci de m’avoir aidé à résoudre cela, Jay ! :folded_hands:

Je ne dis pas qu’il n’existe pas d’autre issue à votre situation, mais cette approche à grands coups de marteau a de fortes chances de réussir et ne nécessite aucune connaissance particulière. Il y a une foule de petites choses que je pourrais essayer si c’était moi qui réglais le problème, mais elles sont toutes assez difficiles à décrire ici, surtout lorsqu’il n’est pas clair lesquelles essayer ou si elles pourraient fonctionner.

Si ce système a été configuré en 2016 et qu’il exécute toujours ce système d’exploitation, il n’est pas trop tôt pour le mettre à niveau. À mon avis, il est beaucoup plus simple de déployer un nouveau serveur que de procéder à une mise à niveau du système d’exploitation (ceci est peut-être beaucoup moins vrai aujourd’hui qu’il y a 15 ans, moment où j’ai formulé cette opinion !).

2 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.