Falha no upgrade do PostgreSQL

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

Sintoma

Você recebe um erro ao atualizar o banco de dados PostgreSQL.

Mensagem de erro

ERROR: PostgreSQL Upgrade FAILED 

Causas possíveis

Causa Descrição As instruções para solução de problemas se aplicam a
Configurações de replicação incorretas no arquivo de configuração do PostgreSQL O upgrade do PostgreSQL falha devido a configurações de replicação incorretas. Usuários da nuvem privada do Edge
Instalação do PostgreSQL realizada por outro usuário de instalação que não seja o usuário da apigee O PostgreSQL foi instalado inicialmente com outro usuário como usuário de instalação, o que leva ao fracasso do upgrade. Usuários da nuvem privada do Edge

Etapas comuns do diagnóstico

Se você receber um erro ao fazer upgrade do banco de dados PostgreSQL, faça o seguinte: etapas de diagnóstico primeiro:

  1. Renomeie a pasta de dados do PostgreSQL:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Verifique se os dados de backup originais estão em uma pasta chamada /opt/apigee/data/apigee-postgresql/pgdata-version.old/.

    Exemplo:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Restaure os dados de backup em /opt/apigee/data/apigee-postgresql/pgdata-version.old/ para /opt/apigee/data/apigee-postgresql/pgdata usando o seguinte comando:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Exemplo:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. Execute novamente o comando db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. Se você receber o seguinte erro...

    pg_resetxlog: could not open file "global/pg_control" for reading:
    No such file or directory
    

    ...e renomeie o arquivo pg_control.old como pg_control usando o seguinte comando:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. Execute novamente o comando db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    

    Se o problema persistir, acesse Causa: configurações de replicação incorretas no arquivo de configuração do PostgreSQL.

Causa: configurações de replicação incorretas no arquivo de configuração do PostgreSQL

Diagnóstico

  1. Verifique se o arquivo de configuração /opt/apigee/apigee-postgresql/conf/pg_hba.conf do PostgreSQL tem as configurações de replicação que você quer.
  2. Se esse arquivo tiver as configurações de replicação esperadas, acesse Instalação do PostgreSQL realizada por outro usuário de instalação que não seja "apigee".
  3. Caso contrário, acesse Solução.

Resolução

  1. Renomeie a pasta de dados do PostgreSQL usando o seguinte comando:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. Verifique se os dados de backup originais estão em uma pasta chamada /opt/apigee/data/apigee-postgresql/pgdata-version.old/.

    Exemplo:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. Restaure os dados de backup de /opt/apigee/data/apigee-postgresql/pgdata-version.old/ para /opt/apigee/data/apigee-postgresql/pgdata usando o seguinte comando:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Exemplo:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. Se você já mudou o host escravo, então deve atualizar a seguinte propriedade em /opt/apigee/customer/application/postgresql.properties para atualizar o arquivo de configuração pg_hba.conf:

    conf_pg_hba_replication.connection=host replication apigee
    existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trust 
    
  5. Reinicie o serviço apigee-postgresql para garantir que a propriedade definida em A etapa 4 acima é atualizada no arquivo de configuração pg_hba.conf:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. Torne o arquivo de configuração pg_hba.conf imutável usando o seguinte comando para Garanta que ele não seja atualizado com configurações incorretas durante o upgrade do PostgreSQL:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. Execute novamente o comando db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. Remova a configuração imutável do arquivo de configuração pg_hba.conf:

    chattr -i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
    

Causa: a instalação do PostgreSQL realizada por outro usuário instalado que não seja o usuário apigee

Diagnóstico

  1. Verifique se há algum outro usuário com rolesuper definido como true, seguindo estas etapas:

    1. No nó do PostgreSQL, faça login no PostgreSQL usando o seguinte comando:

      psql -h $(hostname -i)  -U apigee
      
    2. Execute a seguinte consulta SQL:

      select * from pg_authid;
      
    3. Verifique se vários usuários têm rolesuper definido como true. Se houver, o upgrade do PostgreSQL está falhando porque outro usuário foi definido como install user em vez do usuário apigee. Qualquer usuário com a função rolesuper e um OID mais baixo é considerado um usuário de instalação.

      Para verificar esse tipo de problema de papel, execute as seguintes consultas SQL:

      select oid,rolname,rolsuper from pg_roles;
      select * from pg_user;
      

Resolução

  1. Faça login no PostgreSQL usando o seguinte comando:

    psql -h $(hostname -i)  -U apigee
    
  2. Renomeie a função apigee no DB antigo para um usuário temporário (por exemplo, apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Digamos que houve outro usuário de instalação srcapige. Renomeie a função srcapige para apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Renomeie apigee2 para o usuário srcapige:

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. Atualize a senha de todos os usuários renomeados:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. Renomeie a pasta de dados do PostgreSQL usando o seguinte comando:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. Certifique-se de que haja dados de backup originais dentro de uma pasta chamada /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Exemplo:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Restaurar os dados no /opt/apigee/data/apigee-postgresql/pgdata-version.old/ da pasta para /opt/apigee/data/apigee-postgresql/pgdata usando o seguinte comando:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    Exemplo:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. Execute novamente o comando db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. Reinicie todos os serviços apigee-qpidd e edge-qpid-server:

    /opt/apigee/apigee-service/bin/apigee-service apigee-qpidd restart
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
    

Se o problema persistir, acesse Precisa de informações de diagnóstico.

É necessário coletar informações de diagnóstico

Se o problema persistir depois de seguir as instruções de solução de problemas acima, reúna as seguintes informações de diagnóstico. Entre em contato com o suporte da Apigee e compartilhe estas informações com a equipe de suporte:

  1. Adicione set -x à segunda linha do arquivo /opt/apigee/apigee-postgresql/lib/actions/db_upgrade.
  2. Siga as Etapas comuns de diagnóstico e forneça a saída do console do comando db_upgrade à equipe de suporte:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. Envie os seguintes arquivos de registro para a equipe de suporte:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. Forneça a saída dos comandos do sistema operacional a seguir para verificar se as alternativas estão definidas como auto.

    update-alternatives --display psql 
    

    OU

    update-alternatives --display pgsql
    update-alternatives --list psql
    

    OU

    update-alternatives --list pgsql
    

    Se as alternativas forem definidas como manual, você poderá defini-las como auto usando o seguinte comando:

    update-alternatives --auto psql
    

    Definir as alternativas como auto aponta os binários psql e postgres para as versões atualizadas. Caso contrário, os binários apontarão para a versão mais antiga, o que pode causar problemas.