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