Le plug-in aliyun-qos est un outil de limitation de débit en lecture et en écriture au niveau du cluster, développé par l'équipe Elasticsearch d'Alibaba Cloud. Lorsque les services en amont ne peuvent pas contrôler le trafic, utilisez le plug-in aliyun-qos pour limiter le débit d'index spécifiques en fonction de la priorité métier. Cela permet de maintenir le trafic à un niveau gérable et de garantir la stabilité de votre cluster Elasticsearch.
Précautions
Le plug-in
aliyun-qosest préinstallé et ne peut pas être désinstallé. Sa fonctionnalité de limitation de débit est désactivée par défaut. Ce plug-in est conçu pour protéger la stabilité du cluster, et non pour mesurer avec précision le trafic en lecture et en écriture.-
Version du plug-in : avant d'utiliser le plug-in
aliyun-qos, assurez-vous qu'il est mis à jour vers la dernière version. Connectez-vous à la console Kibana et exécutezGET /_cat/plugins?vpour vérifier la version du plug-in.La version du plug-in suit le format
<cluster version>_ali<internal version number>, par exemple7.10.0_ali1.6.0.2ou8.17.0_ali2.2.0.4.1. Si la version du plug-in n'est pas la plus récente, reportez-vous aux méthodes suivantes pour la mettre à niveau :Pour un cluster V7.10 : dans la console, mettez à niveau le noyau vers la version 1.6.0. Pour plus d'informations, consultez la rubrique Mettre à niveau les versions de cluster.
Pour les autres versions de cluster : soumettez un ticket au support Alibaba Cloud pour mettre à niveau le plug-in. Après la mise à niveau, redémarrez manuellement le cluster Elasticsearch pour que la nouvelle version prenne effet.
Si la version du plug-in est antérieure à rc4, une erreur
unsupported_operation_exceptionse produit. Le plug-inaliyun-qosne peut être mis à niveau que sur des clusters exécutant la version 6.7.0 ou ultérieure. Vous devez d'abord mettre à niveau les clusters exécutant des versions antérieures vers la version 6.7.0 ou ultérieure.
Évaluer les seuils
Le plug-in aliyun-qos effectue la limitation de débit au niveau du cluster. Afin de minimiser la surcharge de performance, il ne mesure pas avec précision le trafic en lecture et en écriture sur tous les nœuds ; le trafic réel peut donc différer du trafic mesuré. Avant d'utiliser le plug-in, évaluez le seuil de limitation selon les règles suivantes :
-
Requêtes de recherche
Seuil de limitation pour les requêtes de recherche = QPS de bout en bout (requêtes par seconde) du client vers Elasticsearch
Le QPS de bout en bout fait uniquement référence au nombre de requêtes de recherche qui atteignent les nœuds clients par seconde.
-
Requêtes d'écriture
La règle de calcul du seuil de limitation pour les requêtes d'écriture est similaire à celle des requêtes de recherche, mais nécessite un ajustement en fonction du nombre de réplicas de shards.
Par exemple, considérons un cluster comportant deux nœuds de données et un index. L'index possède un shard primaire et un shard réplica. Chaque opération d'écriture envoie 10 Mo de données. Étant donné qu'un shard réplica existe, 10 Mo de données sont écrits sur chaque nœud de données. De plus, les tâches internes X-Pack telles que Monitor, Audit et Watcher consomment également du débit d'écriture. Prévoyez une capacité pour ce trafic lors de la définition du seuil.
Activer la limitation de débit
La fonctionnalité de limitation de débit du plug-in aliyun-qos est désactivée par défaut. Activez-la avant utilisation. La commande d'activation varie selon la version du plug-in.
|
Dernière version V7.10 |
Autres versions |
|
|
Désactiver la limitation de débit
Désactivez la fonctionnalité de limitation de débit en définissant le paramètre limiter sur false ou null. La commande varie selon la version.
|
Méthode |
Dernière version V7.10 |
Autres versions |
|
Définir le paramètre limiter sur |
|
|
|
Définir le paramètre limiter sur |
|
|
Configurer un limiteur (dernière version V7.10)
Les configurations de limiteur suivantes s'appliquent uniquement au plug-in aliyun-qos pour les clusters V7.10.
Une configuration de limiteur comprend deux parties : limiters et tags. La section tags définit la portée des limites de ressources, tandis que la section limiters définit le type de limitation spécifique et le seuil. Les limiteurs peuvent être standard ou par défaut. Créez un limiteur par défaut en définissant une valeur de tag sur **. Par exemple, vous pouvez définir un débit par défaut pour chaque shard ou un QPS par défaut pour chaque application. Lorsqu'une requête dépasse une limite, Elasticsearch rejette les requêtes suivantes.
PUT /_qos/limiter/<limiterName>
{
"limiters": {
${action}.${limiter_type}:${threshold}
},
"tags": {
${tagName}:${tagValue}
},
"priority":0,
"params":{
"watchMode":true
}
}
|
Paramètre |
Description |
Valeur |
|
action |
L'action à limiter. Ce paramètre sert à limiter différents types de requêtes. |
|
|
limiter_type |
Le type de limitation. Trois catégories sont prises en charge : débit, concurrence et limites par requête. |
|
|
threshold |
Le seuil de limitation. |
Un entier supérieur ou égal à -1. Certains types acceptent des chaînes avec des unités. Pour plus d'informations, consultez la description de |
|
tagName |
Le nom du tag. |
|
|
tagValue |
La valeur du tag. |
Une chaîne ou un tableau de chaînes. Si un tableau est utilisé, le tag correspond à n'importe quelle valeur du tableau. La correspondance exacte, la correspondance par préfixe avec un caractère générique et toutes les valeurs sont prises en charge. Exemples :
|
|
priority |
La priorité du limiteur. |
Un entier. Valeur par défaut : 0. Une valeur plus élevée indique une priorité plus grande. Lorsqu'une requête correspond à plusieurs limiteurs par défaut, seul celui ayant la priorité la plus élevée prend effet. |
|
params |
Paramètres avancés. |
|
Exemples de configuration de limiteur
Définir la limitation de débit QPS pour les recherches
Limitez le QPS des recherches sur un nœud client en définissant un seuil pour un index. Lorsque le nombre de requêtes de recherche par seconde dépasse le seuil, Elasticsearch rejette les requêtes suivantes.
Les valeurs pour index et index_patterns peuvent être des noms d'index complets ou des noms avec un caractère générique. La commande varie selon la version.
|
Actions |
Dernière version V7.10 |
Autres versions |
|
Définir la limitation de débit QPS des recherches pour un index unique |
|
|
|
Définir la limitation de débit QPS des recherches pour les index avec un préfixe de nom spécifique |
|
|
|
Définir la limitation de débit QPS des recherches pour chaque index individuellement |
|
Non pris en charge. |
|
Définir une limite totale de QPS de recherche pour tous les index |
|
|
Vous pouvez définir plusieurs règles. La limitation de débit est déclenchée si une requête correspond à n'importe quelle règle.
Lorsque le QPS de recherche dépasse la limite configurée, le système renvoie un message d'erreur. Le message d'erreur varie selon la version :
-
Dernière version V7.10
{ "error": { "root_cause": [ { "type": "status_exception", "reason": "search blocked, limited by [<limiterName>][search.qps](<limiterId>) threshold:[x]" } ], "type": "status_exception", "reason": "search blocked, limited by [<limiterName>][search.qps](<limiterId>) threshold:[x]" }, "status": 429 } -
Autres versions
{ "error": { "root_cause": [ { "type": "rate_limited_exception", "reason": "request indices:data/read/search rejected, limited by [l1:t*:1.0]" } ], "type": "rate_limited_exception", "reason": "request indices:data/read/search rejected, limited by [l1:t*:1.0]" }, "status": 429 }
Définir la limitation de débit TPS pour les écritures
Limitez le nombre de requêtes d'écriture par seconde reçues par un nœud client en définissant un seuil TPS (transactions par seconde). Lorsque le nombre de requêtes d'écriture par seconde dépasse le seuil, Elasticsearch rejette les requêtes suivantes.
Les valeurs pour index et index_patterns peuvent être des noms d'index complets ou des noms avec un caractère générique. La commande varie selon la version.
|
Dernière version V7.10 |
Autres versions |
|
Non pris en charge |
Définir la limitation de débit pour les requêtes Bulk
Limitez le débit d'écriture des requêtes Bulk API sur un nœud client en définissant une limite en octets par seconde. Lorsque le débit d'écriture dépasse cette limite, Elasticsearch rejette les requêtes suivantes.
Les valeurs pour index et index_patterns peuvent être des noms d'index complets ou des noms avec un caractère générique. La commande varie selon la version.
|
Dernière version V7.10 |
Autres versions |
|
|
Vous pouvez définir plusieurs règles. La limitation de débit est déclenchée si une requête correspond à n'importe quelle règle.
Définir la limitation de taille des requêtes pour les requêtes Bulk
Limitez la taille d'une seule requête Bulk API sur un nœud client. Si une requête dépasse cette limite de taille, Elasticsearch la rejette.
Les valeurs pour index et index_patterns peuvent être des noms d'index complets ou des noms avec un caractère générique. La commande varie selon la version.
|
Dernière version V7.10 |
Autres versions |
|
|
Vous pouvez définir plusieurs règles. La limitation de débit est déclenchée si une requête correspond à n'importe quelle règle.
Lorsque la taille d'une seule requête d'écriture dépasse la limite configurée, le système renvoie un message d'erreur. Le message d'erreur varie selon la version :
-
Dernière version V7.10
{ "error" : { "root_cause" : [ { "type" : "status_exception", "reason" : "write_size blocked, limited by [<limiterName>][write.max_size_per_request](<limiterId>) threshold:[x] try acquire [x]" } ], "type" : "status_exception", "reason" : "write_size blocked, limited by [<limiterName>][write.max_size_per_request](<limiterId>) threshold:[x] try acquire [x]" }, "status" : 400 } -
Autres versions
{ "error": { "root_cause": [ { "type": "rate_limited_exception", "reason": "request indices:data/write/bulk rejected, limited by [b2:ByteSizePreSeconds:992.0]" } ], "type": "rate_limited_exception", "reason": "request indices:data/write/bulk rejected, limited by [b2:ByteSizePreSeconds:992.0]" }, "status": 413 }
Définir la limitation de concurrence pour les requêtes de shards
Réduisez la charge de votre cluster en définissant le nombre de requêtes de shards simultanées. Les valeurs pour index et index_patterns peuvent être des noms d'index complets ou des noms avec un caractère générique. La commande varie selon la version.
|
Dernière version V7.10 |
Autres versions |
|
Non pris en charge |
Vous pouvez définir plusieurs règles. La limitation de débit est déclenchée si une requête correspond à n'importe quelle règle.
Définir plusieurs configurations de limiteur
Définissez plusieurs limites au sein d'une seule configuration de limiteur. Les valeurs pour index et index_patterns peuvent être des noms d'index complets ou des noms avec un caractère générique. La commande varie selon la version.
|
Dernière version V7.10 |
Autres versions |
|
Non pris en charge |
Vous pouvez définir plusieurs règles. La limitation de débit est déclenchée si une requête correspond à n'importe quelle règle.
Obtenir les configurations de limiteur
La commande pour obtenir les configurations de limiteur varie selon la version.
|
Actions |
Dernière version V7.10 |
Autres versions |
|
Obtenir toutes les configurations de limiteur |
|
|
|
Obtenir une configuration de limiteur spécifique unique |
|
|
|
Obtenir plusieurs configurations de limiteur spécifiques. Séparez plusieurs noms de limiteurs par des virgules (,). Les caractères génériques ne sont pas pris en charge. |
|
|
Supprimer les configurations de limiteur
La commande pour supprimer les configurations de limiteur varie selon la version.
|
Actions |
Dernière version V7.10 |
Autres versions |
|
Supprimer une configuration de limiteur spécifique unique |
|
|
|
Supprimer plusieurs configurations de limiteur spécifiques. Séparez plusieurs noms de limiteurs par des virgules (,). Les caractères génériques ne sont pas pris en charge. |
|
|
FAQ
Q : Comment obtenir les métriques de surveillance liées à la limitation de débit ?
R : Utilisez les API suivantes :
-
Obtenir les données de métriques actuelles
-
Obtenir les données actuelles pour toutes les métriques
GET /_qos/limiter/nodes/stats -
Obtenir les données de métriques actuelles pour un nœud spécifique
GET /_qos/limiter/nodes/{nodeId}/stats -
Obtenir les données de métriques actuelles pour un nœud et un limiteur spécifiques
GET /_qos/limiter/nodes/{nodeId}/stats/{limiterIds}
-
-
Obtenir les données de métriques historiques
-
Obtenir les données historiques pour toutes les métriques
GET /_qos/limiter/metric -
Obtenir les données de métriques historiques pour un limiteur spécifique
GET /_qos/limiter/metric/{limiterId}
-
Remarques sur les mises à niveau du plug-in
Lorsque vous mettez à niveau le plug-in aliyun-qos vers la dernière version, tenez compte des points suivants :
En raison des différences de mécanisme d'implémentation entre les anciennes et les nouvelles versions, la fonctionnalité de limitation de débit peut être temporairement indisponible pendant le processus de mise à niveau. Elle se rétablit automatiquement après la mise à niveau du plug-in sur le nœud maître.
-
Pendant le processus de conversion des données, certains limiteurs peuvent échouer à la conversion depuis l'ancien format. Si une conversion échoue, exécutez la commande suivante pour réessayer. Si la commande renvoie une erreur, exécutez-la plusieurs fois jusqu'à ce que
hasErrorsoitfalse.POST /_qos/limiter/ops/upgradeSi la commande précédente renvoie un message d'erreur (tel que
unknown action), cela indique que le cluster ne possède pas d'ancien limiteur. Vous pouvez ignorer le message.