Preso em um loop de atualização após atualização do PostgreSQL 13

Li a documentação aqui e ela não cobre o meu caso: PostgreSQL 13 update

Estou travado na situação “Cada rebuild executa a atualização novamente, ou seja, loop de atualização”:

-------------------------------------------------------------------------------------
ATUALIZAÇÃO DO POSTGRES CONCLUÍDA

O banco de dados antigo 10 está armazenado em /shared/postgres_data_old

Para concluir a atualização, execute o rebuild novamente usando:

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

A documentação diz que isso ocorre porque ainda existem arquivos da última atualização permanecendo. Mova-os para outro lugar antes de continuar.

Mas eu não tenho nenhum arquivo antigo:

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

Mais duas observações:

  • A pasta postgres_data está vazia.
  • Tenho uma pasta compartilhada separada usando o DigitalOcean Spaces.

O que posso tentar para resolver isso?

Olá Alex,

Não tenho certeza do que está causando o loop de reinicialização, mas talvez você consiga contorná-lo. O diretório postgres_data_new contém seu banco de dados? Se sim, verifique o arquivo PG_VERSION dentro desse diretório para confirmar se a atualização funcionou. Além disso, os logs completos seriam úteis, se você puder copiá-los aqui.

2 curtidas

Sim, o postgres_data_new contém meu banco de dados e o PG_VERSION dentro dele confirma que a versão é 13.

Não tenho certeza de quais logs seriam úteis para compartilhar com você (e onde encontrá-los).

Nesse caso, você deverá conseguir copiar o postgres_data_new para o diretório postgres_data e fazer uma reconstrução. O launcher detectará que o banco de dados já está atualizado no PG13 e continuará a partir daí.

1 curtida

Oi, Michael! Esqueci de mencionar que, desde que publiquei aqui originalmente, já tentei isso (duas vezes). Ainda estou preso no loop.

1 curtida

Não tenho certeza de como capturar a saída de ./launcher rebuild app, mas aqui está o que consegui.

Começa assim:

root@connect:/var/discourse# ./launcher rebuild app
Garantindo que o launcher está atualizado
Buscando origem
O launcher está atualizado
Parando o container antigo
+ /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
 * [novo tag]         v1.1.1     -> v1.1.1
 * [novo tag]         v1.1.0     -> v1.1.0
Atualizando 17f04ec..e0ff889
Avanço 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 arquivos alterados, 1158 inserções(+), 607 exclusões(-)
 criar modo 100644 .github/workflows/ci.yml
 criar modo 100644 .github/workflows/lint.yml
 criar modo 100644 .rubocop.yml
 criar modo 100644 lib/pups/docker.rb
 criar modo 100644 test/docker_test.rb
Nota: checkout de 'v1.0.3'.

Você está no estado 'HEAD desconectado'. Você pode navegar, fazer alterações
experimentais e confirmá-las, e pode descartar qualquer confirmação que fizer neste
estado sem afetar nenhuma ramificação realizando outro checkout.

Se quiser criar uma nova ramificação para manter as confirmações que você criou, você pode
fazer isso (agora ou depois) usando -b com o comando checkout novamente. Exemplo:

  git checkout -b <nome-da-nova-ramificação>

