aliyun-qosは、Alibaba Cloud Elasticsearchチームによって開発された調整プラグインです。このプラグインは、クラスターの安定性を向上させるように設計されています。プラグインは、クラスターレベルの読み取りまたは書き込み調整を実装し、実際の状況に基づいて特定のインデックスの優先度を下げます。 aliyun-qosプラグインを使用すると、プラグインによって事前定義されたルールに基づいてサービスの優先度を下げることができます。これは、アップストリームサービス、特に読み取りリクエストで調整を実装できない場合に役立ちます。
前提条件
Elasticsearchクラスターにインストールされているaliyun-qosプラグインが最新バージョンにアップグレードされていること。
ElasticsearchクラスターのKibanaコンソールにログオンし、GET /_cat/plugins?vコマンドを実行して、プラグインのバージョンを確認できます。
Elasticsearch V7.10クラスター用のプラグインの最新バージョンは 7.10.0_ali1.6.0.2 です。他のバージョンのElasticsearchクラスター用のプラグインの最新バージョンは、<Elasticsearchクラスターのバージョン>-rc4 の形式です。プラグインが最新バージョンでない場合は、次のいずれかの方法を使用してプラグインのバージョンをアップグレードできます。
Elasticsearch V7.10クラスターにインストールされているプラグイン:カーネルバージョンを V1.6.0 に更新します。詳細については、クラスターのバージョンをアップグレードする をご参照ください。
V7.10以外のバージョンのElasticsearchクラスターにインストールされているプラグイン:チケットを送信することで、Elasticsearchテクニカルエンジニアに連絡してプラグインのバージョンをアップグレードします。アップグレード後、変更を有効にするには、Elasticsearchクラスターを再起動する必要があります。
aliyun-qosプラグインのバージョンが rc4 より前の場合、プラグインを使用すると、システムは
unsupported_operation_exceptionエラーを報告します。V6.7.0以降のElasticsearchクラスターにインストールされているaliyun-qosプラグインのバージョンをアップグレードできます。 V6.7.0より前のバージョンのElasticsearchクラスターにインストールされているaliyun-qosプラグインのバージョンをアップグレードする場合は、aliyun-qosプラグインのバージョンをアップグレードする前に、クラスターのバージョンを V6.7.0 以降にアップグレードする必要があります。
注意事項
aliyun-qosは組み込みプラグインであり、アンインストールできません。このプラグインによって提供される調整機能は、デフォルトで無効になっています。このプラグインは、クラスターを保護し、クラスターの安定性を向上させるように設計されています。読み取りまたは書き込みトラフィックを正確に測定するものではありません。
説明プラグインを使用する前に、Elasticsearchコンソールの [プラグイン] ページでプラグインがインストールされているかどうかを確認できます。プラグインがインストールされていない場合は、最初にインストールしてください。詳細については、組み込みプラグインをインストールおよび削除する をご参照ください。プラグインは、インストール後にアンインストールできません。
aliyun-qosを最新バージョンにアップグレードする前に、次の項目に注意してください。
以前のバージョンのaliyun-qosプラグインとそれ以降のバージョンのaliyun-qosプラグインによって提供される調整機能の実装メカニズムの違いにより、アップグレード中に調整機能が短時間無効になる場合があります。クラスターの専用マスターノードにインストールされているプラグインが最新バージョンにアップグレードされると、調整機能は回復します。
aliyun-qosプラグインを最新バージョンにアップグレードすると、プラグインで構成されている一部のリミッターがアップグレードに失敗する場合があります。このような状況が発生した場合は、次のコマンドを実行してプラグインを再度アップグレードする必要があります。コマンドの実行後にエラーが報告された場合は、hasError の値が false になるまでコマンドを複数回実行できます。
POST /_qos/limiter/ops/upgrade説明上記のコマンドを実行しても結果が返されない場合は、aliyun-qosプラグインで構成されているすべてのリミッターが最新バージョンです。
しきい値を評価する
読み取りおよび書き込みリクエストの処理効率を確保するために、aliyun-qosプラグインはElasticsearchクラスターで調整を実行しますが、クラスター内のすべてのノードの読み取りまたは書き込みトラフィックを正確に測定するわけではありません。これは、測定されたトラフィックと実際のトラフィックの間に不一致が生じる可能性があります。 aliyun-qosプラグインを使用する前に、次のルールに基づいて調整しきい値を評価できます。
クエリリクエスト
クエリリクエストの調整しきい値 = クライアントからElasticsearchへのエンドツーエンドの1秒あたりのクエリ数(QPS)
説明エンドツーエンドQPSは、クライアントノードに1秒あたりに送信されるクエリリクエストの数を示します。
書き込みリクエスト
書き込みリクエストの調整しきい値の計算に使用される方法は、クエリリクエストの調整しきい値の計算に使用される方法と似ています。ただし、レプリカシャードの数に基づいて、計算された書き込みリクエストのしきい値を調整する必要があります。
たとえば、クラスターに2つのデータノードが含まれており、1つのプライマリシャードと1つのレプリカシャードを持つ1つのインデックスが格納されており、毎回 10 MB のデータが書き込まれるとします。この場合、インデックスには1つのレプリカシャードがあるため、毎回 10 MB のデータが各データノードに書き込まれます。さらに、X-Pack Monitor、Audit、および Watcher タスクも書き込みトラフィックを生成します。調整しきい値を構成する際には、これらのタスクを考慮する必要があります。
調整を有効にする
aliyun-qosプラグインによって提供される調整機能は、デフォルトで無効になっています。プラグインを使用する前に、機能を有効にする必要があります。調整機能を有効にするために使用されるコードは、aliyun-qosプラグインのバージョンによって異なります。次の表に、異なるバージョンのaliyun-qosプラグインに使用できるコードを示します。
このトピックで提供されているすべてのコマンドは、Kibanaコンソールで実行できます。詳細については、Kibanaコンソールにログオンする をご参照ください。
Elasticsearch V7.10クラスターにインストールされているプラグインの最新バージョンのコード | 他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード |
| |
調整を無効にする
調整機能に関連するパラメーターを false または null に設定して、機能を無効にすることができます。調整機能を無効にするために使用されるコードは、aliyun-qosプラグインのバージョンによって異なります。次の表に、異なるバージョンのaliyun-qosプラグインに使用できるコードを示します。
方法 | Elasticsearch V7.10クラスターにインストールされているプラグインの最新バージョンのコード | 他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード |
調整機能に関連するパラメーターを false に設定する | | |
調整機能に関連するパラメーターを null に設定する | | |
Elasticsearch V7.10クラスターにインストールされているaliyun-qosプラグインのリミッターを構成する
このセクションは、Elasticsearch V7.10クラスターにインストールされているaliyun-qosプラグインにのみ適しています。
リミッターの構成には、limiters と tags の2つの項目が含まれています。 tags 構成項目は、調整が実行されるリソースを定義します。 limiters 構成項目は、調整タイプと調整しきい値を定義します。
リミッターは、共通リミッターとデフォルトリミッターに分類されます。 tags 構成項目で ** を指定して、デフォルトリミッターの機能を実装できます。たとえば、tags 構成項目で ** を指定して、デフォルトリミッターを使用して、各プライマリまたはレプリカシャードに転送されるトラフィック、または各アプリケーションのQPSを調整できます。
しきい値に達すると、システムは後続のリクエストを拒否します。
リミッターの構成例の詳細については、リミッターを構成する例 をご参照ください。
PUT /_qos/limiter/<limiterName>
{
"limiters": {
${action}.${limiter_type}:${threshold}
},
"tags": {
${tagName}:${tagValue}
},
"priority":0,
"params":{
"watchMode":true
}
}パラメーター | 説明 | 有効な値 |
action | 調整が実行される操作のタイプ。 |
|
limiter_type | 調整タイプ。次の調整タイプがサポートされています。
|
|
threshold | 調整しきい値。 | -1以上の整数。 説明 一部のリミッタータイプでは、このパラメーターを単位を含む文字列に設定できます。詳細については、limiter_type パラメーターの説明をご参照ください。 |
tagName | タグキー。 |
|
tagValue | タグ値。 | 文字列または配列。配列が指定されている場合、調整は配列内のいずれかの要素に一致するリソースに適用されます。タグ値には、完全一致、あいまい一致、およびすべての値がサポートされています。例:
|
priority | 優先度。 | 整数。デフォルト値:0。 説明 優先度の高いリミッターほど有効になる可能性が高くなります。複数のデフォルトリミッターにヒットした場合、優先度の最も高いリミッターが有効になります。 |
params | 詳細パラメーター。 | watchMode:監視モードを有効にするかどうかを指定します。有効な値:true および false。デフォルト値:false。 watchMode パラメーターを true に設定すると、Elasticsearch は関連するメトリックで拒否されたリクエストの数のみを記録し、調整は実行しません。 API を呼び出してメトリックの監視データを表示し、事前に調整効果を確認できます。これにより、不適切な構成によって引き起こされる予期しない調整効果を防ぎます。詳細については、FAQ をご参照ください。 |
リミッターを構成する例
QPSの調整を構成する
インデックスのQPSしきい値を指定して、クライアントノードが1秒あたりに受信できるクエリリクエストの数を制限できます。クライアントノードが1秒あたりに受信するクエリリクエストの数がしきい値を超えると、システムはリクエストを拒否します。
タグキー index および index_patterns に対応するタグ値には、完全なインデックス名とインデックス名のワイルドカードがサポートされています。 QPSの調整を構成するために使用されるコードは、aliyun-qosプラグインのバージョンによって異なります。次の表に、異なるバージョンのaliyun-qosプラグインでQPSの調整を構成するために使用できるコードを示します。
操作 | Elasticsearch V7.10クラスターにインストールされているプラグインの最新バージョンのコード | 他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード |
特定のインデックスのQPSの調整を構成する | | |
名前に特定のプレフィックスが付いているインデックスのQPSの調整を構成する | | |
任意のインデックスのQPSの調整を構成する | 説明
| サポートされていません |
すべてのインデックスの合計QPSの調整を構成する | 説明
| |
調整をトリガーするために複数のルールを定義できます。リクエストがいずれかのルールにヒットすると、調整がトリガーされます。
クライアントを使用してデータをクエリする場合、またはElasticsearchクラスターのKibanaコンソールでデータをクエリする場合に、QPSがaliyun-qosプラグインで構成した調整しきい値を超えると、システムは次のいずれかのエラーメッセージを報告します。この場合、QPSを削減する必要があります。報告されるエラーメッセージは、aliyun-qosプラグインのバージョンによって異なります。
Elasticsearch 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 }他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード
{ "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 }
TPSの調整を構成する
インデックスのTPSしきい値を指定して、クライアントノードが1秒あたりに受信できる書き込みリクエストの数を制限できます。クライアントノードが1秒あたりに受信する書き込みリクエストの数がしきい値を超えると、システムはリクエストを拒否します。
タグキー index および index_patterns に対応するタグ値には、完全なインデックス名とインデックス名のワイルドカードがサポートされています。 TPSの調整を構成するために使用されるコードは、aliyun-qosプラグインのバージョンによって異なります。次の表に、異なるバージョンのaliyun-qosプラグインでTPSの調整を構成するために使用できるコードを示します。
Elasticsearch V7.10クラスターにインストールされているプラグインの最新バージョンのコード | 他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード |
| サポートされていません |
すべてのバルクリクエストに対して1秒あたりに書き込むことができるデータ量の調整を構成する
すべてのバルクリクエストに対して書き込むことができるバイト数の合計を指定して、クライアントノードが1秒あたりに受信できる最大バイト数を制限できます。バルクリクエストの詳細については、Bulk API をご参照ください。クライアントノードが1秒あたりに受信するバイト数がしきい値を超えると、システムはリクエストを拒否します。
タグキー index および index_patterns に対応するタグ値には、完全なインデックス名とインデックス名のワイルドカードがサポートされています。すべてのバルクリクエストに対して1秒あたりに書き込むことができるデータ量の調整を構成するために使用されるコードは、aliyun-qosプラグインのバージョンによって異なります。次の表に、異なるバージョンのaliyun-qosプラグインに使用できるコードを示します。
Elasticsearch V7.10クラスターにインストールされているプラグインの最新バージョンのコード | 他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード |
| |
調整をトリガーするために複数のルールを定義できます。リクエストがいずれかのルールにヒットすると、調整がトリガーされます。
バルクリクエストに対して1秒あたりに書き込むことができるデータ量の調整を構成する
単一のバルクリクエストに対して書き込むことができる最大バイト数を指定して、クライアントノードが単一のリクエストから受信できる最大バイト数を制限できます。バルクリクエストの詳細については、Bulk API をご参照ください。クライアントノードが単一のリクエストから受信するバイト数がしきい値を超えると、システムはリクエストを拒否します。
タグキー index および index_patterns に対応するタグ値には、完全なインデックス名とインデックス名のワイルドカードがサポートされています。バルクリクエストに書き込むことができるデータ量の調整を構成するために使用されるコードは、aliyun-qosプラグインのバージョンによって異なります。次の表に、異なるバージョンのaliyun-qosプラグインに使用できるコードを示します。
Elasticsearch V7.10クラスターにインストールされているプラグインの最新バージョンのコード | 他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード |
| |
調整をトリガーするために複数のルールを定義できます。リクエストがいずれかのルールにヒットすると、調整がトリガーされます。
クライアントを使用してElasticsearchクラスターにデータを書き込む場合、またはKibanaコンソールでデータを書き込む場合に、バルクリクエストに書き込むバイト数が、クラスターにインストールされているaliyun-qosプラグインで構成した調整しきい値を超えると、システムは次のいずれかのエラーメッセージを報告します。この場合、エラーメッセージに基づいて、バルクリクエストに書き込むバイト数を減らす必要があります。報告されるエラーメッセージは、aliyun-qosプラグインのバージョンによって異なります。
Elasticsearch 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 }他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード
{ "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 }
プライマリまたはレプリカシャードの数をクエリするために使用される同時スレッド数の調整を構成する
プライマリまたはレプリカシャードの数をクエリするために使用される同時スレッド数のしきい値を指定して、Elasticsearchクラスターの負荷を軽減できます。タグキー index および index_patterns に対応するタグ値には、完全なインデックス名とインデックス名のワイルドカードがサポートされています。プライマリまたはレプリカシャードの数をクエリするために使用される同時スレッド数の調整を構成するために使用されるコードは、aliyun-qosプラグインのバージョンによって異なります。次の表に、異なるバージョンのaliyun-qosプラグインに使用できるコードを示します。
Elasticsearch V7.10クラスターにインストールされているプラグインの最新バージョンのコード | 他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード |
| サポートされていません |
調整をトリガーするために複数のルールを定義できます。リクエストがいずれかのルールにヒットすると、調整がトリガーされます。
リミッターに一度に複数の設定を構成する
リミッターに一度に複数の設定を構成できます。タグキー index および index_patterns に対応するタグ値には、完全なインデックス名とインデックス名のワイルドカードがサポートされています。リミッターに一度に複数の設定を構成するために使用されるコードは、aliyun-qosプラグインのバージョンによって異なります。次の表に、異なるバージョンのaliyun-qosプラグインに使用できるコードを示します。
Elasticsearch V7.10クラスターにインストールされているプラグインの最新バージョンのコード | 他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード |
| サポートされていません |
調整をトリガーするために複数のルールを定義できます。リクエストがいずれかのルールにヒットすると、調整がトリガーされます。
リミッターをクエリする
リミッターをクエリするために使用されるコードは、aliyun-qosプラグインのバージョンによって異なります。次の表に、異なるバージョンのaliyun-qosプラグインに使用できるコードを示します。
操作 | Elasticsearch V7.10クラスターにインストールされているプラグインの最新バージョンのコード | 他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード |
すべてのリミッターをクエリする | | |
特定のリミッターをクエリする | | |
複数のリミッターをクエリする 説明 複数のリミッター名はコンマ(,)で区切ります。ワイルドカードはサポートされていません。 | | |
リミッターを削除する
リミッターを削除するために使用されるコードは、aliyun-qosプラグインのバージョンによって異なります。次の表に、異なるバージョンのaliyun-qosプラグインに使用できるコードを示します。
操作 | Elasticsearch V7.10クラスターにインストールされているプラグインの最新バージョンのコード | 他のバージョンのElasticsearchクラスターにインストールされているプラグインのコード |
特定のリミッターを削除する | | |
複数のリミッターを削除する 説明 複数のリミッター名はコンマ(,)で区切ります。ワイルドカードはサポートされていません。 | | |
FAQ
Q:調整関連メトリックの監視データを取得するにはどうすればよいですか?
A:次の API を使用できます。
現在の監視データを取得する
すべてのメトリックの現在の監視データを取得する
GET /_qos/limiter/nodes/stats特定のノードのメトリックの現在の監視データを取得する
GET /_qos/limiter/nodes/{nodeId}/stats特定のノードとリミッターのメトリックの現在の監視データを取得する
GET /_qos/limiter/nodes/{nodeId}/stats/{limiterIds}
履歴監視データを取得する
すべてのメトリックの履歴監視データを取得する
GET /_qos/limiter/metric特定のリミッターのメトリックの履歴監視データを取得する
GET /_qos/limiter/metric/{limiterId}