Saya mencoba memahami apa itu shard dan replika di Elasticsearch, tetapi saya tidak berhasil memahaminya. Jika saya mengunduh Elasticsearch dan menjalankan skrip, maka dari apa yang saya tahu saya telah memulai sebuah cluster dengan satu node. Sekarang node ini (PC saya) memiliki 5 pecahan (?) Dan beberapa replika (?).
Apa mereka, apakah saya memiliki 5 duplikat indeks? Jika demikian mengapa? Saya perlu penjelasan.
elasticsearch
full-text-search
Luke yang beruntung
sumber
sumber
Jawaban:
Saya akan mencoba menjelaskan dengan contoh nyata karena jawaban dan balasan yang Anda miliki sepertinya tidak membantu Anda.
Ketika Anda mengunduh elasticsearch dan memulainya, Anda membuat simpul elasticsearch yang mencoba untuk bergabung dengan kluster yang ada jika tersedia atau membuat yang baru. Katakanlah Anda membuat cluster baru Anda sendiri dengan satu simpul, yang baru saja Anda mulai. Kami tidak memiliki data, oleh karena itu kami perlu membuat indeks.
Ketika Anda membuat indeks (indeks secara otomatis dibuat saat Anda mengindeks dokumen pertama juga) Anda dapat menentukan berapa banyak pecahan itu akan terdiri dari. Jika Anda tidak menentukan nomor, nomor itu akan memiliki jumlah standar pecahan: 5 primer. Apa artinya?
Ini berarti elasticsearch akan membuat 5 pecahan utama yang akan berisi data Anda:
Setiap kali Anda mengindeks dokumen, elasticsearch akan memutuskan pecahan utama mana yang seharusnya menyimpan dokumen itu dan akan mengindeksnya di sana. Pecahan primer bukan salinan data, melainkan data! Memiliki banyak pecahan memang membantu mengambil keuntungan dari pemrosesan paralel pada satu mesin, tetapi intinya adalah bahwa jika kita memulai contoh elasticsearch lain pada kluster yang sama, pecahan akan didistribusikan secara merata di atas kluster.
Node 1 kemudian akan menampung misalnya hanya tiga pecahan:
Karena dua pecahan yang tersisa telah dipindahkan ke simpul yang baru dimulai:
Mengapa ini terjadi? Karena elasticsearch adalah mesin pencari terdistribusi dan dengan cara ini Anda dapat menggunakan beberapa node / mesin untuk mengelola data dalam jumlah besar.
Setiap indeks elasticsearch terdiri dari setidaknya satu beling primer karena di situlah data disimpan. Namun, setiap beling berharga mahal, jadi jika Anda memiliki satu simpul dan tidak ada pertumbuhan yang dapat diperkirakan, tetap gunakan beling primer tunggal.
Jenis beling lain adalah replika. Standarnya adalah 1, artinya setiap pecahan primer akan disalin ke pecahan lain yang akan berisi data yang sama. Replika digunakan untuk meningkatkan kinerja pencarian dan untuk kegagalan. Sebuah replika shard tidak akan pernah dialokasikan pada simpul yang sama di mana primer terkait adalah (itu akan seperti meletakkan cadangan pada disk yang sama dengan data asli).
Kembali ke contoh kita, dengan 1 replika kita akan memiliki seluruh indeks pada setiap simpul, karena 2 pecahan replika akan dialokasikan pada simpul pertama dan mereka akan berisi data yang persis sama dengan pecahan utama pada simpul kedua:
Sama untuk simpul kedua, yang akan berisi salinan pecahan utama pada simpul pertama:
Dengan pengaturan seperti ini, jika sebuah simpul turun, Anda masih memiliki seluruh indeks. Pecahan replika akan secara otomatis menjadi pendahuluan dan cluster akan berfungsi dengan baik meskipun simpul gagal, sebagai berikut:
Karena sudah
"number_of_replicas":1
, replika tidak dapat ditetapkan lagi karena tidak pernah dialokasikan pada simpul yang sama di mana primernya. Itu sebabnya Anda akan memiliki 5 pecahan yang tidak ditetapkan, replika, dan status gugusnyaYELLOW
bukanGREEN
. Tidak ada kehilangan data, tetapi bisa lebih baik karena beberapa pecahan tidak dapat ditugaskan.Segera setelah simpul yang tersisa dicadangkan, itu akan bergabung dengan gugus lagi dan replika akan ditugaskan lagi. Shard yang ada pada node kedua dapat dimuat tetapi mereka harus disinkronkan dengan shard lainnya, karena operasi penulisan kemungkinan besar terjadi saat node sedang down. Pada akhir operasi ini, status cluster akan menjadi
GREEN
.Semoga ini menjelaskan hal-hal untuk Anda.
sumber
Indeks dipecah menjadi pecahan untuk mendistribusikan dan skala.
Replika adalah salinan pecahan dan memberikan keandalan jika sebuah simpul hilang. Sering ada kebingungan dalam angka ini karena jumlah replika == 1 berarti cluster harus memiliki salinan utama dan salinan beling yang tersedia untuk berada dalam keadaan hijau.
Agar replika dibuat, Anda harus memiliki setidaknya 2 node di cluster Anda.
Anda dapat menemukan definisi di sini lebih mudah untuk dipahami: http://www.elasticsearch.org/guide/reference/glossary/
Salam, Paul
sumber
Jika Anda benar-benar tidak suka melihatnya berwarna kuning. Anda dapat mengatur jumlah replika menjadi nol:
Perhatikan bahwa Anda harus melakukan ini hanya pada kotak pengembangan lokal Anda.
sumber
Beling:
ElasticSearch
menggunakan konsep yang disebutShard
untuk mendistribusikan dokumen indeks di semua node.index
berpotensi menyimpan sejumlah besar data yang dapat melebihi batas perangkat keras asingle node
Elasticsearch
berikan kemampuan untuk membagi indeks Anda menjadi beberapa bagian yang disebutshards
.shards
yang Anda inginkan.Documents
disimpan dishards
, dan pecahan dialokasikan kenodes
dalam Andacluster
cluster
tumbuh atau menyusut,Elasticsearch
secara otomatis akan memigrasi pecahan antaranodes
sehinggacluster
tetap seimbang.primary shard
atau areplica shard
.single primary shard
, sehingga jumlah pecahan utama yang Anda miliki menentukan jumlah maksimum data yang dapat disimpan oleh indeks Andareplica shard
hanyalah salinan pecahan utama.Replika:
Replica shard
adalah salinan dariprimary Shard
, untuk mencegah kehilangan data jika terjadi kegagalan perangkat keras.Elasticsearch
memungkinkan Anda untuk membuat satu atau lebih salinan pecahan indeks Anda menjadi apa yang disebut pecahan replika, ataureplicas
singkatnya.index
juga dapat direplikasi nol (artinya tidak ada replika) kali atau lebih.number of shards
dan replika dapat didefinisikan per indeks pada saat indeks dibuat.cannot change the number of shards
setelahnya.Elasticsearch
dialokasikan 5 pecahan utama dan1 replica
yang berarti bahwa jika Anda memiliki setidaknya dua node di cluster Anda, indeks Anda akan memiliki 5 pecahan primer dan 5 pecahan replika lainnya (1 replika lengkap) dengan total 10 pecahan per indeks.sumber
Indeks dipecah menjadi pecahan untuk mendistribusikan dan skala.
Replika adalah salinan pecahan.
Node adalah instance pencarian elastis yang dimiliki oleh sebuah cluster.
Cluster terdiri dari satu atau lebih node yang memiliki nama cluster yang sama. Setiap cluster memiliki satu master node yang dipilih secara otomatis oleh cluster dan yang bisa diganti jika master node saat ini gagal.
sumber
AWS ec2
contoh, masing-masing memiliki elasticsearch diinstal di atasnya. Berarti kita punya tiga simpul di sini? Jika semua node ini memilikicluster.name: test
set properti yang sama , apakah akan membuat nama Clustertest
yang akan memiliki tiga node?Saya akan menjelaskan ini menggunakan skenario kata nyata. Bayangkan Anda menjalankan situs web e-niaga. Ketika Anda menjadi lebih populer, semakin banyak penjual dan produk yang ditambahkan ke situs web Anda. Anda akan menyadari bahwa jumlah produk yang perlu Anda indeks telah bertambah dan terlalu besar untuk dimasukkan ke dalam satu hard disk dari satu simpul. Bahkan jika itu cocok dengan hard disk, melakukan pencarian linear melalui semua dokumen dalam satu mesin sangat lambat. satu indeks pada satu node tidak akan mengambil keuntungan dari konfigurasi cluster terdistribusi di mana elasticsearch bekerja.
Jadi elasticsearch membagi dokumen dalam indeks di beberapa node dalam cluster. Masing-masing dan setiap bagian dokumen disebut pecahan. Setiap node yang membawa pecahan dokumen hanya akan memiliki sebagian dari dokumen tersebut. misalkan Anda memiliki 100 produk dan 5 pecahan, setiap pecahan akan memiliki 20 produk. Pecahan data inilah yang memungkinkan pencarian latensi rendah dimungkinkan dalam elasticsearch. pencarian dilakukan paralel pada banyak node. Hasil dikumpulkan dan dikembalikan. Namun pecahan tidak memberikan toleransi kesalahan. Berarti jika ada simpul yang mengandung pecahan, kesehatan cluster menjadi kuning. Berarti beberapa data tidak tersedia.
Untuk meningkatkan replika toleransi kesalahan datanglah ke gambar. Dengan membatalkan pencarian elastis menciptakan replika tunggal dari setiap pecahan. Replika ini selalu dibuat pada node lain di mana shard utama tidak berada. Jadi untuk membuat sistem toleran terhadap kesalahan, Anda mungkin harus meningkatkan jumlah node di cluster Anda dan itu juga tergantung pada jumlah pecahan indeks Anda. Rumus umum untuk menghitung jumlah node yang diperlukan berdasarkan replika dan pecahan adalah "jumlah node = jumlah pecahan * (jumlah replika + 1)". Praktik standar adalah memiliki setidaknya satu replika untuk toleransi kesalahan.
Menyiapkan jumlah pecahan adalah operasi statis, artinya Anda harus menentukannya saat membuat indeks. Setiap perubahan setelah itu akan memerlukan pengindeksan ulang data secara lengkap dan akan memakan waktu. Tetapi, pengaturan jumlah replika adalah operasi yang dinamis dan dapat dilakukan kapan saja setelah pembuatan indeks juga.
Anda dapat mengatur jumlah pecahan dan replika untuk indeks Anda dengan perintah di bawah ini.
sumber
Bukan jawaban tetapi referensi lain untuk konsep inti ke ElasticSearch, dan saya pikir mereka cukup jelas sebagai pujian untuk jawaban @ javanna.
Pecahan
Replika
sumber
Di ElasticSearch, di tingkat teratas kami mengindeks dokumen menjadi indeks. Setiap indeks memiliki jumlah pecahan yang secara internal mendistribusikan data dan di dalam pecahan ada segmen Lucene yang merupakan penyimpanan inti data. Jadi jika indeks memiliki 5 pecahan itu berarti data telah didistribusikan di seluruh pecahan dan tidak ada data yang sama ke dalam pecahan.
Tonton video yang menjelaskan inti ES https://www.youtube.com/watch?v=PpX7J-G2PEo
Artikel tentang beberapa indeks atau beberapa pecahan Pencarian elastis, beberapa indeks vs satu indeks, dan jenis untuk kumpulan data yang berbeda?
sumber
Elasticsearch memiliki skalabel yang luar biasa dengan semua kredit digunakan untuk arsitektur terdistribusi. Hal ini dimungkinkan karena Sharding. Sekarang, sebelum melangkah lebih jauh ke dalamnya, mari kita pertimbangkan kasus penggunaan yang sederhana dan sangat umum. Mari kita anggap, Anda memiliki indeks yang berisi banyak sekali dokumen, dan demi kesederhanaan, pertimbangkan bahwa ukuran indeks itu adalah 1 TB (yaitu, Jumlah ukuran masing-masing dan setiap dokumen dalam indeks itu adalah 1 TB ). Juga, asumsikan bahwa Anda memiliki dua Node masing-masing dengan 512 GB ruang yang tersedia untuk menyimpan data. Seperti dapat dilihat dengan jelas, seluruh indeks kami tidak dapat disimpan di salah satu dari dua simpul yang tersedia dan karenanya kami perlu mendistribusikan indeks kami di antara simpul-simpul ini.
Dalam kasus seperti ini di mana ukuran indeks melebihi batas perangkat keras dari satu node, Sharding datang untuk menyelamatkan. Sharding memecahkan masalah ini dengan membagi indeks menjadi potongan-potongan kecil dan potongan-potongan ini dinamai Shard.
sumber
Dalam istilah yang paling sederhana,
shard
ini hanyalah bagian dari indeks yang disimpan pada disk di dalam folder yang terpisah:Tangkapan layar ini menunjukkan seluruh direktori Elasticsearch.
Seperti yang Anda lihat, semua data masuk ke
data
direktori.Dengan memeriksa indeks
C-mAfLltQzuas72iMiIXNw
kita melihat bahwa ia memiliki lima pecahan (folder0
untuk4
).Di sisi lain,
JH_A8PgCRj-GK0GeQ0limw
indeks hanya memiliki satu shard (0
folder).The
pri
memandang jumlah pecahan.sumber