Skip to content

Commit

Permalink
Split querier GRPCClientConfig into separate frontend and scheduler c…
Browse files Browse the repository at this point in the history
…lient configs (#6445)

* Split querier GRPC client config into two

* Update Helm chart and jsonnet with new config value

* Update jsonnet values

* Update helm tests

* Ensure backwards compatibility

* Update helm-tests

* Remove helm/jsonnet changes and remove config

* Update CHANGELOG.md

* Update CHANGELOG

* Improve CHANGELOG msg
  • Loading branch information
fayzal-g committed Oct 23, 2023
1 parent 790c6ee commit a8fd1f3
Show file tree
Hide file tree
Showing 10 changed files with 360 additions and 29 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

### Grafana Mimir

* [CHANGE] Querier: Split worker GRPC config into separate client configs for the frontend and scheduler to allow TLS to be configured correctly when specifying the `tls_server_name`. The GRPC config specified under `-querier.frontend-client.*` will no longer apply to the scheduler client, and will need to be set explicitly under `-querier.scheduler-client.*`. #6445
* [CHANGE] Store-gateway: enable sparse index headers by default. Sparse index headers reduce the time to load an index header up to 90%. #6005
* [CHANGE] Store-gateway: lazy-loading concurrency limit default value is now 4. #6004
* [CHANGE] General: enabled `-log.buffered` by default. The `-log.buffered` has been deprecated and will be removed in Mimir 2.13. #6131
Expand Down
262 changes: 262 additions & 0 deletions cmd/mimir/config-descriptor.json
Original file line number Diff line number Diff line change
Expand Up @@ -4147,6 +4147,268 @@
],
"fieldValue": null,
"fieldDefaultValue": null
},
{
"kind": "block",
"name": "query_scheduler_grpc_client_config",
"required": false,
"desc": "",
"blockEntries": [
{
"kind": "field",
"name": "max_recv_msg_size",
"required": false,
"desc": "gRPC client max receive message size (bytes).",
"fieldValue": null,
"fieldDefaultValue": 104857600,
"fieldFlag": "querier.scheduler-client.grpc-max-recv-msg-size",
"fieldType": "int",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "max_send_msg_size",
"required": false,
"desc": "gRPC client max send message size (bytes).",
"fieldValue": null,
"fieldDefaultValue": 104857600,
"fieldFlag": "querier.scheduler-client.grpc-max-send-msg-size",
"fieldType": "int",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "grpc_compression",
"required": false,
"desc": "Use compression when sending messages. Supported values are: 'gzip', 'snappy' and '' (disable compression)",
"fieldValue": null,
"fieldDefaultValue": "",
"fieldFlag": "querier.scheduler-client.grpc-compression",
"fieldType": "string",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "rate_limit",
"required": false,
"desc": "Rate limit for gRPC client; 0 means disabled.",
"fieldValue": null,
"fieldDefaultValue": 0,
"fieldFlag": "querier.scheduler-client.grpc-client-rate-limit",
"fieldType": "float",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "rate_limit_burst",
"required": false,
"desc": "Rate limit burst for gRPC client.",
"fieldValue": null,
"fieldDefaultValue": 0,
"fieldFlag": "querier.scheduler-client.grpc-client-rate-limit-burst",
"fieldType": "int",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "backoff_on_ratelimits",
"required": false,
"desc": "Enable backoff and retry when we hit rate limits.",
"fieldValue": null,
"fieldDefaultValue": false,
"fieldFlag": "querier.scheduler-client.backoff-on-ratelimits",
"fieldType": "boolean",
"fieldCategory": "advanced"
},
{
"kind": "block",
"name": "backoff_config",
"required": false,
"desc": "",
"blockEntries": [
{
"kind": "field",
"name": "min_period",
"required": false,
"desc": "Minimum delay when backing off.",
"fieldValue": null,
"fieldDefaultValue": 100000000,
"fieldFlag": "querier.scheduler-client.backoff-min-period",
"fieldType": "duration",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "max_period",
"required": false,
"desc": "Maximum delay when backing off.",
"fieldValue": null,
"fieldDefaultValue": 10000000000,
"fieldFlag": "querier.scheduler-client.backoff-max-period",
"fieldType": "duration",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "max_retries",
"required": false,
"desc": "Number of times to backoff and retry before failing.",
"fieldValue": null,
"fieldDefaultValue": 10,
"fieldFlag": "querier.scheduler-client.backoff-retries",
"fieldType": "int",
"fieldCategory": "advanced"
}
],
"fieldValue": null,
"fieldDefaultValue": null
},
{
"kind": "field",
"name": "initial_stream_window_size",
"required": false,
"desc": "Initial stream window size. Values less than the default are not supported and are ignored. Setting this to a value other than the default disables the BDP estimator.",
"fieldValue": null,
"fieldDefaultValue": null,
"fieldFlag": "querier.scheduler-client.initial-stream-window-size",
"fieldType": "int",
"fieldCategory": "experimental"
},
{
"kind": "field",
"name": "initial_connection_window_size",
"required": false,
"desc": "Initial connection window size. Values less than the default are not supported and are ignored. Setting this to a value other than the default disables the BDP estimator.",
"fieldValue": null,
"fieldDefaultValue": null,
"fieldFlag": "querier.scheduler-client.initial-connection-window-size",
"fieldType": "int",
"fieldCategory": "experimental"
},
{
"kind": "field",
"name": "tls_enabled",
"required": false,
"desc": "Enable TLS in the gRPC client. This flag needs to be enabled when any other TLS flag is set. If set to false, insecure connection to gRPC server will be used.",
"fieldValue": null,
"fieldDefaultValue": false,
"fieldFlag": "querier.scheduler-client.tls-enabled",
"fieldType": "boolean",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "tls_cert_path",
"required": false,
"desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.",
"fieldValue": null,
"fieldDefaultValue": "",
"fieldFlag": "querier.scheduler-client.tls-cert-path",
"fieldType": "string",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "tls_key_path",
"required": false,
"desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.",
"fieldValue": null,
"fieldDefaultValue": "",
"fieldFlag": "querier.scheduler-client.tls-key-path",
"fieldType": "string",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "tls_ca_path",
"required": false,
"desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.",
"fieldValue": null,
"fieldDefaultValue": "",
"fieldFlag": "querier.scheduler-client.tls-ca-path",
"fieldType": "string",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "tls_server_name",
"required": false,
"desc": "Override the expected name on the server certificate.",
"fieldValue": null,
"fieldDefaultValue": "",
"fieldFlag": "querier.scheduler-client.tls-server-name",
"fieldType": "string",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "tls_insecure_skip_verify",
"required": false,
"desc": "Skip validating server certificate.",
"fieldValue": null,
"fieldDefaultValue": false,
"fieldFlag": "querier.scheduler-client.tls-insecure-skip-verify",
"fieldType": "boolean",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "tls_cipher_suites",
"required": false,
"desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n",
"fieldValue": null,
"fieldDefaultValue": "",
"fieldFlag": "querier.scheduler-client.tls-cipher-suites",
"fieldType": "string",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "tls_min_version",
"required": false,
"desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13",
"fieldValue": null,
"fieldDefaultValue": "",
"fieldFlag": "querier.scheduler-client.tls-min-version",
"fieldType": "string",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "connect_timeout",
"required": false,
"desc": "The maximum amount of time to establish a connection. A value of 0 means default gRPC client connect timeout and backoff.",
"fieldValue": null,
"fieldDefaultValue": 5000000000,
"fieldFlag": "querier.scheduler-client.connect-timeout",
"fieldType": "duration",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "connect_backoff_base_delay",
"required": false,
"desc": "Initial backoff delay after first connection failure. Only relevant if ConnectTimeout \u003e 0.",
"fieldValue": null,
"fieldDefaultValue": 1000000000,
"fieldFlag": "querier.scheduler-client.connect-backoff-base-delay",
"fieldType": "duration",
"fieldCategory": "advanced"
},
{
"kind": "field",
"name": "connect_backoff_max_delay",
"required": false,
"desc": "Maximum backoff delay when establishing a connection. Only relevant if ConnectTimeout \u003e 0.",
"fieldValue": null,
"fieldDefaultValue": 5000000000,
"fieldFlag": "querier.scheduler-client.connect-backoff-max-delay",
"fieldType": "duration",
"fieldCategory": "advanced"
}
],
"fieldValue": null,
"fieldDefaultValue": null
}
],
"fieldValue": null,
Expand Down
44 changes: 44 additions & 0 deletions cmd/mimir/help-all.txt.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -1675,6 +1675,50 @@ Usage of ./cmd/mimir/mimir:
The time after which a metric should be queried from storage and not just ingesters. 0 means all queries are sent to store. If this option is enabled, the time range of the query sent to the store-gateway will be manipulated to ensure the query end is not more recent than 'now - query-store-after'. (default 12h0m0s)
-querier.scheduler-address string
Address of the query-scheduler component, in host:port format. The host should resolve to all query-scheduler instances. This option should be set only when query-scheduler component is in use and -query-scheduler.service-discovery-mode is set to 'dns'.
-querier.scheduler-client.backoff-max-period duration
Maximum delay when backing off. (default 10s)
-querier.scheduler-client.backoff-min-period duration
Minimum delay when backing off. (default 100ms)
-querier.scheduler-client.backoff-on-ratelimits
Enable backoff and retry when we hit rate limits.
-querier.scheduler-client.backoff-retries int
Number of times to backoff and retry before failing. (default 10)
-querier.scheduler-client.connect-backoff-base-delay duration
Initial backoff delay after first connection failure. Only relevant if ConnectTimeout > 0. (default 1s)
-querier.scheduler-client.connect-backoff-max-delay duration
Maximum backoff delay when establishing a connection. Only relevant if ConnectTimeout > 0. (default 5s)
-querier.scheduler-client.connect-timeout duration
The maximum amount of time to establish a connection. A value of 0 means default gRPC client connect timeout and backoff. (default 5s)
-querier.scheduler-client.grpc-client-rate-limit float
Rate limit for gRPC client; 0 means disabled.
-querier.scheduler-client.grpc-client-rate-limit-burst int
Rate limit burst for gRPC client.
-querier.scheduler-client.grpc-compression string
Use compression when sending messages. Supported values are: 'gzip', 'snappy' and '' (disable compression)
-querier.scheduler-client.grpc-max-recv-msg-size int
gRPC client max receive message size (bytes). (default 104857600)
-querier.scheduler-client.grpc-max-send-msg-size int
gRPC client max send message size (bytes). (default 104857600)
-querier.scheduler-client.initial-connection-window-size value
[experimental] Initial connection window size. Values less than the default are not supported and are ignored. Setting this to a value other than the default disables the BDP estimator. (default 63KiB1023B)
-querier.scheduler-client.initial-stream-window-size value
[experimental] Initial stream window size. Values less than the default are not supported and are ignored. Setting this to a value other than the default disables the BDP estimator. (default 63KiB1023B)
-querier.scheduler-client.tls-ca-path string
Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.
-querier.scheduler-client.tls-cert-path string
Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.
-querier.scheduler-client.tls-cipher-suites string
Override the default cipher suite list (separated by commas).
-querier.scheduler-client.tls-enabled
Enable TLS in the gRPC client. This flag needs to be enabled when any other TLS flag is set. If set to false, insecure connection to gRPC server will be used.
-querier.scheduler-client.tls-insecure-skip-verify
Skip validating server certificate.
-querier.scheduler-client.tls-key-path string
Path to the key for the client certificate. Also requires the client certificate to be configured.
-querier.scheduler-client.tls-min-version string
Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13
-querier.scheduler-client.tls-server-name string
Override the expected name on the server certificate.
-querier.shuffle-sharding-ingesters-enabled
Fetch in-memory series from the minimum set of required ingesters, selecting only ingesters which may have received series since -querier.query-ingesters-within. If this setting is false or -querier.query-ingesters-within is '0', queriers always query all ingesters (ingesters shuffle sharding on read path is disabled). (default true)
-querier.store-gateway-client.tls-ca-path string
Expand Down
10 changes: 8 additions & 2 deletions docs/sources/mimir/references/configuration-parameters/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2258,6 +2258,7 @@ The `grpc_client` block configures the gRPC client used to communicate between t

