Я спробую пояснити справжнім прикладом, оскільки відповіді та відповіді, які ви отримали, не допомагають вам.
Завантажуючи еластичний пошук і запускаючи його, ви створюєте вузол еластичного пошуку, який намагається приєднатись до існуючого кластеру, якщо він наявний, або створює новий. Скажімо, ви створили свій власний новий кластер з одним вузлом, тим, що ви тільки що запустили. У нас немає даних, тому нам потрібно створити індекс.
Коли ви створюєте індекс (індекс автоматично створюється і при індексації першого документа), ви можете визначити, з яких частинок буде складено. Якщо ви не вкажете номер, у нього буде за замовчуванням кількість фрагментів: 5 праймерів. Що це означає?
Це означає, що еластичний пошук створить 5 первинних фрагментів, які містять ваші дані:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Кожен раз, коли ви індексуєте документ, еластичний пошук вирішить, який основний фрагмент повинен містити цей документ, і індексуватиме його там. Первинні осколки не є копією даних, це дані! Наявність декількох черепок допомагає скористатися паралельною обробкою на одній машині, але вся справа в тому, що якщо ми запустимо інший еластичний екземпляр на тому самому кластері, осколки будуть розподілятися рівномірно по кластеру.
Тоді вузол 1 вмістить, наприклад, лише три черепки:
____ ____ ____
| 1 | | 2 | | 3 |
|____| |____| |____|
Оскільки решту двох черепків переміщено до нещодавно запущеного вузла:
____ ____
| 4 | | 5 |
|____| |____|
Чому це відбувається? Оскільки elastsesearch - це розподілена пошукова система, і таким чином ви можете використовувати декілька вузлів / машин для управління великими обсягами даних.
Кожен індекс еластичного дослідження складається щонайменше з одного первинного фрагмента, оскільки там зберігаються дані. Кожен осколок витрачається, однак, тому якщо у вас є один вузол і немає передбачуваного зростання, просто дотримуйтесь одного основного осколка.
Ще один тип осколка - це репліка. За замовчуванням - 1, що означає, що кожен основний фрагмент буде скопійований в інший фрагмент, який буде містити ті самі дані. Репліки використовуються для підвищення продуктивності пошуку та для відмови. Штрих реплік ніколи не буде виділятися на тому самому вузлі, де є пов'язаний первинний (це було б майже як розміщення резервної копії на той же диск, що і вихідні дані).
Повернувшись до нашого прикладу, з 1 реплікою у нас буде весь індекс на кожному вузлі, оскільки по першому вузлу буде виділено 2 реплік-фрагменти, і вони будуть містити точно такі ж дані, як і первинні черепки на другому вузлі:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4R | | 5R |
|____| |____| |____| |____| |____|
Те ж саме для другого вузла, який буде містити копію первинних фрагментів на першому вузлі:
____ ____ ____ ____ ____
| 1R | | 2R | | 3R | | 4 | | 5 |
|____| |____| |____| |____| |____|
При такому налаштуванні, якщо вузол опускається, у вас ще є весь індекс. Осколки репліку автоматично стануть праймерізмом, і кластер буде працювати належним чином, незважаючи на вихід з ладу вузла, як це:
____ ____ ____ ____ ____
| 1 | | 2 | | 3 | | 4 | | 5 |
|____| |____| |____| |____| |____|
Оскільки у вас є "number_of_replicas":1
, репліки більше не можна призначати, оскільки вони ніколи не виділяються на тому ж вузлі, де є їх основним. Ось чому у вас буде 5 непризначених фрагментів, репліки та статус кластера YELLOW
замість GREEN
. Без втрати даних, але це може бути краще, оскільки деякі фрагменти не можуть бути призначені.
Як тільки вузол, що залишився, буде створено резервну копію, він знову приєднається до кластеру, і репліки будуть призначені знову. Існуючий фрагмент на другому вузлі може бути завантажений, але їх потрібно синхронізувати з іншими фрагментами, оскільки операції запису, швидше за все, відбувалися під час роботи вузла. Після закінчення цієї операції стане статусом кластера GREEN
.
Сподіваюсь, це пояснить вам речі.