Apigee Edge 문서입니다.
Apigee X 문서. 정보
증상
PostgreSQL 데이터베이스를 업데이트할 때 오류가 발생합니다.
오류 메시지
ERROR: PostgreSQL Upgrade FAILED
가능한 원인
원인 | 설명 | 문제 해결 지침이 적용되는 대상 |
---|---|---|
PostgreSQL 구성 파일의 잘못된 복제 설정 | 업그레이드 중 잘못된 복제 설정으로 인해 PostgreSQL 업그레이드가 실패합니다. | Edge Private Cloud 사용자 |
apigee 사용자가 아닌 다른 설치 사용자가 PostgreSQL을 설치함 | PostgreSQL은 처음에 다른 사용자와 함께 설치 사용자로 설치되었지만 업그레이드 실패로 이어집니다 | Edge 프라이빗 클라우드 사용자 |
일반적인 진단 단계
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
apigee-postgresql
서비스를 다시 시작하여 위의 4단계는 구성 파일pg_hba.conf
로 업데이트됩니다./opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
다음 명령어를 사용하여 구성 파일
pg_hba.conf
를 변경 불가능한 것으로 만듭니다. PostgreSQL 업그레이드 중에 잘못된 설정으로 업데이트되지 않는지 확인합니다.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 pgsql
update-alternatives --list psql
또는
update-alternatives --list pgsql
대안이
manual
로 설정된 경우 다음 명령어를 사용하여auto
로 설정할 수 있습니다.update-alternatives --auto psql
대안을
auto
로 설정하면psql
및postgres
바이너리가 업그레이드된 버전으로 가리킵니다. 그렇지 않으면 바이너리가 이전 버전을 가리키게 되어 문제가 발생할 수 있습니다.