API Data Backup and Recovery
APIM 数据备份
APIM 可以通过数据库备份/恢复来恢复所有数据。
MariaDB SQL 备份
- 用途:APIM 数据库
- 描述:与 APIM 相关的所有数据的数据库,如 GW、API、策略、文档、开发者门户等。
- 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 用户数据库
- 描述:与 APIM 中用户相关的所有数据的数据库,如用户、角色、项目等。
- 关于 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
# 将 MariaDB 转储 SQL 从本地 /tmp 路径复制到 MariaDB Pod 的 /tmp 路径
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 进行数据库恢复
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 创建数据库 "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 网关更新操作
由于 Redis 存储 Pod 重启而对 Kong 网关的后续操作(添加日期:2024 年 4 月 4 日)
# 开发环境
kubectl rollout restart deploy/nsmall-gw-kong -n apim
# 生产环境
kubectl rollout restart deploy/nsmall-prd-gw-kong -n apim