aliyun-qos eklentisi, Alibaba Cloud Elasticsearch ekibi tarafından geliştirilen küme düzeyinde bir okuma ve yazma kısıtlama eklentisidir. Üst akış hizmetleri trafiği kontrol edemediğinde iş önceliğine göre belirli dizinleri kısıtlamak için aliyun-qos eklentisini kullanabilirsiniz. Bu sayede trafik yönetilebilir seviyede kalır ve Elasticsearch kümenizin kararlılığı korunur.
Dikkat Edilmesi Gerekenler
aliyun-qoseklentisi önceden yüklüdür ve kaldırılamaz. Kısıtlama özelliği varsayılan olarak devre dışıdır. Eklenti küme kararlılığını korumak üzere tasarlanmıştır; okuma ve yazma trafiğini hassas şekilde ölçmek için değildir.-
Eklenti sürümü:
aliyun-qoseklentisini kullanmadan önce en son sürüme güncellendiğinden emin olun. Kibana konsoluna giriş yapın ve eklenti sürümünü kontrol etmek içinGET /_cat/plugins?vkomutunu çalıştırın.Eklenti sürümü
<cluster version>_ali<internal version number>biçimindedir; örneğin7.10.0_ali1.6.0.2veya8.17.0_ali2.2.0.4.1. Eklenti sürümü en güncel değilse yükseltmek için aşağıdaki yöntemlere başvurun:V7.10 kümesi için: Konsolda çekirdek sürümünü 1.6.0'a yükseltin. Daha fazla bilgi için bkz. Küme sürümlerini yükseltme.
Diğer küme sürümleri için: Eklentiyi yükseltmek üzere Alibaba Cloud Destek'e bir destek talebi oluşturun. Yükseltmeden sonra yeni sürümün etkili olması için Elasticsearch kümesini manuel olarak yeniden başlatmanız gerekir.
Eklenti sürümü rc4'ten önceyse
unsupported_operation_exceptionhatası oluşur.aliyun-qoseklentisi yalnızca V6.7.0 veya üzeri sürüm çalışan kümelerde yükseltilebilir. Daha eski sürüm çalışan kümeleri öncelikle V6.7.0 veya üzerine yükseltmeniz gerekir.
Eşikleri değerlendirin
aliyun-qos eklentisi kısıtlamayı küme düzeyinde uygular. Performans yükünü en aza indirmek için tüm düğümlerdeki okuma ve yazma trafiğini hassas şekilde ölçmez; bu nedenle gerçek trafik ile ölçülen trafik farklılık gösterebilir. Eklentiyi kullanmadan önce aşağıdaki kurallara göre kısıtlama eşiklerini değerlendirin:
-
Sorgu istekleri
Sorgu istekleri için kısıtlama eşiği = İstemciden Elasticsearch'e uçtan uca QPS (saniyedeki sorgu sayısı)
Uçtan uca QPS, yalnızca istemci düğümlerine saniyede ulaşan sorgu isteklerinin sayısını ifade eder.
-
Yazma istekleri
Yazma isteği kısıtlama eşiğini hesaplama kuralı sorgu isteklerine benzer ancak çoğaltma parçası sayısına göre ayarlama yapılmasını gerektirir.
Örneğin iki veri düğümü ve tek bir dizin içeren bir küme düşünün. Dizin bir ana parça ve bir çoğaltma parçasına sahiptir. Her yazma işlemi 10 MB veri gönderir. Bir çoğaltma parçası bulunduğundan her veri düğümüne 10 MB veri yazılır. Ayrıca Monitor, Audit ve Watcher gibi dahili X-Pack görevleri de yazma aktarım hızını tüketir. Eşiği ayarlarken bu trafik için kapasite rezervi bırakın.
Kısıtlamayı etkinleştirin
aliyun-qos eklentisinin kısıtlama özelliği varsayılan olarak devre dışıdır. Kullanmadan önce etkinleştirmeniz gerekir. Özelliği etkinleştirme komutu eklenti sürümüne göre değişir.
|
En son V7.10 sürümü |
Diğer sürümler |
|
|
Kısıtlamayı devre dışı bırakın
Limiter parametresini false veya null olarak ayarlayarak kısıtlama özelliğini devre dışı bırakabilirsiniz. Komut sürüme göre değişir.
|
Yöntem |
En son V7.10 sürümü |
Diğer sürümler |
|
Limiter parametresini |
|
|
|
Limiter parametresini |
|
|
Limiter yapılandırması (en son V7.10 sürümü)
Aşağıdaki limiter yapılandırmaları yalnızca V7.10 kümeleri için aliyun-qos eklentisinde geçerlidir.
Bir limiter yapılandırması iki bölümden oluşur: limiters ve tags. tags bölümü kaynak sınırlarının kapsamını tanımlarken limiters bölümü belirli kısıtlama türünü ve eşik değerini belirler. Limiters standart veya varsayılan olabilir. Bir etiket değerini ** olarak ayarlayarak varsayılan bir limiter oluşturabilirsiniz. Örneğin her parça için varsayılan bir aktarım hızı veya her uygulama için varsayılan bir QPS değeri belirtebilirsiniz. Bir istek sınırı aştığında Elasticsearch sonraki istekleri reddeder.
PUT /_qos/limiter/<limiterName>
{
"limiters": {
${action}.${limiter_type}:${threshold}
},
"tags": {
${tagName}:${tagValue}
},
"priority":0,
"params":{
"watchMode":true
}
}
|
Parametre |
Açıklama |
Değer |
|
action |
Kısıtlanacak işlem. Farklı istek türlerini sınırlandırmak için kullanılır. |
|
|
limiter_type |
Kısıtlama türü. Rate, concurrency ve per-request limitleri olmak üzere üç kategori desteklenir. |
|
|
threshold |
Kısıtlama eşiği. |
-1 veya daha büyük bir tamsayı. Bazı türler birimli dizeleri destekler. Daha fazla bilgi için |
|
tagName |
Etiket adı. |
|
|
tagValue |
Etiket değeri. |
Bir dize veya dize dizisi. Dizi kullanılırsa etiket dizideki herhangi bir değerle eşleşir. Tam eşleşme, joker karakterli ön ek eşleşmesi ve tüm değerler desteklenir. Örnekler:
|
|
priority |
Limiter önceliği. |
Bir tamsayı. Varsayılan değer: 0. Daha yüksek değer daha yüksek öncelik anlamına gelir. Bir istek birden çok varsayılan limiterla eşleştiğinde yalnızca en yüksek önceliğe sahip olan etkili olur. |
|
params |
Gelişmiş parametreler. |
|
Limiter yapılandırma örnekleri
Sorgular için QPS kısıtlaması ayarlayın
Bir dizin için eşik belirleyerek istemci düğümündeki sorgu QPS'sini sınırlayabilirsiniz. Saniyedeki sorgu isteği sayısı eşiği aştığında Elasticsearch sonraki istekleri reddeder.
index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.
|
İşlemler |
En son V7.10 sürümü |
Diğer sürümler |
|
Tek bir dizin için sorgu QPS kısıtlaması ayarlayın |
|
|
|
Belirli bir ad önekine sahip dizinler için sorgu QPS kısıtlaması ayarlayın |
|
|
|
Her dizin için ayrı ayrı sorgu QPS kısıtlaması ayarlayın |
|
Desteklenmiyor. |
|
Tüm dizinler için toplam sorgu QPS sınırı ayarlayın |
|
|
Birden çok kural tanımlayabilirsiniz. Bir istek herhangi bir kural ile eşleştiğinde kısıtlama tetiklenir.
Sorgu QPS'si yapılandırılan sınırı aştığında sistem bir hata mesajı döndürür. Hata mesajı sürüme göre değişir:
-
En son V7.10 sürümü
{ "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 } -
Diğer sürümler
{ "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 }
Yazmalar için TPS kısıtlaması ayarlayın
Bir TPS (saniyedeki işlem sayısı) eşiği belirleyerek istemci düğümünün aldığı saniyedeki yazma isteği sayısını sınırlayabilirsiniz. Saniyedeki yazma isteği sayısı eşiği aştığında Elasticsearch sonraki istekleri reddeder.
index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.
|
En son V7.10 sürümü |
Diğer sürümler |
|
Desteklenmiyor |
Bulk istekleri için aktarım hızı kısıtlaması ayarlayın
İstemci düğümündeki Bulk API istekleri için saniye başına bayt cinsinden bir sınır belirleyerek yazma aktarım hızını sınırlayabilirsiniz. Yazma aktarım hızı bu sınırı aştığında Elasticsearch sonraki istekleri reddeder.
index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.
|
En son V7.10 sürümü |
Diğer sürümler |
|
|
Birden çok kural tanımlayabilirsiniz. Bir istek herhangi bir kural ile eşleştiğinde kısıtlama tetiklenir.
Bulk istekleri için istek boyutu kısıtlaması ayarlayın
İstemci düğümünde tek bir Bulk API isteğinin boyutunu sınırlayabilirsiniz. Bir istek bu boyut sınırını aşarsa Elasticsearch onu reddeder.
index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.
|
En son V7.10 sürümü |
Diğer sürümler |
|
|
Birden çok kural tanımlayabilirsiniz. Bir istek herhangi bir kural ile eşleştiğinde kısıtlama tetiklenir.
Tek bir yazma isteğinin boyutu yapılandırılan sınırı aştığında sistem bir hata mesajı döndürür. Hata mesajı sürüme göre değişir:
-
En son V7.10 sürümü
{ "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 } -
Diğer sürümler
{ "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 }
Parça sorguları için eşzamanlılık kısıtlaması ayarlayın
Eşzamanlı parça sorgusu sayısını belirleyerek kümenizdeki yükü azaltabilirsiniz. index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.
|
En son V7.10 sürümü |
Diğer sürümler |
|
Desteklenmiyor |
Birden çok kural tanımlayabilirsiniz. Bir istek herhangi bir kural ile eşleştiğinde kısıtlama tetiklenir.
Birden çok limiter yapılandırması ayarlayın
Tek bir limiter yapılandırması içinde birden çok sınır tanımlayabilirsiniz. index ve index_patterns değerleri tam dizin adları veya joker karakterli adlar olabilir. Komut sürüme göre değişir.
|
En son V7.10 sürümü |
Diğer sürümler |
|
Desteklenmiyor |
Birden çok kural tanımlayabilirsiniz. Bir istek herhangi bir kural ile eşleştiğinde kısıtlama tetiklenir.
Limiter yapılandırmalarını görüntüleyin
Limiter yapılandırmalarını alma komutu sürüme göre değişir.
|
İşlemler |
En son V7.10 sürümü |
Diğer sürümler |
|
Tüm limiter yapılandırmalarını alın |
|
|
|
Belirtilen tek bir limiter yapılandırmasını alın |
|
|
|
Belirtilen birden çok limiter yapılandırmasını alın. Birden çok limiter adını virgülle (,) ayırın. Joker karakterler desteklenmez. |
|
|
Limiter yapılandırmalarını silin
Limiter yapılandırmalarını silme komutu sürüme göre değişir.
|
İşlemler |
En son V7.10 sürümü |
Diğer sürümler |
|
Belirtilen tek bir limiter yapılandırmasını silin |
|
|
|
Belirtilen birden çok limiter yapılandırmasını silin. Birden çok limiter adını virgülle (,) ayırın. Joker karakterler desteklenmez. |
|
|
SSS
S: Kısıtlamayla ilgili izleme ölçümlerini nasıl elde ederim?
C: Aşağıdaki API'leri kullanabilirsiniz:
-
Geçerli ölçüm verilerini alın
-
Tüm ölçümler için geçerli verileri alın
GET /_qos/limiter/nodes/stats -
Belirli bir düğüm için geçerli ölçüm verilerini alın
GET /_qos/limiter/nodes/{nodeId}/stats -
Belirli bir düğüm ve limiter için geçerli ölçüm verilerini alın
GET /_qos/limiter/nodes/{nodeId}/stats/{limiterIds}
-
-
Geçmiş ölçüm verilerini alın
-
Tüm ölçümler için geçmiş verileri alın
GET /_qos/limiter/metric -
Belirli bir limiter için geçmiş ölçüm verilerini alın
GET /_qos/limiter/metric/{limiterId}
-
Eklenti yükseltmeleriyle ilgili notlar
aliyun-qos eklentisini en son sürüme yükseltirken şunlara dikkat edin:
Eski ve yeni sürümler arasındaki uygulama mekanizması farklarından dolayı yükseltme süreci sırasında kısıtlama özelliği geçici olarak kullanılamayabilir. Master düğümündeki eklenti yükseltildikten sonra otomatik olarak geri yüklenir.
-
Veri dönüştürme süreci sırasında bazı limiterlar eski biçimden dönüştürülemeyebilir. Dönüştürme başarısız olursa yeniden denemek için aşağıdaki komutu çalıştırın. Komut bir hata döndürürse
hasErrordeğerifalseolana kadar komutu birkaç kez çalıştırabilirsiniz.POST /_qos/limiter/ops/upgradeÖnceki komut bir hata mesajı döndürürse (örneğin
unknown action), bu durum kümede eski bir kısıtlayıcı olmadığını gösterir. Mesajı yok sayabilirsiniz.