- `ingester.client`
- `querier.frontend-client`
- `querier.scheduler-client`
- `query-frontend.grpc-client-config`
- `query-scheduler.grpc-client-config`
- `ruler.client`
Expand Down Expand Up @@ -2429,10 +2430,15 @@ The `frontend_worker` block configures the worker running within the querier, pi
# CLI flag: -querier.id
[id: <string> | default = ""]
# Configures the gRPC client used to communicate between the queriers and the
# query-frontends / query-schedulers.
# Configures the gRPC client used to communicate between the querier and the
# query-frontend.
# The CLI flags prefix for this block configuration is: querier.frontend-client
[grpc_client_config: <grpc_client>]
# Configures the gRPC client used to communicate between the querier and the
# query-scheduler.
# The CLI flags prefix for this block configuration is: querier.scheduler-client
[query_scheduler_grpc_client_config: <grpc_client>]
```

### etcd
Expand Down
3 changes: 2 additions & 1 deletion pkg/mimir/modules.go
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,8 @@ func (t *Mimir) initVault() (services.Service, error) {

// Update Configs - GRPC Clients
t.Cfg.IngesterClient.GRPCClientConfig.TLS.Reader = t.Vault
t.Cfg.Worker.GRPCClientConfig.TLS.Reader = t.Vault
t.Cfg.Worker.QueryFrontendGRPCClientConfig.TLS.Reader = t.Vault
t.Cfg.Worker.QuerySchedulerGRPCClientConfig.TLS.Reader = t.Vault
t.Cfg.Querier.StoreGatewayClient.TLS.Reader = t.Vault
t.Cfg.Frontend.FrontendV2.GRPCClientConfig.TLS.Reader = t.Vault
t.Cfg.Ruler.ClientTLSConfig.TLS.Reader = t.Vault
Expand Down
3 changes: 2 additions & 1 deletion pkg/mimir/modules_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,8 @@ func TestInitVault(t *testing.T) {

// Check GRPC Clients
require.NotNil(t, mimir.Cfg.IngesterClient.GRPCClientConfig.TLS.Reader)
require.NotNil(t, mimir.Cfg.Worker.GRPCClientConfig.TLS.Reader)
require.NotNil(t, mimir.Cfg.Worker.QueryFrontendGRPCClientConfig.TLS.Reader)
require.NotNil(t, mimir.Cfg.Worker.QuerySchedulerGRPCClientConfig.TLS.Reader)
require.NotNil(t, mimir.Cfg.Querier.StoreGatewayClient.TLS.Reader)
require.NotNil(t, mimir.Cfg.Frontend.FrontendV2.GRPCClientConfig.TLS.Reader)
require.NotNil(t, mimir.Cfg.Ruler.ClientTLSConfig.TLS.Reader)
Expand Down
2 changes: 1 addition & 1 deletion pkg/querier/worker/frontend_processor.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func newFrontendProcessor(cfg Config, handler RequestHandler, log log.Logger) *f
return &frontendProcessor{
log: log,
handler: handler,
maxMessageSize: cfg.GRPCClientConfig.MaxSendMsgSize,
maxMessageSize: cfg.QueryFrontendGRPCClientConfig.MaxSendMsgSize,
querierID: cfg.QuerierID,

frontendClientFactory: func(conn *grpc.ClientConn) frontendv1pb.FrontendClient {
Expand Down
Loading

0 comments on commit a8fd1f3

Please sign in to comment.