跳到主要内容

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