본문으로 건너뛰기

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