API Data Backup and Recovery
APIM 데이터 백업
APIM은 DB 백업/복구를 통해 모든 데이터를 복원할 수 있습니다.
MariaDB SQL 백업
- 사용법: APIM DB
- 설명: GW, API, 정책, 문서, 개발자 포털 등 APIM과 관련된 모든 데이터의 DB입니다.
- K8s 리소스 정보:
- StatefulSets : apim-mariadb-master
- Pod: apim-mariadb-master-0
- 실패 영향: MariaDB가 실패할 경우
- APIM 콘솔 기능이 비정상적으로 작동합니다.
- APIM 개발자 포털 기능이 비정상적으로 작동합니다.
# MariaDB Pod에 접근
kubectl -n apim-prd exec -it apim-mariadb-master-0 -c mariadb /bin/bash
# MariaDB의 전체 SQL 덤프를 수행하고 Pod의 /tmp 디렉토리에 파일을 저장합니다.
mysqldump -uapim -papim apim > /tmp/apim-maria-dump.sql
# SQL 덤프를 로컬 환경의 /tmp 디렉토리로 복사합니다.
kubectl -n apim-prd cp apim-mariadb-master-0:/tmp/apim-maria-dump.sql -c mariadb ./apim-maria-dump.sql
Postgresql
- 사용법: APIM 사용자 DB
- 설명: 사용자, 역할, 프로젝트 등 APIM의 사용자와 관련된 모든 데이터의 DB입니다.
- K8s 리소스 정보
- StatefulSets : statefulset-pgauth
- Pod: statefulset-pgauth-0
- 실패 영향: MariaDB가 실패할 경우
- APIM 콘솔 로그인 오류
- APIM 테넌트 관리자 콘솔 로그인 오류
- APIM 개발자 포털 로그인 오류
# PostgreSQL Pod 내부에 접근하여 Pod 내부 /tmp 디렉토리에 SQL 스키마 덤프를 생성한 후 로컬 /tmp 디렉토리로 전송합니다.
kubectl -n apim-prd exec -it statefulset-pgauth-0 -c pgauth > ./apim-pg-schema.sql -- pg_dump --create -s -U apim -d apim
# PostgreSQL Pod 내부에 접근하여 Pod /tmp 디렉토리에 SQL 데이터 덤프를 생성한 후 로컬 /tmp 디렉토리로 전송합니다.
kubectl -n apim-prd exec -it statefulset-pgauth-0 -c pgauth > ./apim-pg-data.sql -- pg_dump --insert --data-only -U apim -d apim
MariaDB, Postgresql 덤프 파일 확인
# 파일 크기를 포함한 파일 목록 보기
cd /tmp
ls -alh
# (선택 사항) 파일 내용 보기
cat apim-maria-dump.sql
cat apim-pg-schema.sql
cat apim-pg-data.sql
APIM 개발자 포털 정적 콘텐츠 파일
- 사용법: APIM 개발자 포털 정적 콘텐츠 파일
- 설명: 이미지, 로고, 파비콘 등 APIM 개발자 포털의 모든 사용자 정의 파일입니다.
- K8s 정보
- 배포: deploy-apim-developers-portal-backend
- Pod: deploy-apim-developers-portal-backend-xxxxxx-xxxx
- 실패 영향: 개발자 포털의 정적 콘텐츠 파일이 삭제될 경우
- APIM 개발자 포털의 이미지, 로고 등이 표시되지 않습니다 (개발자 포털 기능은 정상적으로 작동합니다).
# 개발자 포털의 모든 정적 콘텐츠 파일이 포함된 폴더를 로컬 머신으로 복사합니다.
kubectl -n apim-prd cp deploy-apim-developers-portal-backend-xxxxxx-xxxx:/app/src/public ./public-prd
APIM 데이터 복구
MariaDB
# 로컬 /tmp 경로에서 MariaDB Pod /tmp 경로로 MariaDB 덤프 SQL을 복사합니다.
kubectl -n apim-dev cp /tmp/apim-maria-dump.sql apim-mariadb-master-0:/tmp/apim-maria-dump.sql -c mariadb
# MariaDB Pod 내부에 접근
kubectl -n apim-dev exec apim-mariadb-master-0 -c mariadb /bash
# MariaDB Pod 덤프 SQL을 통한 DB 복구
mysql -u apim -p apim < /tmp/apim-maria-dump.sql
Postgresql
# PostgreSQL Pod에 접근
kubectl -n apim-dev exec -it statefulset-pgauth-0 -c pgauth bash
# PostgreSQL "APIM" 데이터베이스 삭제
dropdb -U postgres apim
# PostgreSQL psql에 접근
psql -U postgres
# PostgreSQL CREATE DATABASE "apim"
CREATE DATABASE apim WITH OWNER apim ENCODING 'UTF8';
# PostgreSQL "apim" 사용자에게 "apim" 데이터베이스 권한 부여
GRANT ALL PRIVILEGES ON DATABASE apim TO apim;
# PostgreSQL 종료
\q
# PostgreSQL 덤프 파일에서 데이터베이스 복원
psql -U apim -d apim -f /tmp/apim-pg-schema.sql
psql -U apim -d apim -f /tmp/apim-pg-data.sql
기타 복구 작업 진행
Kong에 대한 데이터 초기화 강제
# Kong Pod에 접근
kubectl exec --it {gateway pod name} -c proxy /bin/bash -n apim
kong migrations bootstrap
Kong 모니터링을 위한 prometheus 플러그인 설치
kubectl -n apim-dev exec --it {gateway pod name} -c fluent-bit /bin/bash
curl -i -X POST localhost:8001/plugins --data '{"name":"prometheus"}' -H "content-type: application/json"
Kong 게이트웨이 업데이트 작업
Redis 스토리지 Pod 재시작으로 인한 Kong 게이트웨이에 대한 후속 작업 (추가: 2024년 4월 4일)
# 개발 환경
kubectl rollout restart deploy/nsmall-gw-kong -n apim
# 프로덕션 환경
kubectl rollout restart deploy/nsmall-prd-gw-kong -n apim