Redis 代理

  • Redis 架构概述

  • 此过滤器应使用类型 URL type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy 配置。

  • v3 API 参考

统计信息

每个配置的 Redis 代理过滤器都有统计信息,根目录为 redis.<stat_prefix>.,包含以下统计信息

名称

类型

描述

downstream_cx_active

仪表

总活动连接数

downstream_cx_protocol_error

计数器

总协议错误

downstream_cx_rx_bytes_buffered

仪表

当前缓冲的总接收字节数

downstream_cx_rx_bytes_total

计数器

总接收字节数

downstream_cx_total

计数器

总连接数

downstream_cx_tx_bytes_buffered

仪表

当前缓冲的总发送字节数

downstream_cx_tx_bytes_total

计数器

总发送字节数

downstream_cx_drain_close

计数器

由于排空而关闭的连接数

downstream_rq_active

仪表

总活动请求数

downstream_rq_total

计数器

总请求数

拆分器统计信息

Redis 过滤器将收集 redis.<stat_prefix>.splitter. 中的命令拆分器统计信息,包含以下统计信息

名称

类型

描述

invalid_request

计数器

具有不正确参数数量的请求数

unsupported_command

计数器

命令拆分器无法识别的命令数

每个命令统计信息

Redis 过滤器将收集 redis.<stat_prefix>.command.<command>. 命名空间中的命令统计信息。默认情况下,延迟统计信息以毫秒为单位,可以通过设置配置参数 latency_in_micros 为 true 来更改为微秒。

名称

类型

描述

total

计数器

命令数

success

计数器

成功命令数

error

计数器

返回部分或完整错误响应的命令数

latency

直方图

命令执行时间(以毫秒为单位,包括延迟故障)

error_fault

计数器

注入错误故障的命令数

delay_fault

计数器

注入延迟故障的命令数

运行时

Redis 代理过滤器支持以下运行时设置

redis.drain_close_enabled

如果服务器正在排空,则将排空关闭的连接百分比,否则将尝试排空关闭。默认为 100。

故障注入

Redis 过滤器可以执行故障注入。当前,支持延迟和错误故障。延迟故障延迟请求,错误故障以错误响应。此外,错误可以延迟。

请注意,Redis 过滤器不检查配置的正确性 - 确保默认百分比和运行时百分比都正确的责任在于用户!这是因为百分比可以在运行时更改,并且在请求时验证正确性很昂贵。如果指定了多个故障,则对于给定的故障和 Redis 命令组合,故障注入百分比不应超过 100%。例如,如果指定了两个故障;一个应用于 GET,比例为 60%,一个应用于所有命令,比例为 50%,这是一个错误的配置,因为 GET 现在有 110% 的机会应用故障。这意味着每个请求都会出现故障。

如果注入了延迟,则延迟是累加的 - 如果请求花费了 400 毫秒,并且注入了 100 毫秒的延迟,那么总请求延迟为 500 毫秒。此外,由于 Redis 协议的实现,延迟请求将延迟其后的所有内容,因为代理需要尊重其接收到的命令顺序。

请注意,故障必须具有 fault_enabled 字段,并且默认情况下未启用(如果没有设置默认值或运行时键)。

配置示例

faults:
- fault_type: ERROR
  fault_enabled:
    default_value:
      numerator: 10
      denominator: HUNDRED
    runtime_key: "bogus_key"
    commands:
    - GET
  - fault_type: DELAY
    fault_enabled:
      default_value:
        numerator: 10
        denominator: HUNDRED
      runtime_key: "bogus_key"
    delay: 2s

这将创建两个故障 - 一个错误,仅应用于 GET 命令,比例为 10%,另一个延迟,应用于所有命令,比例为 10%。这意味着 20% 的 GET 命令将应用故障,如前所述。

重定向上的 DNS 查找

架构概述 中所述,当 Envoy 看到包含主机名的 MOVED 或 ASK 响应时,它不会执行 DNS 查找,而是将错误冒泡到客户端。以下配置示例在这些响应上启用 DNS 查找,以避免客户端错误并让 Envoy 本身执行重定向

typed_config:
  "@type": type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy
  stat_prefix: redis_stats
  prefix_routes:
    catch_all_route:
      cluster: cluster_0
  settings:
    op_timeout: 5
    enable_redirection: true
    dns_cache_config:
      name: dns_cache_for_redis
      dns_lookup_family: V4_ONLY
      max_hosts: 100