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
- 포드: 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 포드 /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 포드 내부 접근
kubectl -n apim-dev exec apim-mariadb-master-0 -c mariadb /bash
# MariaDB 포드 덤프 SQL을 통한 DB 복구
mysql -u apim -p apim < /tmp/apim-maria-dump.sql
Postgresql
# PostgreSQL 포드 접근
kubectl -n apim-dev exec -it statefulset-pgauth-0 -c pgauth bash
# Postgresql "APIM" 데이터베이스 삭제
dropdb -U postgres apim
# Postgresql psql 접근
psql -U postgres
# Postgresql "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
다른 복구 작업 진행
콩을 위한 데이터 초기화 강제
# 콩 포드 접근
kubectl exec --it {gateway pod name} -c proxy /bin/bash -n apim
kong migrations bootstrap
콩 모니터링을 위한 프로메테우스 플러그인 설치
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"
콩 게이트웨이 업데이트 작업
Redis 스토리지 포드 재시작으로 인한 콩 게이트웨이 후속 작업 (추가: 2024년 4월 4일)
# 개발 환경
kubectl rollout restart deploy/nsmall-gw-kong -n apim
# 프로덕션 환경
kubectl rollout restart deploy/nsmall-prd-gw-kong -n apim