Atascado en un bucle de actualización después de la actualización de PostgreSQL 13

He leído la documentación aquí y no cubre mi caso: PostgreSQL 13 update

Estoy atascado en la situación de “Cada reconstrucción realiza la actualización nuevamente, es decir, bucle de actualización”:

-------------------------------------------------------------------------------------
ACTUALIZACIÓN DE POSTGRES COMPLETADA

La base de datos antigua 10 se almacena en /shared/postgres_data_old

Para completar la actualización, reconstruye de nuevo usando:

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

La documentación dice que esto se debe a que aún quedan archivos de la última actualización. Mueve esos archivos a otro lugar antes de continuar.

Pero no tengo ningún archivo antiguo:

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

Dos notas adicionales:

  • La carpeta postgres_data está vacía.
  • Tengo una carpeta compartida separada utilizando DigitalOcean Spaces.

¿Qué puedo intentar para resolver esto?

Hola Alex,

No estoy seguro de qué está causando el bucle de reinicio, pero es posible que puedas solucionarlo temporalmente. ¿Contiene el directorio postgres_data_new tu base de datos? De ser así, verifica el archivo PG_VERSION dentro de ese directorio para ver si la actualización funcionó. Además, los registros completos serían útiles si pudieras copiarlos.

2 Me gusta

Sí, postgres_data_new contiene mi base de datos y el archivo PG_VERSION dentro de él confirma que la versión es 13.

No estoy seguro de qué registros serían útiles para compartir contigo (ni dónde encontrarlos).

En ese caso, deberías poder copiar postgres_data_new al directorio postgres_data y realizar una reconstrucción. launcher detectará que la base de datos ya está actualizada en PG13 y continuará desde allí.

1 me gusta

¡Hola Michael! Se me olvidó mencionar que, desde que publiqué aquí originalmente, ya lo intenté (dos veces). Sigo atrapado en el bucle.

1 me gusta

No estoy seguro de cómo capturar la salida de ./launcher rebuild app, pero esto es lo que tengo.

Comienza así:

root@connect:/var/discourse# ./launcher rebuild app
Asegurando que el lanzador esté actualizado
Obteniendo origen
El lanzador está actualizado
Deteniendo el contenedor antiguo
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && git checkout v1.0.3 && /pups/bin/pups --stdin
De https://github.com/discourse/pups
   17f04ec..e0ff889  master     -> origin/master
 * [nueva etiqueta]         v1.1.1     -> v1.1.1
 * [nueva etiqueta]         v1.1.0     -> v1.1.0
Actualizando 17f04ec..e0ff889
Avance rápido
 .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 archivos cambiados, 1158 inserciones(+), 607 eliminaciones(-)
 crear modo 100644 .github/workflows/ci.yml
 crear modo 100644 .github/workflows/lint.yml
 crear modo 100644 .rubocop.yml
 crear modo 100644 lib/pups/docker.rb
 crear modo 100644 test/docker_test.rb
Nota: verificando 'v1.0.3'.

Estás en estado 'HEAD desconectado'. Puedes mirar alrededor, hacer cambios experimentales y confirmarlos, y puedes descartar cualquier confirmación que hagas en este estado sin afectar ninguna rama realizando otra verificación.

Si deseas crear una nueva rama para conservar las confirmaciones que creas, puedes hacerlo (ahora o más tarde) usando -b con el comando de verificación nuevamente. Ejemplo:

  git checkout -b <nombre-nueva-rama>

