Need help in understanding of limit configuration for memberlist replication setup #5285
-
Hi All, I configured the mimir to run on EC2 machine in monolith mode and made high available via AWS Auto scaling group (ASG) using memberlist replicas. So when AWS ASG observes high network inbound and outbound data transfer it’s auto scaling. Everything is working as expected till we hit the limitation errors like max_label_names_per_series, max_global_series_per_metric, max_global_series_per_user, ingestion_rate. I modified the values based on error logs and the values are as follows
Now I am seeing the similar limitation error when we reached the above limit
After debugging, my understanding of config.yaml file is wrong. Initially I thought the values in config.yaml file are applicable to individual mimirs but I am wrong because the values in config.yaml are applicable to entire replicas. If I have 3 mimir replicas then values are divided by 3. For example max_global_series_per_metric -- 80000/3 so each mimir will accept upto 26666 merics per series. The main problem here is I am using AWS ASG and I am not sure how many instance will be there at any point of time. So would like to take help on below points
You suggestion/help is really appreciated. Also let me know if you need any information |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 7 replies
-
You can set the limits very high or optionally disable the limits altogether. These limits protect the Mimir cluster to not be overwhelmed by the ingress of data or such that one tenant doesn't occupy the majority of the cluster capacity. It seems like your Mimir cluster scales according to load, so it might be safe to just increase them a lot. Related to this - there are also per-replica limits, called instance limits. Those don't change depending on the size of the cluster. So you can disable per-tenant limits and only set instance limits. distributor:
instance_limits:
# (advanced) Max ingestion rate (samples/sec) that this distributor will
# accept. This limit is per-distributor, not per-tenant. Additional push
# requests will be rejected. Current ingestion rate is computed as
# exponentially weighted moving average, updated every second. 0 = unlimited.
# CLI flag: -distributor.instance-limits.max-ingestion-rate
[max_ingestion_rate: <float> | default = 0]
# (advanced) Max inflight push requests that this distributor can handle. This
# limit is per-distributor, not per-tenant. Additional requests will be
# rejected. 0 = unlimited.
# CLI flag: -distributor.instance-limits.max-inflight-push-requests
[max_inflight_push_requests: <int> | default = 2000]
# (advanced) The sum of the request sizes in bytes of inflight push requests
# that this distributor can handle. This limit is per-distributor, not
# per-tenant. Additional requests will be rejected. 0 = unlimited.
# CLI flag: -distributor.instance-limits.max-inflight-push-requests-bytes
[max_inflight_push_requests_bytes: <int> | default = 0]
ingester:
instance_limits:
# (advanced) Max ingestion rate (samples/sec) that ingester will accept. This
# limit is per-ingester, not per-tenant. Additional push requests will be
# rejected. Current ingestion rate is computed as exponentially weighted
# moving average, updated every second. 0 = unlimited.
# CLI flag: -ingester.instance-limits.max-ingestion-rate
[max_ingestion_rate: <float> | default = 0]
# (advanced) Max tenants that this ingester can hold. Requests from additional
# tenants will be rejected. 0 = unlimited.
# CLI flag: -ingester.instance-limits.max-tenants
[max_tenants: <int> | default = 0]
# (advanced) Max series that this ingester can hold (across all tenants).
# Requests to create additional series will be rejected. 0 = unlimited.
# CLI flag: -ingester.instance-limits.max-series
[max_series: <int> | default = 0]
# (advanced) Max inflight push requests that this ingester can handle (across
# all tenants). Additional requests will be rejected. 0 = unlimited.
# CLI flag: -ingester.instance-limits.max-inflight-push-requests
[max_inflight_push_requests: <int> | default = 30000] |
Beta Was this translation helpful? Give feedback.
You can set the limits very high or optionally disable the limits altogether. These limits protect the Mimir cluster to not be overwhelmed by the ingress of data or such that one tenant doesn't occupy the majority of the cluster capacity. It seems like your Mimir cluster scales according to load, so it might be safe to just increase them a lot.
Related to this - there are also per-replica limits, called instance limits. Those don't change depending on the size of the cluster. So you can disable per-tenant limits and only set instance limits.