Apigee Edge 문서를 보고 있습니다.
Apigee X 문서로 이동하세요. info
증상
PostgreSQL 데이터베이스를 업데이트할 때 오류가 발생합니다.
오류 메시지
ERROR: PostgreSQL Upgrade FAILED
가능한 원인
| 원인 | 설명 | 문제 해결 안내가 적용되는 항목 |
|---|---|---|
| PostgreSQL 구성 파일의 잘못된 복제 설정 | 업그레이드 중에 복제 설정이 잘못되어 PostgreSQL 업그레이드가 실패합니다. | Edge Private Cloud 사용자 |
| apigee 사용자 이외의 다른 설치 사용자가 PostgreSQL 설치를 실행함 | PostgreSQL이 다른 사용자를 설치 사용자로 하여 처음 설치되어 업그레이드에 실패합니다. | Edge Private Cloud 사용자 |
일반적인 진단 단계
PostgreSQL 데이터베이스를 업그레이드할 때 오류가 발생하면 먼저 다음 진단 단계를 수행하세요.
PostgreSQL 데이터 폴더의 이름을 바꿉니다.
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
원본 백업 데이터가
/opt/apigee/data/apigee-postgresql/pgdata-version.old/라는 폴더에 있는지 확인합니다.예를 들면 다음과 같습니다.
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/다음 명령어를 사용하여
/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
db_upgrade명령어를 다시 실행합니다./opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
다음과 같은 오류가 표시되는 경우
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
db_upgrade명령어를 다시 실행합니다./opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
문제가 계속되면 원인: PostgreSQL 구성 파일의 잘못된 복제 설정으로 이동하세요.
원인: PostgreSQL 구성 파일의 복제 설정이 잘못됨
진단
- PostgreSQL 구성 파일
/opt/apigee/apigee-postgresql/conf/pg_hba.conf에 원하는 복제 설정이 있는지 확인합니다. - 이 파일에 예상되는 복제 설정이 있는 경우 'apigee' 사용자 이외의 다른 설치 사용자가 실행한 PostgreSQL 설치로 이동합니다.
- 그렇지 않으면 해결 방법으로 이동합니다.
해결 방법
다음 명령어를 사용하여 PostgreSQL 데이터 폴더의 이름을 변경합니다.
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
원본 백업 데이터가
/opt/apigee/data/apigee-postgresql/pgdata-version.old/라는 폴더에 있는지 확인합니다.예를 들면 다음과 같습니다.
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/다음 명령어를 사용하여
/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
슬레이브 호스트를 변경한 적이 있다면
/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위의 4단계에서 설정한 속성이 구성 파일
pg_hba.conf에 업데이트되도록apigee-postgresql서비스를 다시 시작합니다./opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
PostgreSQL 업그레이드 중에 잘못된 설정으로 업데이트되지 않도록 다음 명령어를 사용하여 구성 파일
pg_hba.conf을 변경 불가능하게 만듭니다.chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
db_upgrade명령어를 다시 실행합니다./opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
구성 파일
pg_hba.conf에서 변경 불가능한 설정을 삭제합니다.chattr -i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
원인: apigee 사용자 이외의 다른 설치 사용자가 PostgreSQL 설치를 실행함
진단
다음 단계에 따라 rolesuper가 true로 설정된 다른 사용자가 있는지 확인합니다.
PostgreSQL 노드에서 다음 명령어를 사용하여 PostgreSQL에 로그인합니다.
psql -h $(hostname -i) -U apigee
다음 SQL 쿼리를 실행합니다.
select * from pg_authid;
rolesuper가 true로 설정된 사용자가 여러 명 있는지 확인합니다. 있는 경우 다른 사용자가 apigee 사용자 대신 설치 사용자로 설정되어 PostgreSQL 업그레이드가 실패하는 것입니다. rolesuper 역할이 있고 OID가 낮은 사용자는 설치 사용자로 간주됩니다.
이러한 종류의 역할 문제를 확인하려면 다음 SQL 쿼리를 실행하세요.
select oid,rolname,rolsuper from pg_roles; select * from pg_user;
해결 방법
다음 명령어를 사용하여 PostgreSQL에 로그인합니다.
psql -h $(hostname -i) -U apigee
이전 DB에서 기존
apigee역할을 임시 사용자 (예:apigee2)로 이름을 바꿉니다.update pg_authid set rolname ='apigee2' where rolname = 'apigee';
다른 설치 사용자
srcapige가 있다고 가정해 보겠습니다.srcapige역할을apigee로 이름을 바꿉니다.update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
apigee2을srcapige사용자로 이름을 바꿉니다.update pg_authid set rolname ='secapigee' where rolname = 'apigee2';
이름이 변경된 모든 사용자의 비밀번호를 업데이트합니다.
ALTER ROLE apigee WITH PASSWORD '<secret>'; ALTER ROLE srcapige WITH PASSWORD '<secret>';다음 명령어를 사용하여 PostgreSQL 데이터 폴더의 이름을 변경합니다.
mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
/opt/apigee/data/apigee-postgresql/pgdata-version.old/라는 폴더 내에 원본 백업 데이터가 있는지 확인합니다.예를 들면 다음과 같습니다.
/opt/apigee/data/apigee-postgresql/pgdata-9.6.old/다음 명령어를 사용하여
/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
db_upgrade명령어를 다시 실행합니다./opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
모든
apigee-qpidd및edge-qpid-server서비스를 다시 시작합니다./opt/apigee/apigee-service/bin/apigee-service apigee-qpidd restart/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
문제가 계속되면 진단 정보를 수집해야 함으로 이동합니다.
진단 정보 수집 필요
위 문제 해결 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집하세요. Apigee 지원팀에 문의하여 지원팀과 다음 정보를 공유하세요.
/opt/apigee/apigee-postgresql/lib/actions/db_upgrade파일의 두 번째 줄에set -x를 추가합니다.일반적인 진단 단계에 따라
db_upgrade명령어의 콘솔 출력을 지원팀에 제공합니다.opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
지원팀에 다음 로그 파일을 제공하세요.
/opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log /opt/apigee/var/log/apigee-postgresql/update.log다음 운영체제 명령어의 출력을 제공하여 대체 항목이
auto로 설정되어 있는지 확인합니다.update-alternatives --display psql
또는
update-alternatives --display pgsqlupdate-alternatives --list대체 항목이
manual로 설정된 경우 다음 명령어를 사용하여auto로 설정할 수 있습니다.update-alternatives --auto psql
대체 항목을
auto로 설정하면psql및postgres바이너리가 업그레이드된 버전을 가리킵니다. 그렇지 않으면 바이너리가 이전 버전을 가리켜 문제가 발생할 수 있습니다.