HEAD está ahora en d1db030 corte una nueva versión
I, [2021-10-19T05:37:44.995716 #1]  INFO -- : Cargando --stdin
I, [2021-10-19T05:37:45.001857 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2021-10-19T05:37:45.031533 #1]  INFO -- : Generando locales (esto puede tardar un poco)...
Generación completada.

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 ya está ejecutándose detener contenedor ; exit 1
2021/10/19 05:37:45 socat[33] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): No existe el archivo o directorio
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 -- : Archivo > /etc/service/postgres/run  chmod: +x  chown:
I, [2021-10-19T05:37:45.077577 #1]  INFO -- : Archivo > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2021-10-19T05:37:45.081084 #1]  INFO -- : Archivo > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2021-10-19T05:37:45.084463 #1]  INFO -- : Archivo > /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: advertencia: habilitando la autenticación "trust" para conexiones locales
Puedes cambiar esto editando pg_hba.conf o usando la opción -A, o
--auth-local y --auth-host, la próxima vez que ejecutes initdb.
debconf: retrasando la configuración del paquete, ya que apt-utils no está instalado

Luego pasa demasiado rápido (con muchas líneas en /shared/postgres_data/base/whatever) y termina así:

  /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
Estableciendo el siguiente OID para el nuevo clúster                            ok
Sincronizando el directorio de datos con el disco                                 ok
Creando script para analizar el nuevo clúster                      ok
Creando script para eliminar el clúster antiguo                       ok

Actualización completada
----------------
Las estadísticas del optimizador no se transfieren mediante pg_upgrade, por lo que,
una vez que inicies el nuevo servidor, considera ejecutar:
    ./analyze_new_cluster.sh

Ejecutar este script eliminará los archivos de datos del clúster antiguo:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
ACTUALIZACIÓN DE POSTGRES COMPLETADA

La base de datos 10 antigua está almacenada en /shared/postgres_data_old

Para completar la actualización, vuelve a reconstruir usando:

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

a68ed0b1b54e4a0e2dae2543dc27d87be02ca1f81738e0d2e43511a46524a980

¿Te importaría compartir qué plantillas estás incluyendo en containers/app.yml?

Claro:

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

(Voy a comentar la línea de replygif, ya que no la estoy usando de todos modos.)

¿Qué significa esto? Creo que esto podría estar relacionado.

¿Por qué no es simplemente la plantilla de PostgreSQL sin el 13?

Esto podría ser el problema.

1 me gusta

¡Hola, Jay!

Tienes razón, eso es un error y parece ser la causa probable. Lo cambié a templates/postgres.template.yml y reconstruí dos veces, pero sigo atrapado en el bucle.

Seguí esta guía (cuando estaba disponible) para usar DigitalOcean Spaces para copias de seguridad y cargas de imágenes.

Parece que mis datos de PostgreSQL están en dos lugares:

  • /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) – Copié estos archivos manualmente desde postgres_data_new como se sugirió anteriormente.

Mi suposición actual es que esto tiene algo que ver con tu mapeo de volúmenes.

Sin embargo, lo anterior parece indicar que tienes una instancia de PostgreSQL separada de la que Discourse está actualizando. Discourse no tiene nada que ver con la base de datos en /var/postgres_data_discourse. ¿Quizás intentaste usar tu propia instancia de PostgreSQL en lugar de la que proporciona Discourse? Eso no parece una instalación estándar.

1 me gusta

Esta es una instalación estándar de 2016 que he estado actualizando desde entonces, así que quizás algo haya cambiado en el meantime.

Para el mapeo de volúmenes, seguí los pasos de la guía que enlacé anteriormente.

No creo que haya intentado instalar mi propia base de datos postgres; no tengo conocimientos técnicos suficientes para saber por qué querría hacerlo :smiley:.

Puedo decir que tuve el “problema de bucle” cuando intenté actualizar de postgres 10 a 12, así que lo dejé de lado para trabajar en ello más tarde. El otro día dejé de poder reconstruir en absoluto y, por los mensajes de error, deduje que tenía que ver con postgres, así que intenté actualizar pensando que podría solucionar el problema.

¿Es posible volver a la plantilla de postgres 10 para ver qué errores está generando?

Edición: ¡cualquier otra sugerencia es bien recibida! No estoy seguro de cómo proceder en este momento.

Habría sido bueno mencionarlo en tu primer mensaje.

Lo que haría es una instalación limpia y restaurar tu copia de seguridad más reciente. Esa es la forma más sencilla de avanzar. Es probable que tu sistema operativo también esté desactualizado.

2 Me gusta

Parece mucho trabajo para resolver un solo problema, pero al menos es un camino concreto hacia adelante. ¡Gracias por ayudarme a resolver esto, Jay! :folded_hands:

No digo que no haya otra salida a tu situación, pero este enfoque contundente tiene una alta probabilidad de éxito y no requiere conocimientos especiales. Hay un montón de pequeños detalles que podría intentar si yo fuera quien lo arregla, pero todos son bastante difíciles de describir aquí, especialmente cuando no está claro cuál(es) probar o si podrían funcionar.

Si este sistema se configuró en 2016 y aún tiene ese sistema operativo, tampoco es demasiado pronto para actualizarlo. Y en mi opinión, es mucho más sencillo crear un nuevo servidor que realizar una actualización del sistema operativo (aunque eso pueda ser mucho menos cierto hoy en día que hace 15 años, cuando formé esa opinión).

2 Me gusta

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