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:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
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:
____ ____ ____
| 1 | | 2 | | 3 |
|____| |____| |____|
Karena dua pecahan yang tersisa telah dipindahkan ke simpul yang baru dimulai:
____ ____
| 4 | | 5 |
|____| |____|
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:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4R | | 5R |
|____| |____| |____| |____| |____|
Sama untuk simpul kedua, yang akan berisi salinan pecahan utama pada simpul pertama:
____ ____ ____ ____ ____
| 1R | | 2R | | 3R | | 4 | | 5 |
|____| |____| |____| |____| |____|
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:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
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 gugusnya YELLOW
bukan GREEN
. 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.