PostgreSQL 업그레이드 실패

Apigee Edge 문서입니다.
Apigee X 문서.
정보

증상

PostgreSQL 데이터베이스를 업데이트할 때 오류가 발생합니다.

오류 메시지

ERROR: PostgreSQL Upgrade FAILED 

가능한 원인

원인 설명 문제 해결 지침이 적용되는 대상
PostgreSQL 구성 파일의 잘못된 복제 설정 업그레이드 중 잘못된 복제 설정으로 인해 PostgreSQL 업그레이드가 실패합니다. Edge Private Cloud 사용자
apigee 사용자가 아닌 다른 설치 사용자가 PostgreSQL을 설치함 PostgreSQL은 처음에 다른 사용자와 함께 설치 사용자로 설치되었지만 업그레이드 실패로 이어집니다 Edge 프라이빗 클라우드 사용자

일반적인 진단 단계

PostgreSQL 데이터베이스를 업그레이드할 때 오류가 발생하면 다음을 수행합니다. 다음 단계를 따릅니다.

  1. PostgreSQL 데이터 폴더의 이름을 바꿉니다.

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. 원본 백업 데이터가 /opt/apigee/data/apigee-postgresql/pgdata-version.old/라는 폴더에 있는지 확인합니다.

    예를 들면 다음과 같습니다.

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. 다음 명령어를 사용하여 /opt/apigee/data/apigee-postgresql/pgdata-version.old/의 백업 데이터를 /opt/apigee/data/apigee-postgresql/pgdata로 복원합니다.

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

    예를 들면 다음과 같습니다.

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. db_upgrade 명령어를 다시 실행합니다.

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. 다음 오류가 발생하는 경우...

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

    다음 명령어를 사용하여 pg_control.old 파일의 이름을 pg_control로 바꿉니다.

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. db_upgrade 명령어를 다시 실행합니다.

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

    문제가 지속되면 원인: PostgreSQL 구성 파일의 복제 설정이 잘못됨을 참고하세요.

원인: PostgreSQL 구성 파일의 복제 설정이 잘못됨

진단

  1. PostgreSQL 구성 파일 /opt/apigee/apigee-postgresql/conf/pg_hba.conf에 원하는 복제 설정이 있는지 확인합니다.
  2. 이 파일에 예상 복제 설정이 있는 경우 'apigee' 이외의 다른 설치 사용자가 수행하는 PostgreSQL 설치로 이동합니다. 있습니다.
  3. 그렇지 않으면 해결 방법으로 이동합니다.

해결 방법

  1. 다음 명령어를 사용하여 PostgreSQL 데이터 폴더의 이름을 바꿉니다.

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. 원본 백업 데이터가 /opt/apigee/data/apigee-postgresql/pgdata-version.old/ 폴더에 있는지 확인합니다.

    예를 들면 다음과 같습니다.

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. 다음 명령어를 사용하여 백업 데이터를 /opt/apigee/data/apigee-postgresql/pgdata-version.old/에서 /opt/apigee/data/apigee-postgresql/pgdata로 복원합니다.

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

    예를 들면 다음과 같습니다.

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. 슬레이브 호스트를 변경한 적이 있으면 /opt/apigee/customer/application/postgresql.properties: 구성 파일 업데이트 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. apigee-postgresql 서비스를 다시 시작하여 위의 4단계는 구성 파일 pg_hba.conf로 업데이트됩니다.

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. 다음 명령어를 사용하여 구성 파일 pg_hba.conf를 변경 불가능한 것으로 만듭니다. PostgreSQL 업그레이드 중에 잘못된 설정으로 업데이트되지 않는지 확인합니다.

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. db_upgrade 명령어를 다시 실행합니다.

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. 구성 파일 pg_hba.conf에서 변경 불가능한 설정을 삭제합니다.

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

원인: apigee 사용자가 아닌 다른 설치 사용자가 PostgreSQL을 설치함

진단

  1. 다음 단계에 따라 rolesupertrue로 설정된 다른 사용자가 있는지 확인합니다.

    1. PostgreSQL 노드에서 다음 명령어를 사용하여 PostgreSQL에 로그인합니다.

      psql -h $(hostname -i)  -U apigee
      
    2. 다음 SQL 쿼리를 실행합니다.

      select * from pg_authid;
      
    3. rolesupertrue로 설정한 사용자가 여러 명인지 확인합니다. 있는 경우 apigee 사용자가 아닌 다른 사용자가 설치 사용자로 설정되어 PostgreSQL 업그레이드가 실패하는 것입니다. rolesuper 역할이 있고 OID가 더 낮은 사용자는 설치 사용자로 간주됩니다.

      이러한 종류의 역할 문제를 확인하려면 다음 SQL 쿼리를 실행하세요.

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

해결 방법

  1. 다음 명령어를 사용하여 PostgreSQL에 로그인합니다.

    psql -h $(hostname -i)  -U apigee
    
  2. 이전 DB의 기존 apigee 역할을 임시 사용자(예: apigee2)로 이름을 바꿉니다.

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. 다른 설치 사용자 srcapige가 있다고 가정해 보겠습니다. srcapige 이름 바꾸기 역할을 apigee에 부여:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. apigee2의 이름을 srcapige 사용자로 바꿉니다.

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. 이름이 변경된 모든 사용자의 비밀번호를 업데이트합니다.

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. 다음 명령어를 사용하여 PostgreSQL 데이터 폴더의 이름을 변경합니다.

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. /opt/apigee/data/apigee-postgresql/pgdata-version.old/라는 폴더 내에 원본 백업 데이터가 있는지 확인합니다.

    예를 들면 다음과 같습니다.

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. /opt/apigee/data/apigee-postgresql/pgdata-version.old/에서 데이터를 복원합니다. 다음 명령어를 사용하여 /opt/apigee/data/apigee-postgresql/pgdata 폴더로 복사합니다.

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

    예를 들면 다음과 같습니다.

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. db_upgrade 명령어를 다시 실행합니다.

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. 모든 apigee-qpiddedge-qpid-server 서비스를 다시 시작합니다.

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

문제가 계속되면 진단 정보를 수집해야 함으로 이동합니다.

진단 정보 수집 필요

위의 문제 해결 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집합니다 Apigee 지원팀에 문의하여 다음 정보를 지원팀에 공유하세요.

  1. /opt/apigee/apigee-postgresql/lib/actions/db_upgrade 파일의 두 번째 줄에 set -x를 추가합니다.
  2. 일반적인 진단 단계에 따라 db_upgrade 명령어의 콘솔 출력을 지원팀에 제공합니다.

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. 지원팀에 다음 로그 파일을 제공합니다.

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. 다음 운영체제 명령어의 출력을 제공하여 대체 값은 auto로 설정됩니다.

    update-alternatives --display psql 
    

    또는

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

    또는

    update-alternatives --list pgsql
    

    대안이 manual로 설정된 경우 다음 명령어를 사용하여 auto로 설정할 수 있습니다.

    update-alternatives --auto psql
    

    대안을 auto로 설정하면 psqlpostgres 바이너리가 업그레이드된 버전으로 가리킵니다. 그렇지 않으면 바이너리가 이전 버전을 가리키게 되어 문제가 발생할 수 있습니다.