...
1syntax = "proto3";
2
3package envoy.extensions.clusters.redis.v3;
4
5import "google/protobuf/duration.proto";
6import "google/protobuf/wrappers.proto";
7
8import "udpa/annotations/status.proto";
9import "udpa/annotations/versioning.proto";
10import "validate/validate.proto";
11
12option java_package = "io.envoyproxy.envoy.extensions.clusters.redis.v3";
13option java_outer_classname = "RedisClusterProto";
14option java_multiple_files = true;
15option (udpa.annotations.file_status).package_version_status = ACTIVE;
16
17// [#protodoc-title: Redis Cluster Configuration]
18// This cluster adds support for `Redis Cluster <https://redis.io/topics/cluster-spec>`_, as part
19// of :ref:`Envoy's support for Redis Cluster <arch_overview_redis>`.
20//
21// Redis Cluster is an extension of Redis which supports sharding and high availability (where a
22// shard that loses its primary fails over to a replica, and designates it as the new primary).
23// However, as there is no unified frontend or proxy service in front of Redis Cluster, the client
24// (in this case Envoy) must locally maintain the state of the Redis Cluster, specifically the
25// topology. A random node in the cluster is queried for the topology using the `CLUSTER SLOTS
26// command <https://redis.io/commands/cluster-slots>`_. This result is then stored locally, and
27// updated at user-configured intervals.
28//
29// Additionally, if
30// :ref:`enable_redirection<envoy_api_field_extensions.filters.network.redis_proxy.v3.RedisProxy.ConnPoolSettings.enable_redirection>`
31// is true, then moved and ask redirection errors from upstream servers will trigger a topology
32// refresh when they exceed a user-configured error threshold.
33//
34// Example:
35//
36// .. code-block:: yaml
37//
38// name: name
39// connect_timeout: 0.25s
40// dns_lookup_family: V4_ONLY
41// hosts:
42// - socket_address:
43// address: foo.bar.com
44// port_value: 22120
45// cluster_type:
46// name: envoy.clusters.redis
47// typed_config:
48// "@type": type.googleapis.com/google.protobuf.Struct
49// value:
50// cluster_refresh_rate: 30s
51// cluster_refresh_timeout: 0.5s
52// redirect_refresh_interval: 10s
53// redirect_refresh_threshold: 10
54// [#extension: envoy.clusters.redis]
55
56// [#next-free-field: 7]
57message RedisClusterConfig {
58 option (udpa.annotations.versioning).previous_message_type =
59 "envoy.config.cluster.redis.RedisClusterConfig";
60
61 // Interval between successive topology refresh requests. If not set, this defaults to 5s.
62 google.protobuf.Duration cluster_refresh_rate = 1 [(validate.rules).duration = {gt {}}];
63
64 // Timeout for topology refresh request. If not set, this defaults to 3s.
65 google.protobuf.Duration cluster_refresh_timeout = 2 [(validate.rules).duration = {gt {}}];
66
67 // The minimum interval that must pass after triggering a topology refresh request before a new
68 // request can possibly be triggered again. Any errors received during one of these
69 // time intervals are ignored. If not set, this defaults to 5s.
70 google.protobuf.Duration redirect_refresh_interval = 3;
71
72 // The number of redirection errors that must be received before
73 // triggering a topology refresh request. If not set, this defaults to 5.
74 // If this is set to 0, topology refresh after redirect is disabled.
75 google.protobuf.UInt32Value redirect_refresh_threshold = 4;
76
77 // The number of failures that must be received before triggering a topology refresh request.
78 // If not set, this defaults to 0, which disables the topology refresh due to failure.
79 uint32 failure_refresh_threshold = 5;
80
81 // The number of hosts became degraded or unhealthy before triggering a topology refresh request.
82 // If not set, this defaults to 0, which disables the topology refresh due to degraded or
83 // unhealthy host.
84 uint32 host_degraded_refresh_threshold = 6;
85}
View as plain text