PostgreSQL 업그레이드 실패

Apigee Edge 문서를 보고 있습니다.
Apigee X 문서로 이동하세요.
info

증상

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. 위의 4단계에서 설정한 속성이 구성 파일 pg_hba.conf에 업데이트되도록 apigee-postgresql 서비스를 다시 시작합니다.

    /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
    

원인: 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. apigee2srcapige 사용자로 이름을 바꿉니다.

    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 
    

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

    update-alternatives --auto psql
    

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