Redis 代理
Redis 架构概述
此过滤器应使用类型 URL
type.googleapis.com/envoy.extensions.filters.network.redis_proxy.v3.RedisProxy配置。
统计信息
每个配置的 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