跳到主要内容
版本:3.6.x

实现数据面弹性

弹性是指系统承受和从故障、中断或意外事件中恢复的能力。

在本文档中,你将学习为什么你应该在 API7 中考虑数据面 (DP) 弹性模式以及如何实现它,以便当控制面 (CP) 不可用时,DP 实例仍然可以正常运行。这可以帮助你制定灾难恢复计划,并在控制面 (CP) 不可用时快速恢复关键任务功能,从而确保系统的高可用性。

为什么考虑 DP 弹性

DP 可能会遇到连接 CP 的问题。以下是一些可能的原因:

  • DP 和 CP 实例之间的网络连接不良
  • CP 数据库崩溃
  • CP 升级
  • CP 主机上的资源争用
  • CP 主机硬件故障

DP 弹性模式

API7 企业版支持将 CP 配置为定期将配置转储到 AWS S3 存储桶,以便在 CP 发生故障时,DP 可以以 独立模式 启动,并从存储中提取最新的网关配置以继续代理请求。

解��决方案图

CP 恢复后,DP 应继续从 CP 获取配置。

实现 DP 弹性

前提条件

配置 AWS 资源

  1. 创建一个 AWS 账户并以 IAM 用户身份登录。
  2. 创建两个 S3 存储桶,一个用于网关实例配置,例如密钥环和发现;另一个用于网关资源配置,例如路由和服务。
  3. 获取 IAM 用户访问密钥和秘密访问密钥
  4. 允许对 S3 存储桶中的对象进行读写访问的策略附加到 IAM 用户。

将 CP 配置为备份配置

在你运行快速入门命令安装 API7 企业版的工作目录中,你应该找到一个 api7-ee 目录,其中包含 docker-compose.yaml 和各种服务配置文件。

fallback_cp 配置添加到控制台配置文件:

api7-ee/dashboard_conf/conf.yaml
fallback_cp:
aws_s3:
// 注释 1
access_key: your-aws-iam-access-key
// 注释 2
region: ap-south-1
// 注释 3
config_bucket: bucket-to-push-config-data
// 注释 4
resource_bucket: bucket-to-push-resource-data
// 注释 5
secret_key: your-aws-iam-secret-access-key
// 注释 6
cron_spec: '@every 1m'

❶ 替换为你的 AWS IAM 用户访问密钥。

❷ 替换为你的 AWS 区域。

❸ 替换为你的 S3 存储桶名称,应将实例配置详细信息(例如密钥环和发现)推送到该存储桶。

❹ 替换为你的 S3 存储桶名称,应将 APISIX 资源配置(例如路由和服务)推送到该存储桶。

❺ 替换为你的 AWS IAM 用户秘密访问密钥。

❻ 将推送到 S3 存储桶的频率配置为每分钟一次。

重新启动控制台容器:

docker-compose -f api7-ee/docker-compose.yaml restart api7-ee-dashboard

API7 应该开始每分钟将 CP 配置推送到 S3 存储桶。

验证

在本节中,你将首先向路由发送请求以查看预期的上游响应。然后,你将在独立模式 下重新启动 DP 部署,以便它开始从 S3 存储桶获取配置,并验证 DP 是否照常代理请求。

向路由发送请求:

curl "http://127.0.0.1:9080/ip"

你应该会看到类似于以下内容的响应:

{
"origin": "127.0.0.1"
}

假设 CP 现在不可用。将以下配置添加到 DP 配置文件以启动独立模式

docker exec <api7-ee-gateway-container-name> /bin/sh -c "echo '
nginx_config:
error_log_level: warn

deployment:
role: data_plane
role_data_plane:
config_provider: yaml
fallback_cp:
aws_s3:
access_key: your-aws-iam-access-key
secret_key: your-aws-iam-secret-access-key
bucket: bucket-to-push-config-data
region: ap-south-1
' > /usr/local/apisix/conf/config.yaml"

重新加载容器以使配置更改生效:

docker exec <api7-ee-gateway-container-name> apisix reload

DP 实例应以独立模式启动并从 S3 存储桶获取配置。

向路由发送请求:

curl "http://127.0.0.1:9080/ip"

你应该会看到类似于以下内容的响应,验证 DP 是否正在根据 S3 中的配置路由请求:

{
"origin": "127.0.0.1"
}

当 CP 恢复后,移除之前对部署模式的更改:

docker exec <api7-ee-gateway-container-name> /bin/sh -c "echo '
nginx_config:
error_log_level: warn
' > /usr/local/apisix/conf/config.yaml"

重新加载容器以使配置更改生效:

docker exec <api7-ee-gateway-container-name> apisix reload

DP 实例现在应该开始同步来自 CP 的配置。