Bloccato in un ciclo di aggiornamento dopo l'aggiornamento di PostgreSQL 13

Ho letto la documentazione qui e non copre il mio caso: PostgreSQL 13 update

Sono bloccato nella situazione “Ogni rebuild esegue di nuovo l’aggiornamento, ovvero loop di aggiornamento”:

-------------------------------------------------------------------------------------
AGGIORNAMENTO DI POSTGRES COMPLETATO

Il vecchio database 10 è salvato in /shared/postgres_data_old

Per completare l'aggiornamento, esegui di nuovo il rebuild con:

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

La documentazione dice che questo accade perché ci sono ancora file dell'ultimo aggiornamento in giro. Spostali altrove prima di continuare.

Ma non ho alcun vecchio file:

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

Due ulteriori note:

  • La cartella postgres_data è vuota.
  • Ho una cartella condivisa separata che utilizza DigitalOcean Spaces.

Cosa posso provare per risolvere il problema?

Ciao Alex,

Non sono sicuro di cosa stia causando il ciclo di riavvio, ma potresti riuscire a aggirare il problema. La directory postgres_data_new contiene il tuo database? Se sì, controlla il file PG_VERSION all’interno di quella directory per verificare se l’aggiornamento è andato a buon fine. Inoltre, sarebbe utile se potessi copiare e incollare i log completi.

2 Mi Piace

Sì, postgres_data_new contiene il mio database e il file PG_VERSION al suo interno conferma che la versione è 13.

Non sono sicuro quali log sarebbero utili da condividere con te (e dove trovarli).

In tal caso, dovresti essere in grado di copiare postgres_data_new nella directory postgres_data e procedere con una ricompilazione. launcher rileverà che il database è già aggiornato su PG13 e continuerà da lì.

1 Mi Piace

Ciao Michael! Ho dimenticato di menzionare che, da quando ho pubblicato qui inizialmente, ci ho provato (due volte). Sono ancora bloccato in un loop.

1 Mi Piace

Non sono sicuro di come catturare l’output di ./launcher rebuild app, ma ecco cosa ho ottenuto.

Inizia così:

root@connect:/var/discourse# ./launcher rebuild app
Assicurando che il launcher sia aggiornato
Recupero di origin
Il launcher è aggiornato
Arresto del vecchio contenitore
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
Da https://github.com/discourse/pups
   17f04ec..e0ff889  master     -> origin/master
 * [nuovo tag]         v1.1.1     -> v1.1.1
 * [nuovo tag]         v1.1.0     -> v1.1.0
Aggiornamento 17f04ec..e0ff889
Avanti veloce
 .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 file modificate, 1158 inserimenti(+), 607 cancellazioni(-)
 creazione modalità 100644 .github/workflows/ci.yml
 creazione modalità 100644 .github/workflows/lint.yml
 creazione modalità 100644 .rubocop.yml
 creazione modalità 100644 lib/pups/docker.rb
 creazione modalità 100644 test/docker_test.rb
Nota: controllo di 'v1.0.3'.

Sei in stato 'HEAD staccato'. Puoi esplorare, apportare modifiche
sperimentali e committarle, e puoi scartare qualsiasi commit crei in questo
stato senza influenzare alcun ramo eseguendo un altro checkout.

Se desideri creare un nuovo ramo per conservare i commit che hai creato, puoi farlo
(ora o in seguito) usando -b con il comando checkout di nuovo. Esempio:

  git checkout -b <nuovo-nome-ramo>

