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