PostgreSQL 업그레이드 실패

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

증상

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

오류 메시지

ERROR: PostgreSQL Upgrade FAILED 

가능한 원인

원인 설명 문제 해결 안내는 다음에 적용됩니다.
PostgreSQL 구성 파일의 잘못된 복제 설정 업그레이드 중에 복제 설정이 잘못되어 PostgreSQL 업그레이드가 실패합니다. Edge Private Cloud 사용자
Apigee 사용자가 아닌 다른 설치 사용자가 수행하는 PostgreSQL 설치 PostgreSQL은 처음에 다른 사용자를 설치 사용자로 하여 설치되었기 때문에 업그레이드에 실패했습니다. Edge Private Cloud 사용자

일반적인 진단 단계

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. PostgreSQL 업그레이드 중에 잘못된 설정으로 업데이트되지 않도록 다음 명령어를 사용하여 구성 파일 pg_hba.conf을 변경할 수 없게 만듭니다.

    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
    

원인: PostgreSQL 설치는 apigee 사용자가 아닌 다른 설치 사용자가 수행합니다.

진단

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

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

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

      select * from pg_authid;
      
    3. rolesupertrue로 설정한 사용자가 여러 명인지 확인합니다. 설정된 경우 다른 사용자가 apigee 사용자가 아닌 install user로 설정되었기 때문에 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 바이너리가 업그레이드된 버전을 가리킵니다. 그렇지 않으면 바이너리가 이전 버전을 가리키므로 문제가 발생할 수 있습니다.