In einer Update-Schleife nach PostgreSQL 13 Update gefangen

Ich habe die Dokumentation hier gelesen, und sie deckt meinen Fall nicht ab: PostgreSQL 13 update

Ich stecke in der Situation fest: „Jeder Neuaufbau führt das Upgrade erneut durch, also eine Upgrade-Schleife":

-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 10 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

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

Laut den Dokumenten liegt das daran, dass noch Dateien vom letzten Upgrade herumliegen. Verschieben Sie diese, bevor Sie fortfahren.

Aber ich habe keine alten Dateien:

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

Zwei weitere Hinweise:

  • Der Ordner postgres_data ist leer.
  • Ich verwende einen separaten freigegebenen Ordner über DigitalOcean Spaces.

Was kann ich versuchen, um das Problem zu lösen?

Hallo Alex,

ich bin mir nicht sicher, was die Neustartschleife verursacht, aber du könntest einen Workaround finden. Befindet sich deine Datenbank im Verzeichnis postgres_data_new? Falls ja, prüfe die Datei PG_VERSION in diesem Verzeichnis, um festzustellen, ob das Upgrade erfolgreich war. Außerdem wären die vollständigen Logs hilfreich, falls du sie kopieren könntest.

2 „Gefällt mir“

Ja, postgres_data_new enthält meine Datenbank, und die darin enthaltene PG_VERSION bestätigt, dass die Version 13 ist.

Ich bin mir nicht sicher, welche Logs für Sie hilfreich wären (und wo man sie findet).

In diesem Fall solltest du den Ordner postgres_data_new in das Verzeichnis postgres_data kopieren und einen Neuaufbau durchführen. launcher wird erkennen, dass die Datenbank bereits auf PG13 aktualisiert ist, und von dort fortfahren.

1 „Gefällt mir“

Hallo Michael! Ich habe vergessen zu erwähnen, dass ich es seit meinem ursprünglichen Beitrag hier schon zweimal versucht habe. Ich stecke immer noch in der Schleife fest.

1 „Gefällt mir“

Ich bin mir nicht sicher, wie ich die Ausgabe von ./launcher rebuild app erfassen soll, aber hier ist, was ich habe.

Es beginnt so:

root@connect:/var/discourse# ./launcher rebuild app
Ensuring launcher is up to date
Fetching origin
Launcher is up-to-date
Stopping old container
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
From https://github.com/discourse/pups
   17f04ec..e0ff889  master     -> origin/master
 * [new tag]         v1.1.1     -> v1.1.1
 * [new tag]         v1.1.0     -> v1.1.0
Updating 17f04ec..e0ff889
Fast-forward
 .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 files changed, 1158 insertions(+), 607 deletions(-)
 create mode 100644 .github/workflows/ci.yml
 create mode 100644 .github/workflows/lint.yml
 create mode 100644 .rubocop.yml
 create mode 100644 lib/pups/docker.rb
 create mode 100644 test/docker_test.rb
