Falha no upgrade do PostgreSQL

Você está vendo a documentação do Apigee Edge.
Acesse a 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 de 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 durante o upgrade. Usuários da nuvem privada de borda
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 a uma falha no upgrade. Usuários da nuvem privada de borda

Etapas comuns de diagnóstico

Se você receber um erro ao fazer upgrade do banco de dados PostgreSQL, execute as seguintes 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 do PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf tem as configurações de replicação que você pretende.
  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 o usuário "apigee".
  3. Caso contrário, acesse Resoluçã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, atualize 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 na Etapa 4 acima seja 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 comando a seguir para garantir 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: instalação do PostgreSQL realizada por outro usuário de instalação que não seja o usuário apigee

Diagnóstico

  1. Para verificar se há algum outro usuário com o rolesuper definido como true, siga 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 usuário de instalação em vez de usuário apigee. Qualquer usuário com o papel rolesuper e um OID menor é 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 o papel apigee existente no banco de dados antigo para um usuário temporário (por exemplo, apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. Digamos que outro usuário da instalação srcapige tenha ocorrido. Renomeie o papel srcapige como apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. Renomeie o apigee2 como 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. Verifique se há dados de backup originais em uma pasta chamada /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    Exemplo:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. Restaure os dados na pasta /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 
    
  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 que você 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 estiverem definidas como manual, elas poderão ser definidas como auto usando o seguinte comando:

    update-alternatives --auto psql
    

    Definir as alternativas para 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.