メインコンテンツまでスキップ

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 Developer Portal Static Content Files

  • 使用法: APIM Developer Portalの静的コンテンツファイル
  • 説明: APIM Developer Portalのすべてのカスタムファイル、画像、ロゴ、ファビコンなどを含む。
  • K8s情報について
    • デプロイメント: deploy-apim-developers-portal-backend
    • ポッド: deploy-apim-developers-portal-backend-xxxxxx-xxxx
  • 障害の影響: 開発者ポータルの静的コンテンツファイルが削除された場合
    • APIM Developer Portalの画像、ロゴなどが表示されなくなる(Developer Portalの機能は正常に動作しています)
# 開発者ポータルのすべての静的コンテンツファイルを含むフォルダーをローカルマシンにコピーします。
kubectl -n apim-prd cp deploy-apim-developers-portal-backend-xxxxxx-xxxx:/app/src/public ./public-prd

APIM Data Recovery

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 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 Monitoringのための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 Gatewayの更新アクション

RedisストレージPodの再起動によるKong Gatewayのフォローアップアクション (追加: 2024年4月4日)

# 開発環境
kubectl rollout restart deploy/nsmall-gw-kong -n apim

# 本番環境
kubectl rollout restart deploy/nsmall-prd-gw-kong -n apim