Note: checking out 'v1.0.3'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at d1db030 cut a new version
I, [2021-10-19T05:37:44.995716 #1]  INFO -- : Loading --stdin
I, [2021-10-19T05:37:45.001857 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2021-10-19T05:37:45.031533 #1]  INFO -- : Generating locales (this might take a while)...
Generation complete.

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): No such file or directory
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 -- : File > /etc/service/postgres/run  chmod: +x  chown:
I, [2021-10-19T05:37:45.077577 #1]  INFO -- : File > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2021-10-19T05:37:45.081084 #1]  INFO -- : File > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2021-10-19T05:37:45.084463 #1]  INFO -- : File > /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: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
debconf: delaying package configuration, since apt-utils is not installed

Dann geht es zu schnell (mit vielen Zeilen in /shared/postgres_data/base/whatever) und endet so:

  /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
Setting next OID for new cluster                            ok
Sync data directory to disk                                 ok
Creating script to analyze new cluster                      ok
Creating script to delete old cluster                       ok

Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
    ./analyze_new_cluster.sh

Running this script will delete the old cluster's data files:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
UPGRADE OF POSTGRES COMPLETE

Old 10 database is stored at /shared/postgres_data_old

To complete the upgrade, rebuild again using:

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

a68ed0b1b54e4a0e2dae2543dc27d87be02ca1f81738e0d2e43511a46524a980

Wärst du so nett und zu teilen, welche Vorlagen du in containers/app.yml einbeziehst?

Klar:

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" # für das ReplyGIF-Plugin: https://github.com/cpradio/discourse-plugin-replygif

(Ich werde den Eintrag für ReplyGIF auskommentieren, da ich ihn sowieso nicht verwende.)

Was bedeutet das? Ich denke, das könnte damit zusammenhängen.

Warum ist das nicht einfach die PostgreSQL-Vorlage ohne die 13?

Das könnte das Problem sein.

1 „Gefällt mir“

Hallo Jay!

Du hast recht, das ist ein Fehler und scheint ein wahrscheinlicher Übeltäter zu sein. Ich habe es in templates/postgres.template.yml geändert und zweimal neu erstellt, stecke aber immer noch in der Schleife fest.

Ich habe diese Anleitung (damals, als sie verfügbar war) befolgt, um DigitalOcean Spaces für Backups und das Hochladen von Bildern zu nutzen.

Meine Postgres-Daten scheinen an zwei Orten zu sein:

  • /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) – Diese Dateien habe ich manuell von postgres_data_new kopiert, wie zuvor empfohlen

Meine aktuelle wilde Vermutung ist, dass dies etwas mit Ihrer Volumen-Mapping-Konfiguration zu tun hat.

Der obige Befund deutet jedoch darauf hin, dass Sie eine separate PostgreSQL-Instanz verwenden, die nicht diejenige ist, die Discourse aktualisiert. Discourse hat nichts mit der PostgreSQL-Instanz unter /var/postgres_data_discourse zu tun. Vielleicht haben Sie versucht, Ihre eigene PostgreSQL-Instanz anstelle der von Discourse bereitgestellten zu nutzen? Das sieht nicht nach einer Standardinstallation aus.

1 „Gefällt mir“

Dies ist eine Standardinstallation aus dem Jahr 2016, die ich seitdem aktualisiert habe. Vielleicht hat sich in der Zwischenzeit etwas geändert?

Für das Volume-Mapping habe ich die Schritte in dem oben verlinkten Leitfaden befolgt.

Ich glaube nicht, dass ich versucht habe, meine eigene PostgreSQL-Installation durchzuführen – ich bin nicht technisch versiert genug, um zu wissen, warum ich das überhaupt tun wollte :smiley:

Ich kann sagen, dass ich das „Schleifen-Problem" hatte, als ich versuchte, von PostgreSQL 10 auf 12 zu aktualisieren, und es daher erst einmal beiseite gelegt habe, um es später anzugehen. Vor ein paar Tagen konnte ich gar nicht mehr neu erstellen, und aufgrund der Fehlermeldungen ging ich davon aus, dass es mit PostgreSQL zu tun hat. Deshalb habe ich versucht, ein Update durchzuführen, in der Hoffnung, dass dies das Problem löst.

Ist es möglich, zur PostgreSQL-10-Vorlage zurückzukehren, um zu sehen, welche Fehler sie wirft?

Edit: Jeglicher weiterer Vorschlag ist willkommen! Ich bin mir nicht sicher, wie ich jetzt weiter vorgehen soll.

Es wäre gut gewesen, das bereits in deinem ersten Beitrag zu erwähnen.

Ich würde eine saubere Installation durchführen und dein neuestes Backup wiederherstellen. Das ist der einfachste Weg. Wahrscheinlich ist auch dein Betriebssystem veraltet.

2 „Gefällt mir“

Das klingt nach viel Aufwand, um ein einziges Problem zu lösen, aber es ist zumindest ein konkreter Lösungsweg. Vielen Dank, Jay, dass du mir bei der Lösung geholfen hast! :folded_hands:

Ich sage nicht, dass es keinen anderen Ausweg aus deiner misslichen Lage gibt, aber dieser Vorgehensweise mit dem Vorschlaghammer ist mit hoher Wahrscheinlichkeit zum Erfolg verhilft und erfordert kein spezielles Wissen. Es gibt eine Reihe kleiner Dinge, die ich versuchen würde, wenn ich für die Reparatur zuständig wäre, doch sie sind hier alle recht schwer zu beschreiben, besonders wenn unklar ist, welche man versuchen sollte oder ob sie überhaupt funktionieren könnten.

Wenn dieses System 2016 eingerichtet wurde und immer noch dieses Betriebssystem verwendet, ist es nicht zu früh für ein OS-Upgrade. Meiner bescheidenen Meinung nach ist es zudem viel einfacher, einen neuen Server hochzufahren, als ein OS-Upgrade durchzuführen (das mag heutzutage viel weniger zutreffen als vor 15 Jahren, als ich diese Meinung entwickelte!).

2 „Gefällt mir“

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