Осколки и реплики в Elasticsearch
Я пытаюсь понять, что такое осколок и реплика в Elasticsearch, но мне не удается это понять. Если я загружаю Elasticsearch и запускаю скрипт, то из того, что я знаю, я запустил кластер с одним узлом. Теперь этот узел (мой компьютер) имеет 5 осколков (?) и некоторые реплики (?).
что они, у меня есть 5 дубликатов индекса? Если да, то почему? Мне может понадобиться какое-то объяснение.
7 ответов:
я попытаюсь объяснить с реальным примером, так как ответ и ответы, которые вы получили, похоже, не помогают вам.
когда вы загружаете elasticsearch и запускаете его, вы создаете узел elasticsearch, который пытается присоединиться к существующему кластеру, если он доступен, или создает новый. Допустим, вы создали свой собственный новый кластер с одним узлом, который вы запустили. У нас нет данных, поэтому нам нужно создать индекс.
при создании индекса (индекса автоматически создается при индексировании первого документа, а также) вы можете определить, сколько осколков он будет состоять из. Если вы не укажете номер, он будет иметь количество осколков по умолчанию: 5 праймериз. Что это значит?
это означает, что elasticsearch создаст 5 первичных осколков, которые будут содержать ваши данные:
____ ____ ____ ____ ____ | 1 | | 2 | | 3 | | 4 | | 5 | |____| |____| |____| |____| |____|
каждый раз, когда вы индексируете документ elasticsearch будет решать, какой первичный сегмент должен содержать этот документ и будет индексировать его там. Первичные осколки не являются копией данных, они являются данными! Наличие нескольких сегментов помогает использовать преимущества параллельной обработки на одной машине, но все дело в том, что если мы запустим другой экземпляр elasticsearch в том же кластере, сегменты будут распределены по кластеру равномерно.
узел 1 будет содержать, например, только три осколка:
____ ____ ____ | 1 | | 2 | | 3 | |____| |____| |____|
так как оставшиеся два осколка были перемещены в недавно запущенный узел:
____ ____ | 4 | | 5 | |____| |____|
почему это происходит? Поскольку elasticsearch является распределенной поисковой системой, и таким образом вы можете использовать несколько узлов/машин для управления большими объемами данных.
каждый индекс elasticsearch состоит по крайней мере из одного первичного осколка, так как именно там хранятся данные. Однако каждый осколок имеет свою цену, поэтому, если у вас есть один узел и нет прогнозируемого роста, просто придерживайтесь одного первичного осколка.
другой тип осколок-это копия. Значение по умолчанию равно 1, Что означает, что каждый первичный сегмент будет скопирован в другой сегмент, который будет содержать те же данные. Реплики используются для повышения производительности поиска и при сбое. Сегмент реплики никогда не будет выделен на том же узле, где находится связанный первичный (это было бы похоже на размещение резервной копии на том же диске, что и исходные данные).
вернемся к нашему примеру, с 1 репликой мы будем иметь весь индекс на каждом узле, так как 3 реплики осколки будут выделены на первом узле, и они будут содержать точно такие же данные, как и праймериз на втором узле:
____ ____ ____ ____ ____ | 1 | | 2 | | 3 | | 4R | | 5R | |____| |____| |____| |____| |____|
то же самое для второго узла, который будет содержать копию первичных осколков на первом узле:
____ ____ ____ ____ ____ | 1R | | 2R | | 3R | | 4 | | 5 | |____| |____| |____| |____| |____|
при такой настройке, если узел идет вниз, у вас все еще есть весь индекс. Сегменты реплики автоматически станут первичными, и кластер будет работать правильно, несмотря на сбой узла, так как следует:
____ ____ ____ ____ ____ | 1 | | 2 | | 3 | | 4 | | 5 | |____| |____| |____| |____| |____|
так как у вас есть
"number_of_replicas":1
реплики не могут быть назначены, так как они не выделяются на том же узле, где их основной. Вот почему у вас будет 5 неназначенных осколков, реплики и статус кластера будетYELLOW
вместоGREEN
. Без потери данных, но это может быть лучше, так как некоторые осколки не могут быть назначены.как только оставшийся узел будет восстановлен, он снова присоединится к кластеру, и реплики будут назначены снова. Существующий сегмент на втором узле может быть загружен, но они должны быть синхронизированы с другими сегментами, так как операции записи, скорее всего, произошли во время работы узла. В конце этой операции, состояние кластера станет
GREEN
.надеюсь, что это проясняет вещи для вас.
Если вам действительно не нравится видеть его желтым. вы можете установить количество реплик равным нулю:
curl -XPUT 'localhost:9200/_settings' -d ' { "index" : { "number_of_replicas" : 0 } } '
обратите внимание, что вы должны сделать это только на местном поле развития.
индекс разбивается на осколки, чтобы распределить их и масштабировать.
реплики являются копиями осколков и обеспечивают надежность в случае потери узла. Часто возникает путаница в этом числе, потому что Replica count == 1 означает, что кластер должен иметь основную и реплицированную копию осколка, доступную для зеленого состояния.
в порядке реплики должны быть созданы, вы должны иметь по крайней мере 2 узла в кластере.
вы можете найти определения здесь проще понять: http://www.elasticsearch.org/guide/reference/glossary/
С Наилучшими Пожеланиями, Пол
индекс разбивается на осколки, чтобы распределить их и масштабировать.
реплики-это копии осколков.
узел-это запущенный экземпляр эластичного поиска, который принадлежит кластеру.
кластер состоит из одного или нескольких узлов, которые имеют одно и то же имя кластера. Каждый кластер имеет один главный узел, который выбирается кластером автоматически и который может быть заменен в случае сбоя текущего главного узла.
осколок:
- будучи распределенным сервером поиска,
ElasticSearch
использует понятиеShard
для распределения индексных документов по всем узлам.- An
index
потенциально могут хранить большое количество данных, которые могут превышать пределов оборудованиеsingle node
- например, один индекс из миллиарда документов, занимающих 1 ТБ дисковое пространство может не поместиться на диске одного узла или может быть слишком медленное обслуживание поисковых запросов от a только один узел.
- чтобы решить эту проблему,
Elasticsearch
обеспечивает возможность разделите свой индекс на несколько частей под названиемshards
.- при создании индекса, вы можете просто определить количество
shards
что вы хотите.Documents
хранящиеся вshards
, а осколки выделяются вnodes
in вашcluster
- в своем
cluster
растет или сжимается,Elasticsearch
автоматически перенос осколков междуnodes
так чтоcluster
остается сбалансированным.- осколок может быть либо
primary shard
илиreplica shard
.- каждый документ в вашем индексе принадлежит
single primary shard
, так количество первичных осколков, которые у вас есть, определяет максимум объем данных, который может содержать ваш индекс- A
replica shard
- это просто копия основного черепка.реплика:
Replica shard
- копияprimary Shard
, чтобы предотвратить потерю данных в случае аппаратный сбой.Elasticsearch
позволяет сделать одну или несколько копий вашего индекса осколки в то, что называется реплики осколков, илиreplicas
для краткости.- An
index
также может быть реплицирован ноль (что означает отсутствие реплик) или больше раз.- The
number of shards
и реплики можно определить в индекс на время создания индекса.- после создания индекса, вы можете изменить количество реплик динамически в любое время, но вы
cannot change the number of shards
после факта.- по умолчанию, каждый индекс в
Elasticsearch
выделяется 5 первичных осколков и1 replica
это означает, что если у вас есть по крайней мере два узла в вашем кластере ваш индекс будет иметь 5 первичных осколков и еще 5 реплики осколков (1 полная реплика) в общей сложности 10 осколков в каждом индекс.
в ElasticSearch, на верхнем уровне мы индексируем документы в индексы. Каждый индекс имеет количество сегментов, которые внутренне распределяют данные, а внутри сегментов существуют сегменты Lucene, которые являются основным хранилищем данных. Поэтому, если индекс имеет 5 осколков, это означает, что данные были распределены по осколкам, а не одни и те же данные существуют в осколках.
следите за видео, которое объясняет ядро КС https://www.youtube.com/watch?v=PpX7J-G2PEo
статья о нескольких индексах или нескольких осколках эластичный Поиск, несколько индексов против одного индекса и типов для разных наборов данных?
я объясню это, используя реальные сценарии слов. Представьте, что вы работаете на веб-сайте электронной коммерции. По мере того, как вы становитесь все более популярными, все больше продавцов и продуктов добавляются на ваш сайт. Вы поймете, что количество продуктов, которые вам могут понадобиться для индексирования, выросло, и оно слишком велико, чтобы поместиться на одном жестком диске одного узла. Даже если он помещается на жесткий диск, выполнение линейного поиска по всем документам на одной машине чрезвычайно медленно. один индекс на одном узле не будет использовать преимущества распределенного конфигурация кластера, на котором работает elasticsearch.
таким образом, elasticsearch разбивает документы в индексе на несколько узлов в кластере. Каждый раздел документа называется осколком. Каждый узел, несущий сегмент документа, будет иметь только подмножество документа. предположим, у вас есть 100 продуктов и 5 осколков, каждый осколок будет иметь 20 продуктов. Этот сегмент данных-это то, что делает возможным поиск с низкой задержкой в elasticsearch. поиск ведется параллельно по несколько узлов. Результаты агрегируются и возвращаются. Однако осколки не обеспечивают отказоустойчивость. Это означает, что если какой-либо узел, содержащий осколок, не работает, состояние кластера становится желтым. Это означает, что некоторые данные недоступны.
для увеличения отказоустойчивости реплики приходят в изображение. По deault elastic search создается одна реплика каждого осколка. Эти реплики всегда создаются на другом узле, где первичный сегмент не находится. Так сделать недостаток системы возможно, вам придется увеличить количество узлов в вашем кластере, а также это зависит от количества сегментов вашего индекса. Общая формула для вычисления необходимого количества узлов на основе реплик и сегментов - "число узлов = число сегментов*(число реплик + 1)".Стандартная практика состоит в том, чтобы иметь по крайней мере одну реплику для отказоустойчивости.
настройка количества осколков является статической операцией, то есть вы должны указать его при создании индекс. Любое изменение после этого потребует полной переиндексации данных и займет некоторое время. Но настройка количества реплик является динамической операцией и может быть выполнена в любое время после создания индекса.
вы можете настроить количество сегментов и реплик для вашего индекса с помощью следующей команды.
curl -XPUT 'localhost:9200/sampleindex?pretty' -H 'Content-Type: application/json' -d ' { "settings":{ "number_of_shards":2, "number_of_replicas":1 } } '