HEAD è ora su d1db030 taglio di una nuova versione
I, [2021-10-19T05:37:44.995716 #1]  INFO -- : Caricamento --stdin
I, [2021-10-19T05:37:45.001857 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2021-10-19T05:37:45.031533 #1]  INFO -- : Generazione delle localizzazioni (questo potrebbe richiedere del tempo)...
Generazione completata.

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 già in esecuzione, arresta il contenitore ; exit 1
2021/10/19 05:37:45 socat[33] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): File o directory non trovata
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: avviso: abilitazione dell'autenticazione "trust" per le connessioni locali
Puoi modificare questo editando pg_hba.conf o utilizzando l'opzione -A, o
--auth-local e --auth-host, la prossima volta che esegui initdb.
debconf: ritardo della configurazione del pacchetto, poiché apt-utils non è installato

Poi passa troppo velocemente (con molte righe in /shared/postgres_data/base/whatever) e termina così:

  /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
Impostazione del prossimo OID per il nuovo cluster                            ok
Sincronizzazione della directory dei dati con il disco                                 ok
Creazione dello script per analizzare il nuovo cluster                      ok
Creazione dello script per eliminare il vecchio cluster                       ok

Aggiornamento completato
----------------
Le statistiche dell'ottimizzatore non vengono trasferite da pg_upgrade, quindi,
una volta avviato il nuovo server, considera di eseguire:
    ./analyze_new_cluster.sh

L'esecuzione di questo script eliminerà i file di dati del vecchio cluster:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
AGGIORNAMENTO DI POSTGRES COMPLETATO

Il vecchio database 10 è memorizzato in /shared/postgres_data_old

Per completare l'aggiornamento, ricostruisci di nuovo utilizzando:

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

a68ed0b1b54e4a0e2dae2543dc27d87be02ca1f81738e0d2e43511a46524a980

Potresti condividere quali template stai includendo in containers/app.yml?

Certo:

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" # per il plugin ReplyGIF: https://github.com/cpradio/discourse-plugin-replygif

(Commenterò quello di replygif, dato che non lo uso comunque.)

Cosa significa questo? Penso che possa essere correlato.

Perché non si tratta semplicemente del template di postgres senza il 13?

Potrebbe essere questo il problema.

1 Mi Piace

Ciao Jay!

Hai ragione, è un errore e sembra essere la causa probabile. L’ho modificato in templates/postgres.template.yml e ho ricostruito due volte, ma sono ancora bloccato in un ciclo.

Ho seguito questa guida (quando era disponibile) per utilizzare DigitalOcean Spaces per i backup e il caricamento delle immagini.

I miei dati di PostgreSQL sembrano essere in due posizioni:

  • /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) – Ho copiato questi file manualmente da postgres_data_new come suggerito in precedenza

La mia attuale ipotesi è che questo abbia a che fare con la mappatura del tuo volume.
.

Tuttavia, quanto sopra sembra indicare che hai un PostgreSQL separato da quello che Discourse sta aggiornando. Discourse non ha nulla a che fare con il PostgreSQL in /var/postgres_data_discourse. Forse hai provato a usare il tuo PostgreSQL invece di quello fornito da Discourse? Questo non sembra un’installazione standard.

1 Mi Piace

Questa è un’installazione standard del 2016 che ho aggiornato da allora, quindi forse nel frattempo qualcosa è cambiato?

Per la mappatura dei volumi, ho seguito i passaggi della guida a cui ho collegato sopra.

Non credo di aver mai provato a installare il mio stesso PostgreSQL: non sono abbastanza tecnico da sapere perché vorrei farlo :smiley:

Posso dire che ho avuto il “problema del loop” quando ho provato ad aggiornare da PostgreSQL 10 a 12, quindi l’ho messo da parte per occuparmene più tardi. Qualche giorno fa non sono più riuscito a ricostruire nulla e, dai messaggi di errore, ho capito che il problema riguardava PostgreSQL, quindi ho provato ad aggiornare sperando che risolvesse la questione.

È possibile tornare al modello di PostgreSQL 10 per vedere quali errori genera?

Modifica: sono benvenute qualsiasi altra suggerimento! Non sono sicuro di come procedere in questo momento.

Sarebbe stato meglio menzionarlo nel tuo primo post.

Farei un’installazione pulita e ripristinerei il backup più recente. È il modo più semplice per andare avanti. Anche il tuo sistema operativo è probabilmente obsoleto.

2 Mi Piace

Sembra un grosso problema per risolvere un singolo inconveniente, ma almeno è una direzione concreta. Grazie per avermi aiutato a risolvere la questione, Jay! :folded_hands:

Non dico che non esista un’altra via d’uscita dal tuo dilemma, ma questo approccio con il martello pneumatico ha un’alta probabilità di successo e non richiede conoscenze speciali. Ci sono un mucchio di piccole cose che potrei provare se fossi io a risolvere il problema, ma sono tutte piuttosto difficili da descrivere qui, soprattutto quando non è chiaro quale(i) provare o se potrebbero funzionare.

Se questo sistema è stato configurato nel 2016 e ha ancora quel sistema operativo, allora non è troppo presto per aggiornare il sistema operativo e, a mio avviso, è molto più semplice avviare un nuovo server che eseguire un aggiornamento del sistema operativo (questo potrebbe essere molto meno vero oggi rispetto a 15 anni fa, quando ho formato questa opinione!).

2 Mi Piace

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