3장. 포함된 PostgreSQL 10 데이터베이스에서 외부 PostgreSQL 10 데이터베이스로 마이그레이션
-
system.appSpec.replicas를1로 스케일링하기 전에 데이터베이스를 지원되는 버전 (현재 PostgreSQL 13)으로 업그레이드해야 합니다. Red Hat 3scale API Management 지원 구성참조 - 이 문서는 포함된 PostgreSQL 10 데이터베이스에서 외부 PostgreSQL 10 데이터베이스로의 마이그레이션에 관한 것입니다. 외부 PostgreSQL 10 데이터베이스에서 외부 PostgreSQL 13 데이터베이스로 업그레이드하려면 공식 PostgreSQL 문서를 따라야 합니다.
- 면책 조항: 외부 웹사이트(s)에 포함된 링크는 편의를 위해서만 제공됩니다. Red Hat은 링크를 검토하지 않았으며 컨텐츠 또는 이용 가능 여부에 대해 책임을 지지 않습니다. 외부 웹 사이트에 대한 링크가 포함되어 있다고 해서 Red Hat이 해당 웹 사이트 또는 해당 엔티티, 제품, 서비스를 보증한다는 의미는 아닙니다. 사용자는 본인이 그러한 외부 사이트나 콘텐츠를 사용(또는 신뢰)하여 초래되는 어떠한 손실이나 비용에 대해 Red Hat이 어떠한 책임도 지지 않는 데 동의합니다.
포함된 PostgreSQL 데이터베이스에서 및 외부 PostgreSQL 데이터베이스로 이동하는 프로세스는 동일한 DB 버전에서 수행해야 합니다. 이 마이그레이션 가이드에서는 PostgreSQL 10이어야 합니다. 프로덕션 환경에 외부 데이터베이스를 사용해야 합니다.
PostgreSQL을 system-database 로 사용하는 경우 3scale과 함께 외부 데이터베이스 설치에 지원되는 버전을 사용합니다.
- 이러한 단계는 일반적인 지침입니다. 정확한 단계는 운영 체제, PostgreSQL 버전 및 데이터베이스의 특정 요구 사항에 따라 다를 수 있습니다.
- 업그레이드하기 전에 PostgreSQL 문서 및 릴리스 노트를 주의 깊게 읽으십시오.
- 프로덕션 배포에 적용하기 전에 프로덕션 환경 이외의 환경에서 이 절차를 테스트합니다.
- 이 프로세스는 절차가 완료될 때까지 서비스 프로비저닝을 중단합니다. 이러한 중단으로 인해 유지 관리 기간이 있는지 확인하십시오.
프로세스
APIManager CR(고객 리소스)을 사용하여
system-app배포를 축소합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod가 축소되었는지 확인합니다.
oc get deployment system-app -o jsonpath='{.status.availableReplicas}{"\n"}'$ oc get deployment system-app -o jsonpath='{.status.availableReplicas}{"\n"}' 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
PostgreSQL 마이그레이션을 진행하기 전에 모든 3scale Pod의 상태가
Terminated상태가 될 때까지 기다립니다.
-
PostgreSQL 마이그레이션을 진행하기 전에 모든 3scale Pod의 상태가
모든 데이터, 구성 및 사용자 계정을 포함하여 기존 PostgreSQL 데이터베이스를 백업합니다.
DB_USER=$(oc get secret system-database -o jsonpath="{.data.DB_USER}" | base64 --decode) DATABASE_NAME=$(oc get secret system-database -o jsonpath="{.data.URL}" | base64 --decode | cut -d '/' -f4)$ DB_USER=$(oc get secret system-database -o jsonpath="{.data.DB_USER}" | base64 --decode) $ DATABASE_NAME=$(oc get secret system-database -o jsonpath="{.data.URL}" | base64 --decode | cut -d '/' -f4)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 중요stdout으로 파이프하지 마십시오. 바이너리 파일이 손상됩니다.사용자 지정 형식의 덤프:
oc rsh $(oc get pods -l 'deployment=system-postgresql' -o json | jq -r '.items[0].metadata.name') bash -c "pg_dump -U $DB_USER -F c $DATABASE_NAME -f /tmp/<backupfilename>.backup"
$ oc rsh $(oc get pods -l 'deployment=system-postgresql' -o json | jq -r '.items[0].metadata.name') bash -c "pg_dump -U $DB_USER -F c $DATABASE_NAME -f /tmp/<backupfilename>.backup"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 백업을 다운로드합니다.
oc cp $(oc get pods -l 'deployment=system-postgresql' -o json | jq -r '.items[0].metadata.name'):/tmp/<backupfilename>.backup <backupfilename>.backup
$ oc cp $(oc get pods -l 'deployment=system-postgresql' -o json | jq -r '.items[0].metadata.name'):/tmp/<backupfilename>.backup <backupfilename>.backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 대상 외부 시스템의 3scale에 배포한 것과 동일한 PostgreSQL 10 버전을 설치합니다. 설치 지침에 따라 PostgreSQL 웹 사이트에서 설치 패키지를 다운로드합니다.
- 모든 데이터, 구성 및 사용자 계정을 포함하여 기존 PostgreSQL 데이터베이스로 만든 백업을 대상 외부 시스템에 복사하고 복원합니다.
PostgreSQL에서 새 데이터베이스를 생성합니다.
createdb -U <username> <databasename>
$ createdb -U <username> <databasename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 백업 파일의 데이터를 새 PostgreSQL 데이터베이스로 가져옵니다.
사용자 지정 형식으로 복원:
pg_restore [--host <databasehostname>] -U <username> -d <databasename> --verbose -F c <backupfilename>.backup
$ pg_restore [--host <databasehostname>] -U <username> -d <databasename> --verbose -F c <backupfilename>.backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow
데이터베이스에 연결하고 쿼리를 실행하여 데이터를 새 PostgreSQL 데이터베이스로 성공적으로 가져왔는지 확인합니다.
postgresql://<username>:<password>@<databasehostname>/<databasename>
postgresql://<username>:<password>@<databasehostname>/<databasename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow system-database시크릿을 업데이트합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow APImanager CR을 업데이트하여 외부 데이터베이스를 활성화하고 시스템을 확장합니다.
oc patch apimanager <apimanager_sample> --type=merge --patch '{"spec": {"system": {"database": null, "appSpec": {"replicas": 1}}, "externalComponents": {"system": {"database": true}}}}'$ oc patch apimanager <apimanager_sample> --type=merge --patch '{"spec": {"system": {"database": null, "appSpec": {"replicas": 1}}, "externalComponents": {"system": {"database": true}}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로컬 postgresql 배포를 제거합니다.
oc delete service system-postgresql oc delete deployment system-postgresql oc delete pvc postgresql-data
$ oc delete service system-postgresql $ oc delete deployment system-postgresql $ oc delete pvc postgresql-dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod가 확장되었는지 확인합니다.
oc wait --for=condition=available apimanager/<apimanager_sample> --timeout=-1s
$ oc wait --for=condition=available apimanager/<apimanager_sample> --timeout=-1sCopy to Clipboard Copied! Toggle word wrap Toggle overflow
추가 리소스