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

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 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