HEAD agora está em d1db030 corte uma nova versão
I, [2021-10-19T05:37:44.995716 #1]  INFO -- : Carregando --stdin
I, [2021-10-19T05:37:45.001857 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2021-10-19T05:37:45.031533 #1]  INFO -- : Gerando locais (isso pode levar um tempo)...
Geração concluída.

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 já está rodando pare o container ; exit 1
2021/10/19 05:37:45 socat[33] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Arquivo ou diretório não encontrado
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 -- : Arquivo > /etc/service/postgres/run  chmod: +x  chown:
I, [2021-10-19T05:37:45.077577 #1]  INFO -- : Arquivo > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2021-10-19T05:37:45.081084 #1]  INFO -- : Arquivo > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2021-10-19T05:37:45.084463 #1]  INFO -- : Arquivo > /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: aviso: habilitando autenticação "trust" para conexões locais
Você pode alterar isso editando pg_hba.conf ou usando a opção -A, ou
--auth-local e --auth-host, na próxima vez que executar initdb.
debconf: adiando configuração do pacote, pois apt-utils não está instalado

Depois passa muito rápido (com muitas linhas em /shared/postgres_data/base/whatever) e termina assim:

  /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
Definindo o próximo OID para o novo cluster                 ok
Sincronizando diretório de dados com o disco                ok
Criando script para analisar o novo cluster                 ok
Criando script para excluir o cluster antigo                ok

Atualização Concluída
----------------
As estatísticas do otimizador não são transferidas pelo pg_upgrade, então,
uma vez que você inicie o novo servidor, considere executar:
    ./analyze_new_cluster.sh

Executar este script excluirá os arquivos de dados do cluster antigo:
    ./delete_old_cluster.sh
-------------------------------------------------------------------------------------
ATUALIZAÇÃO DO POSTGRES CONCLUÍDA

O banco de dados antigo 10 está armazenado em /shared/postgres_data_old

Para concluir a atualização, execute novamente o rebuild usando:

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

a68ed0b1b54e4a0e2dae2543dc27d87be02ca1f81738e0d2e43511a46524a980

Você se importaria de compartilhar quais modelos você está incluindo em 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 o plugin ReplyGIF: https://github.com/cpradio/discourse-plugin-replygif

(Vou comentar a linha do replygif, já que não estou usando de qualquer forma.)

O que isso significa? Acho que isso pode estar relacionado.

Por que isso não é apenas o modelo do PostgreSQL sem o 13?

Isso pode ser o problema.

1 curtida

Olá, Jay!

Você tem razão, isso é um erro e parece ser a causa provável. Alterei para templates/postgres.template.yml e reconstruí duas vezes, mas ainda estou preso em um loop.

Segui este guia (na época em que estava disponível) para usar o DigitalOcean Spaces para backups e uploads de imagens.

Meus dados do PostgreSQL parecem estar em dois 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) – Copiei esses arquivos manualmente de postgres_data_new, como sugerido anteriormente

Minha suposição atual é que isso tem algo a ver com o mapeamento do seu volume.

Mas o acima parece indicar que você tem um PostgreSQL separado daquele que o Discourse está atualizando. O Discourse não tem nada a ver com o PostgreSQL em /var/postgres_data_discourse. Talvez você tenha tentado usar seu próprio PostgreSQL em vez do fornecido pelo Discourse? Isso não parece ser uma instalação padrão.

1 curtida

Esta é uma instalação padrão de 2016, e venho atualizá-la desde então, então talvez algo tenha mudado no meio do caminho?

Para o mapeamento de volumes, segui os passos do guia que linkei acima.

Acredito que nunca tentei instalar meu próprio PostgreSQL — não sou técnico o suficiente para saber por que eu sequer gostaria de fazer isso :smiley:

Posso dizer que tive o “problema de loop” quando tentei atualizar do PostgreSQL 10 para o 12, e por isso deixei de lado para resolver mais tarde. Outro dia, parei de conseguir reconstruir o sistema, e pelas mensagens de erro, percebi que o problema estava relacionado ao PostgreSQL, então tentei atualizar, pensando que isso pudesse resolver a questão.

Será possível reverter para o modelo do PostgreSQL 10 para ver quais erros ele está gerando?

Edição: qualquer outra sugestão é bem-vinda! Não tenho certeza de como prosseguir neste momento.

Seria bom ter mencionado isso em sua primeira postagem.

Eu faria uma instalação limpa e restauraria seu backup mais recente. Essa é a maneira mais fácil de seguir em frente. Seu sistema operacional provavelmente também está desatualizado.

2 curtidas

Isso parece muita trabalheira para resolver um único problema, mas pelo menos é um caminho concreto a seguir. Obrigado por me ajudar a resolver isso, Jay! :folded_hands:

Não estou dizendo que não haja outra saída para o seu dilema, mas essa abordagem de “martelo” tem alta probabilidade de sucesso e não exige conhecimento especializado. Existem várias pequenas coisas que eu poderia tentar se fosse eu quem estivesse corrigindo o problema, mas todas são bastante difíceis de descrever aqui, especialmente quando não está claro quais delas tentar ou se elas podem funcionar.

Se esse sistema foi configurado em 2016 e ainda executa aquele sistema operacional, não é cedo demais para fazer uma atualização do SO também. Na minha opinião, é muito mais fácil configurar um novo servidor do que realizar uma atualização do SO (isso pode ser muito menos verdadeiro hoje do que era há 15 anos, quando formei essa opinião!).

2 curtidas

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