aliyun-qos adalah plug-in pembatasan yang dikembangkan oleh tim Elasticsearch Alibaba Cloud. Plug-in ini dirancang untuk meningkatkan stabilitas kluster dengan mengimplementasikan pembatasan baca atau tulis tingkat kluster dan mengurangi prioritas indeks tertentu berdasarkan situasi aktual. Anda dapat menggunakan aliyun-qos plug-in untuk mengurangi prioritas layanan sesuai aturan yang telah ditentukan sebelumnya, terutama jika tidak dapat menerapkan pembatasan pada layanan hulu, khususnya permintaan baca.
Prasyarat
Pastikan bahwa aliyun-qos plug-in di kluster Elasticsearch Anda telah diperbarui ke versi terbaru.
Anda dapat masuk ke Konsol Kibana dari kluster Elasticsearch Anda dan menjalankan perintah GET /_cat/plugins?v untuk memeriksa versi plug-in. 
Versi terbaru plug-in untuk kluster Elasticsearch V7.10 adalah 7.10.0_ali1.6.0.2. Untuk kluster Elasticsearch lainnya, versi terbaru dalam format <Versi kluster Elasticsearch>-rc4. Jika plug-in bukan versi terbaru, gunakan salah satu metode berikut untuk memperbarui:
Plug-in terpasang pada kluster Elasticsearch V7.10: Perbarui versi kernel ke V1.6.0. Untuk informasi lebih lanjut, lihat Perbarui versi kluster.
Plug-in terpasang pada kluster Elasticsearch selain V7.10: Kirim tiket untuk menghubungi insinyur teknis Elasticsearch agar memperbarui versi plug-in. Setelah pembaruan, restart kluster Elasticsearch agar perubahan berlaku.
Jika versi aliyun-qos plug-in lebih awal dari rc4, sistem melaporkan kesalahan
unsupported_operation_exceptionsaat Anda menggunakan plug-in.Anda dapat memperbarui versi aliyun-qos plug-in yang terpasang pada kluster Elasticsearch V6.7.0 atau lebih baru. Jika ingin memperbarui versi aliyun-qos plug-in pada kluster Elasticsearch versi lebih awal dari V6.7.0, Anda harus terlebih dahulu memperbarui versi kluster ke V6.7.0 atau lebih baru.
Peringatan
aliyun-qos adalah plug-in bawaan yang tidak dapat dihapus. Fitur pembatasan yang disediakan oleh plug-in ini dinonaktifkan secara default. Plug-in ini dirancang untuk melindungi kluster dan meningkatkan stabilitas kluster tanpa mengukur lalu lintas baca atau tulis secara tepat.
nullSebelum menggunakan plug-in, Anda dapat memeriksa apakah plug-in terpasang di halaman Plug-in di Konsol Elasticsearch. Jika belum terpasang, pasang terlebih dahulu. Untuk informasi lebih lanjut, lihat Pasang dan hapus plug-in bawaan. Setelah dipasang, plug-in tidak dapat dihapus.
Sebelum memperbarui aliyun-qos ke versi terbaru, perhatikan hal berikut:
Karena perbedaan mekanisme implementasi fitur pembatasan antara versi sebelumnya dan versi terbaru aliyun-qos plug-in, fitur pembatasan mungkin sementara tidak efektif selama pembaruan. Fitur pembatasan akan pulih setelah plug-in pada node master khusus kluster diperbarui ke versi terbaru.
Saat memperbarui aliyun-qos plug-in ke versi terbaru, beberapa pembatas yang dikonfigurasi mungkin gagal diperbarui. Dalam kasus ini, jalankan perintah berikut untuk memperbarui plug-in lagi. Jika ada kesalahan dilaporkan, jalankan perintah beberapa kali sampai nilai hasError adalah false.
POST /_qos/limiter/ops/upgradenullJika tidak ada hasil yang dikembalikan setelah menjalankan perintah sebelumnya, semua pembatas yang dikonfigurasi di aliyun-qos plug-in sudah merupakan versi terbaru.
Evaluasi ambang batas
Untuk memastikan efisiensi pemrosesan permintaan baca dan tulis, aliyun-qos plug-in melakukan pembatasan pada kluster Elasticsearch tetapi tidak mengukur lalu lintas baca atau tulis dari semua node di kluster. Hal ini dapat menyebabkan ketidaksesuaian antara lalu lintas yang diukur dan lalu lintas aktual. Sebelum menggunakan aliyun-qos plug-in, evaluasi ambang batas pembatasan berdasarkan aturan berikut:
Permintaan query
Ambang batas pembatasan untuk permintaan query = Queries per detik (QPS) ujung ke ujung dari klien ke Elasticsearch
nullQPS ujung ke ujung menunjukkan jumlah permintaan query yang dikirim ke node klien per detik.
Permintaan tulis
Metode untuk menghitung ambang batas pembatasan untuk permintaan tulis mirip dengan metode untuk permintaan query. Namun, sesuaikan ambang batas yang dihitung berdasarkan jumlah shard replika.
Sebagai contoh, sebuah kluster berisi dua node data dan menyimpan satu indeks dengan satu shard utama dan satu shard replika, serta 10 MB data ditulis setiap kali. Dalam kasus ini, 10 MB data ditulis ke setiap node data karena indeks memiliki satu shard replika. Selain itu, tugas X-Pack Monitor, Audit, dan Watcher juga menghasilkan lalu lintas tulis. Pertimbangkan tugas-tugas ini saat mengonfigurasi ambang batas pembatasan.
Aktifkan pembatasan
Fitur pembatasan yang disediakan oleh aliyun-qos plug-in dinonaktifkan secara default. Aktifkan fitur sebelum menggunakan plug-in. Kode untuk mengaktifkan fitur pembatasan bervariasi berdasarkan versi aliyun-qos plug-in. Tabel berikut menjelaskan kode yang dapat digunakan untuk versi berbeda.
Semua perintah yang disediakan dalam topik ini dapat dijalankan di Konsol Kibana. Untuk informasi lebih lanjut, lihat Masuk ke Konsol Kibana.
Kode untuk versi terbaru plug-in yang terpasang pada kluster Elasticsearch V7.10 | Kode untuk plug-in yang terpasang pada kluster Elasticsearch lainnya |
| |
Nonaktifkan pembatasan
Nonaktifkan fitur pembatasan dengan mengatur parameter terkait ke false atau null. Kode untuk menonaktifkan fitur pembatasan bervariasi berdasarkan versi aliyun-qos plug-in. Tabel berikut menjelaskan kode yang dapat digunakan untuk versi berbeda.
Metode | Kode untuk versi terbaru plug-in yang terpasang pada kluster Elasticsearch V7.10 | Kode untuk plug-in yang terpasang pada kluster Elasticsearch lainnya |
Setel parameter terkait fitur pembatasan ke false | | |
Setel parameter terkait fitur pembatasan ke null | | |
Konfigurasikan pembatas untuk aliyun-qos plug-in yang terpasang pada kluster Elasticsearch V7.10
Bagian ini hanya berlaku untuk aliyun-qos plug-in yang terpasang pada kluster Elasticsearch V7.10.
Konfigurasi pembatas mencakup dua item: pembatas dan tag. Item konfigurasi tag mendefinisikan sumber daya tempat pembatasan dilakukan, sedangkan item konfigurasi pembatas mendefinisikan jenis dan ambang batas pembatasan.
Pembatas diklasifikasikan menjadi pembatas umum dan pembatas default. Anda dapat menentukan ** dalam item konfigurasi tags untuk mengimplementasikan fitur pembatas default. Contohnya, tentukan ** dalam item konfigurasi tags untuk menggunakan pembatas default pada lalu lintas yang ditransfer ke setiap shard utama atau replika atau pada QPS setiap aplikasi.
Jika ambang batas tercapai, sistem menolak permintaan berikutnya.
Untuk informasi lebih lanjut tentang contoh konfigurasi pembatas, lihat Contoh untuk mengonfigurasi pembatas.
PUT /_qos/limiter/<limiterName>
{
"limiters": {
${action}.${limiter_type}:${threshold}
},
"tags": {
${tagName}:${tagValue}
},
"priority":0,
"params":{
"watchMode":true
}
}Parameter | Deskripsi | Nilai valid |
action | Jenis operasi tempat pembatasan dilakukan. |
|
limiter_type | Jenis pembatasan. Jenis pembatasan yang didukung:
|
|
threshold | Ambang batas pembatasan. | Bilangan bulat yang lebih besar dari atau sama dengan -1. null Anda dapat mengatur parameter ini ke string yang berisi unit untuk beberapa jenis pembatas. Untuk informasi lebih lanjut, lihat deskripsi parameter limiter_type. |
tagName | Kunci tag. |
|
tagValue | Nilai tag. | String atau array. Jika array ditentukan, pembatasan berlaku untuk sumber daya yang cocok dengan elemen apa pun dalam array. Pencocokan tepat, pencocokan kabur, dan semua nilai didukung untuk nilai tag. Contoh:
|
priority | Prioritas. | Bilangan bulat. Nilai default: 0. null Pembatas dengan prioritas lebih tinggi lebih mungkin berlaku. Jika beberapa pembatas default terkena, pembatas dengan prioritas tertinggi berlaku. |
params | Parameter lanjutan. | watchMode: menentukan apakah akan mengaktifkan mode watch. Nilai valid: true dan false. Nilai default: false. Jika Anda mengatur parameter watchMode ke true, Elasticsearch hanya mencatat jumlah permintaan yang ditolak dalam metrik terkait tetapi tidak melakukan pembatasan. Anda dapat memanggil API untuk melihat data pemantauan metrik dan memeriksa efek pembatasan terlebih dahulu. Ini mencegah efek pembatasan yang tidak terduga akibat konfigurasi yang tidak sesuai. Untuk informasi lebih lanjut, lihat FAQ. |
Contoh untuk mengonfigurasi pembatas
Konfigurasikan pembatasan untuk QPS
Anda dapat menentukan ambang batas QPS untuk indeks guna membatasi jumlah permintaan query yang dapat diterima node klien per detik. Jika jumlah permintaan query melebihi ambang batas, sistem akan menolak permintaan.
Nama indeks lengkap dan wildcard untuk nama indeks didukung sebagai nilai tag yang sesuai dengan kunci tag index dan index_patterns. Kode untuk mengonfigurasi pembatasan QPS bervariasi berdasarkan versi aliyun-qos plug-in. Tabel berikut menjelaskan kode yang dapat digunakan untuk versi berbeda.
Operasi | Kode untuk versi terbaru plug-in pada kluster Elasticsearch V7.10 | Kode untuk plug-in pada kluster Elasticsearch lainnya |
Konfigurasikan pembatasan untuk QPS indeks tertentu | | |
Konfigurasikan pembatasan untuk QPS indeks dengan awalan tertentu | | |
Konfigurasikan pembatasan untuk QPS semua indeks | null
| Tidak didukung |
Konfigurasikan pembatasan untuk total QPS semua indeks | null
|
|
Anda dapat menentukan beberapa aturan untuk memicu pembatasan. Jika permintaan memenuhi salah satu aturan, pembatasan dipicu.
Jika QPS Anda melebihi ambang batas pembatasan yang dikonfigurasi di aliyun-qos plug-in saat menggunakan klien atau Konsol Kibana kluster Elasticsearch, sistem melaporkan salah satu pesan kesalahan berikut. Dalam hal ini, Anda harus mengurangi QPS Anda. Pesan kesalahan yang dilaporkan bervariasi berdasarkan versi aliyun-qos plug-in.
Kode untuk versi terbaru plug-in pada kluster 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 }Kode untuk plug-in pada kluster Elasticsearch lainnya
{ "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 }
Konfigurasikan pembatasan untuk TPS
Anda dapat menentukan ambang batas TPS untuk indeks guna membatasi jumlah permintaan tulis yang dapat diterima node klien per detik. Jika jumlah permintaan tulis melebihi ambang batas, sistem akan menolak permintaan.
Nama indeks lengkap dan wildcard untuk nama indeks didukung sebagai nilai tag yang sesuai dengan kunci tag index dan index_patterns. Kode untuk mengonfigurasi pembatasan TPS bervariasi berdasarkan versi aliyun-qos plug-in. Tabel berikut menjelaskan kode yang dapat digunakan untuk versi berbeda.
Kode untuk versi terbaru plug-in yang terpasang pada kluster Elasticsearch V7.10 | Kode untuk plug-in yang terpasang pada kluster Elasticsearch lainnya |
| Tidak didukung |
Konfigurasikan pembatasan untuk volume data yang dapat ditulis per detik untuk semua permintaan bulk
Anda dapat menentukan jumlah total byte yang dapat ditulis untuk semua permintaan bulk guna membatasi jumlah maksimum byte yang dapat diterima node klien per detik. Untuk informasi lebih lanjut tentang permintaan bulk, lihat Bulk API. Jika jumlah byte yang diterima melebihi ambang batas, sistem akan menolak permintaan.
Nama indeks lengkap dan wildcard untuk nama indeks didukung sebagai nilai tag yang sesuai dengan kunci tag index dan index_patterns. Kode untuk mengonfigurasi pembatasan volume data yang dapat ditulis per detik untuk semua permintaan bulk bervariasi berdasarkan versi aliyun-qos plug-in. Tabel berikut menjelaskan kode yang dapat digunakan untuk versi berbeda.
Kode untuk versi terbaru plug-in yang terpasang pada kluster Elasticsearch V7.10 | Kode untuk plug-in yang terpasang pada kluster Elasticsearch lainnya |
| |
Anda dapat menentukan beberapa aturan untuk memicu pembatasan. Jika permintaan memenuhi salah satu aturan, pembatasan dipicu.
Konfigurasikan pembatasan untuk volume data yang dapat ditulis per detik untuk permintaan bulk
Anda dapat menentukan jumlah maksimum byte yang dapat ditulis untuk permintaan bulk tunggal guna membatasi jumlah maksimum byte yang dapat diterima node klien dari permintaan tunggal. Untuk informasi lebih lanjut tentang permintaan bulk, lihat Bulk API. Jika jumlah byte yang diterima dari permintaan tunggal melebihi ambang batas, sistem akan menolak permintaan.
Nama indeks lengkap dan wildcard untuk nama indeks didukung sebagai nilai tag yang sesuai dengan kunci tag index dan index_patterns. Kode untuk mengonfigurasi pembatasan volume data yang dapat ditulis untuk permintaan bulk bervariasi berdasarkan versi aliyun-qos plug-in. Tabel berikut menjelaskan kode yang dapat digunakan untuk versi berbeda.
Kode untuk versi terbaru plug-in yang terpasang pada kluster Elasticsearch V7.10 | Kode untuk plug-in yang terpasang pada kluster Elasticsearch lainnya |
| |
Anda dapat menentukan beberapa aturan untuk memicu pembatasan. Jika permintaan memenuhi salah satu aturan, pembatasan dipicu.
Saat menggunakan klien untuk menulis data atau menulis data di Konsol Kibana kluster Elasticsearch, jika jumlah byte dalam permintaan bulk melebihi ambang batas pembatasan yang dikonfigurasi di aliyun-qos plug-in, sistem melaporkan salah satu pesan kesalahan berikut. Dalam hal ini, Anda harus mengurangi jumlah byte dalam permintaan bulk berdasarkan pesan kesalahan. Pesan kesalahan yang dilaporkan bervariasi berdasarkan versi aliyun-qos plug-in.
Kode untuk versi terbaru plug-in pada kluster 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 }Kode untuk plug-in pada kluster Elasticsearch lainnya
{ "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 }
Konfigurasikan pembatasan untuk jumlah thread konkuren yang digunakan untuk menanyakan jumlah shard utama atau replika
Anda dapat menentukan ambang batas untuk jumlah thread konkuren yang digunakan untuk menanyakan jumlah shard utama atau replika guna mengurangi beban kluster Elasticsearch. Nama indeks lengkap dan wildcard untuk nama indeks didukung sebagai nilai tag yang sesuai dengan kunci tag index dan index_patterns. Kode untuk mengonfigurasi pembatasan jumlah thread konkuren bervariasi berdasarkan versi aliyun-qos plug-in. Tabel berikut menjelaskan kode yang dapat digunakan untuk versi berbeda.
Kode untuk versi terbaru plug-in yang terpasang pada kluster Elasticsearch V7.10 | Kode untuk plug-in yang terpasang pada kluster Elasticsearch lainnya |
| Tidak didukung |
Anda dapat menentukan beberapa aturan untuk memicu pembatasan. Jika permintaan memenuhi salah satu aturan, pembatasan dipicu.
Konfigurasikan beberapa pengaturan sekaligus untuk pembatas
Anda dapat mengonfigurasi beberapa pengaturan sekaligus untuk pembatas. Nama indeks lengkap dan wildcard untuk nama indeks didukung sebagai nilai tag yang sesuai dengan kunci tag index dan index_patterns. Kode untuk mengonfigurasi beberapa pengaturan sekaligus bervariasi berdasarkan versi aliyun-qos plug-in. Tabel berikut menjelaskan kode yang dapat digunakan untuk versi berbeda.
Kode untuk versi terbaru plug-in yang terpasang pada kluster Elasticsearch V7.10 | Kode untuk plug-in yang terpasang pada kluster Elasticsearch lainnya |
| Tidak didukung |
Anda dapat menentukan beberapa aturan untuk memicu pembatasan. Jika permintaan memenuhi salah satu aturan, pembatasan dipicu.
Permintaan pembatas
Kode untuk meminta pembatas bervariasi berdasarkan versi aliyun-qos plug-in. Tabel berikut menjelaskan kode yang dapat digunakan untuk versi berbeda.
Operasi | Kode untuk versi terbaru plug-in yang terpasang pada kluster Elasticsearch V7.10 | Kode untuk plug-in yang terpasang pada kluster Elasticsearch lainnya |
Permintaan semua pembatas | | |
Permintaan pembatas tertentu | | |
Permintaan beberapa pembatas null Pisahkan beberapa nama pembatas dengan koma (,). Wildcard tidak didukung. | | |
Hapus pembatas
Kode untuk menghapus pembatas bervariasi berdasarkan versi aliyun-qos plug-in. Tabel berikut menjelaskan kode yang dapat digunakan untuk versi berbeda.
Operasi | Kode untuk versi terbaru plug-in yang terpasang pada kluster Elasticsearch V7.10 | Kode untuk plug-in yang terpasang pada kluster Elasticsearch lainnya |
Hapus pembatas tertentu | | |
Hapus beberapa pembatas null Pisahkan beberapa nama pembatas dengan koma (,). Wildcard tidak didukung. | | |
FAQ
T: Bagaimana cara mendapatkan data pemantauan metrik terkait pembatasan?
A: Gunakan API berikut:
Dapatkan data pemantauan saat ini
Dapatkan data pemantauan saat ini untuk semua metrik
GET /_qos/limiter/nodes/statsDapatkan data pemantauan saat ini untuk metrik node tertentu
GET /_qos/limiter/nodes/{nodeId}/statsDapatkan data pemantauan saat ini untuk metrik node dan pembatas tertentu
GET /_qos/limiter/nodes/{nodeId}/stats/{limiterIds}
Dapatkan data pemantauan historis
Dapatkan data pemantauan historis untuk semua metrik
GET /_qos/limiter/metricDapatkan data pemantauan historis untuk metrik pembatas tertentu
GET /_qos/limiter/metric/{limiterId}