7.2. 为 3scale 配置后端组件

作为 3scale 管理员,在以下部署配置中为 后端组件环境变量配置 Redis HA(failover):backend-cronbackend-listenerbackend-worker。这些配置是 3scale 中红帽 HA 所必需的。

注意

如果要将 Redis 与 sendinel 一起使用,您必须使用所有字段创建 system-redis secret,以便在部署 3scale 前配置您要指向的 Redis。从 3scale 开始,这些字段在后端中不作为参数提供。

7.2.1. 创建 backend-redissystem-redis secret

按照以下步骤相应地创建 backend-redissystem-redis secret:

7.2.2. 为 HA 部署 3scale 的新安装

为防止使用单数据库 Redis 实例部署时发生密钥冲突,可以为 sidekiqmessage_bus Redis 密钥设置不同的命名空间。这适用于 Redis Enterprise 和 Redis Cluster。

对于 sidekiqmessage_bus 读取和写入到不同 Redis 数据库的其他部署,不需要命名空间

以下参数用于设置 Redis 密钥 namespaces

  • NAMESPACE :对于与 system-appsystem-sidekiq 存储在 Redis 数据库中的作业队列相关的条目。
  • MESSAGE_BUS_NAMESPACE :对于与 Redis 数据库中 system-app 存储的 message_bus 通信相关的条目。

流程

  1. 使用以下字段创建 backend-redissystem-redis secret:

    backend-redis

    REDIS_QUEUES_SENTINEL_HOSTS
    REDIS_QUEUES_SENTINEL_ROLE
    REDIS_QUEUES_URL
    REDIS_STORAGE_SENTINEL_HOSTS
    REDIS_STORAGE_SENTINEL_ROLE
    REDIS_STORAGE_URL

    system-redis

    MESSAGE_BUS_NAMESPACE
    MESSAGE_BUS_SENTINEL_HOSTS
    MESSAGE_BUS_SENTINEL_ROLE
    MESSAGE_BUS_URL
    NAMESPACE
    SENTINEL_HOSTS
    SENTINEL_ROLE
    URL

    • 当使用 sendinels 为 Redis 配置时,backend-redissystem-redis 中的对应 URL 字段以 redis://[:redis-password@]redis-group[/db]' 格式引用 Redis 组,其中 [x] 表示可选元素 xredis-passwordredis-groupdb 是变量。

      示例

      redis://:redispwd@mymaster/5

    • SENTINEL_HOSTS 字段采用以下格式以逗号分隔:

      redis://:sentinel-password@sentinel-hostname-or-ip:port
      • 对于列表的每个元素,[x] 表示可选元素 xsendinel-passwordfinel-hostname-or-ipport 是相应地替换的变量:

        示例

        :sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722

    • SENTINEL_ROLE 字段为 masterslave 字段。
  2. 使用最新版本模板,部署 3scale,如 OpenShift 在 OpenShift 上部署 3scale 所示。

    1. 忽略因为 backend-redis system-redis 已存在的错误。

7.2.3. 将 3scale 的非 HA 部署迁移到 HA

  1. 使用所有字段编辑 backend-redissystem-redis secret,如 部署 3scale 为 HA 所示。
  2. 确保为后端容器集定义了以下 backend-redis 环境变量:

    name: BACKEND_REDIS_SENTINEL_HOSTS
      valueFrom:
        secretKeyRef:
          key: REDIS_STORAGE_SENTINEL_HOSTS
          name: backend-redis
    name: BACKEND_REDIS_SENTINEL_ROLE
      valueFrom:
        secretKeyRef:
          key: REDIS_STORAGE_SENTINEL_ROLE
          name: backend-redis
  3. 确保为 system-(app|sidekiq|sphinx) pod 定义了以下 system-redis 环境变量。

    name: REDIS_SENTINEL_HOSTS
      valueFrom:
        secretKeyRef:
          key: SENTINEL_HOSTS
          name: system-redis
    name: REDIS_SENTINEL_ROLE
      valueFrom:
        secretKeyRef:
          key: SENTINEL_ROLE
          name: system-redis
    name: MESSAGE_BUS_REDIS_SENTINEL_HOSTS
      valueFrom:
        secretKeyRef:
          key: MESSAGE_BUS_SENTINEL_HOSTS
          name: system-redis
    name: MESSAGE_BUS_REDIS_SENTINEL_ROLE
      valueFrom:
        secretKeyRef:
          key: MESSAGE_BUS_SENTINEL_ROLE
          name: system-redis
  4. 继续执行说明以使用模板升级 3scale

7.2.3.1. 使用 Redis Enterprise

  1. 在 OpenShift 中使用 Redis Enterprise,具有三个不同的 redis-enterprise 实例:

    1. 编辑 system-redis secret:

      1. 将不同的值设置为 MESSAGE_BUS_NAMESPACENAMESPACE
      2. URLMESSAGE_BUS_URL 设置为同一数据库。
    2. backend-redis 中的后端数据库设置为 REDIS_QUEUES_URL
    3. 将第三个数据库设置为 backend-redisREDIS_STORAGE_URL

7.2.3.2. 使用 Redis Sentinel

  1. 使用 Redis Sentinel,具有三个或四个不同的 Redis 数据库:

    1. 编辑 system-redis secret:

      1. 将不同的值设置为 MESSAGE_BUS_NAMESPACENAMESPACE
      2. URLMESSAGE_BUS_URL 设置为正确的 Redis 组,例如: redis://:redispwd@mymaster/5
      3. SENTINEL_HOSTSMESSAGE_BUS_SENTINEL_HOSTS 设置为以逗号分隔的主机和端口列表,例如: :sentinelpwd@123.45.67.009:2711,:sentinelpwd@other-sentinel:2722
      4. SENTINEL_ROLEMESSAGE_BUS_SENTINEL_ROLE 设置为 master
  2. 使用以下值为后端设置 backend-redis secret:

    • REDIS_QUEUES_URL
    • REDIS_QUEUES_SENTINEL_ROLE
    • REDIS_QUEUES_SENTINEL_HOSTS
  3. 将第三个数据库中的变量设置为如下:

    • REDIS_STORAGE_URL
    • REDIS_STORAGE_SENTINEL_ROLE
    • REDIS_STORAGE_SENTINEL_HOSTS

备注

  • system-appsystem-sidekiq 组件直接连接到 后端 Redis 以检索统计信息。

    • 从 3scale 2.7 开始,使用发送时这些系统组件也可以连接到 后端 Redis(存储)。
  • system-appsystem-sidekiq 组件 仅使用 backend-redis 存储,而不使用 backend-redis 队列。

    • 对系统组件所做的更改支持带有 sendinels 的 backend-redis 存储。