Я пытаюсь понять, что такое осколок и реплика в Elasticsearch, но мне не удалось понять это. Если я загружаю Elasticsearch и запускаю скрипт, то из того, что я знаю, я запустил кластер с одним узлом. Теперь этот узел (мой компьютер) имеет 5 осколков (?) И несколько реплик (?).
Что они, у меня есть 5 дубликатов индекса? Если так, то почему? Мне может понадобиться какое-то объяснение.
elasticsearch
full-text-search
Счастливчик Люк
источник
источник
Ответы:
Я попытаюсь объяснить реальным примером, так как ответы и ответы, которые вы получили, похоже, не помогут вам.
Когда вы загружаете и запускаете эластичный поиск, вы создаете узел эластичного поиска, который пытается присоединиться к существующему кластеру, если он доступен, или создает новый. Допустим, вы создали свой новый кластер с одним узлом, который вы только что запустили. У нас нет данных, поэтому нам нужно создать индекс.
Когда вы создаете индекс (индекс создается автоматически и при индексировании первого документа), вы можете определить, из скольких фрагментов он будет составлен. Если вы не укажете число, у него будет количество шардов по умолчанию: 5 основных цветов. Что это означает?
Это означает, чтоasticsearch создаст 5 первичных шардов, которые будут содержать ваши данные:
Каждый раз, когда вы индексируете документ ,asticsearch решает, какой первичный осколок должен содержать этот документ, и будет индексировать его там. Первичные осколки не являются копией данных, они являются данными! Наличие нескольких сегментов помогает использовать преимущества параллельной обработки на одном компьютере, но суть в том, что если мы запустим еще один экземпляр эластичного поиска в том же кластере, то сегменты будут равномерно распределены по кластеру.
Узел 1 будет содержать, например, только три шарда:
Поскольку оставшиеся два шарда были перемещены во вновь запущенный узел:
Почему это происходит? Посколькуasticsearch является распределенной поисковой системой, и таким образом вы можете использовать несколько узлов / машин для управления большими объемами данных.
Каждый индекс эластичного поиска состоит как минимум из одного основного сегмента, поскольку именно там хранятся данные. Однако каждый осколок обходится дорого, поэтому, если у вас один узел и нет ожидаемого роста, просто придерживайтесь одного основного осколка.
Другой тип осколка - это копия. По умолчанию установлено значение 1, что означает, что каждый основной фрагмент будет скопирован в другой фрагмент, который будет содержать те же данные. Реплики используются для повышения производительности поиска и восстановления после отказа. Осколок реплики никогда не будет размещен на том же узле, где находится связанный первичный объект (это было бы почти как размещение резервной копии на том же диске, что и исходные данные).
Возвращаясь к нашему примеру, с 1 репликой у нас будет целый индекс на каждом узле, так как 2 сегмента реплики будут размещены на первом узле, и они будут содержать точно такие же данные, что и основные сегменты на втором узле:
То же самое для второго узла, который будет содержать копию первичных осколков на первом узле:
При такой настройке, если узел выходит из строя, у вас все еще есть весь индекс. Осколки реплики автоматически станут основными, и кластер будет работать правильно, несмотря на сбой узла, следующим образом:
Поскольку у вас есть
"number_of_replicas":1
, реплики больше не могут быть назначены, так как они никогда не размещаются на том же узле, где находится их основной. Вот почему вы будете иметь 5 нераспределенных черепки, реплики и статус кластера будетYELLOW
вместоGREEN
. Без потери данных, но это может быть лучше, так как некоторые шарды не могут быть назначены.Как только оставленный узел будет зарезервирован, он снова присоединится к кластеру, и реплики будут назначены снова. Существующий шард на втором узле может быть загружен, но его необходимо синхронизировать с другими шардами, так как операции записи, скорее всего, происходили, когда узел не работал. В конце этой операции статус кластера станет
GREEN
.Надеюсь, это прояснит вам.
источник
Индекс разбит на осколки, чтобы распределить их и масштабировать.
Реплики являются копиями осколков и обеспечивают надежность в случае потери узла. В этом числе часто встречается путаница, потому что количество реплик == 1 означает, что кластер должен иметь основную и реплицированную копию сегмента, чтобы быть в зеленом состоянии.
Для создания реплик у вас должно быть как минимум 2 узла в кластере.
Вы можете найти определения здесь проще для понимания: http://www.elasticsearch.org/guide/reference/glossary/
С наилучшими пожеланиями, Пол
источник
Если вам действительно не нравится видеть это желтым. Вы можете установить количество реплик равным нулю:
Обратите внимание, что вы должны делать это только в вашей локальной коробке разработки.
источник
осколок:
ElasticSearch
использует концепцию, призваннуюShard
распределять индексные документы по всем узлам.index
Потенциально может хранить большое количество данных , которые могут превысить аппаратные пределыsingle node
Elasticsearch
предоставляется возможность подразделить ваш индекс на несколько частейshards
.shards
что вы хотите.Documents
хранятся вshards
, а осколки выделяютсяnodes
в вашемcluster
cluster
растет или сжимается,Elasticsearch
автоматически будут перемещаться осколки между ними,nodes
чтобыcluster
остатки оставались сбалансированными.primary shard
илиreplica shard
.single primary shard
, поэтому количество имеющихся у вас основных сегментов определяет максимальный объем данных, который может содержать ваш индекс.replica shard
это просто копия первичного осколка.Реплика:
Replica shard
является копиейprimary Shard
, чтобы предотвратить потерю данных в случае аппаратного сбоя.Elasticsearch
позволяет вам сделать одну или несколько копий фрагментов вашего индекса в так называемые фрагменты реплики, илиreplicas
для краткости.index
также может реплицироваться ноль (то есть не реплики) или более раз.number of shards
И реплики могут быть определены для каждого индекса в момент создается индекс.cannot change the number of shards
.Elasticsearch
выделено 5 основных сегментов, и1 replica
это означает, что если в вашем кластере есть как минимум два узла, ваш индекс будет иметь 5 основных сегментов и еще 5 сегментов реплики (1 полная реплика), всего 10 сегментов в каждом. индекс.источник
Индекс разбит на осколки, чтобы распределить их и масштабировать.
Реплики являются копиями осколков.
Узел - это запущенный экземпляр упругого поиска, принадлежащий кластеру.
Кластер состоит из одного или нескольких узлов, которые имеют одинаковое имя кластера. Каждый кластер имеет один главный узел, который автоматически выбирается кластером и который можно заменить в случае сбоя текущего главного узла.
источник
AWS ec2
экземпляра, на каждом из которых установлен эластичный поиск. Значит у нас тут три узла? Если все эти узлы будут иметь одинаковыйcluster.name: test
набор свойств, будет ли оно создавать имя кластера,test
которое будет иметь три узла?Я объясню это, используя сценарии реального слова. Представьте, что вы работаете на сайте электронной коммерции. По мере того, как вы становитесь более популярными, все больше продавцов и товаров добавляются на ваш сайт. Вы поймете, что число продуктов, которые могут понадобиться для индексации, увеличилось, и оно слишком велико для размещения на одном жестком диске одного узла. Даже если он помещается на жесткий диск, линейный поиск по всем документам на одном компьютере выполняется крайне медленно. один индекс на одном узле не будет использовать преимущества конфигурации распределенного кластера, на которой работает эластичный поиск.
Таким образом ,asticsearch разбивает документы в индексе по нескольким узлам в кластере. Каждый раздел документа называется осколком. Каждый узел, несущий осколок документа, будет иметь только подмножество документа. Предположим, у вас есть 100 товаров и 5 осколков, каждый осколок будет иметь 20 товаров. Это разделение данных делает поиск с малой задержкой возможным в эластичном поиске. поиск ведется параллельно на нескольких узлах. Результаты агрегируются и возвращаются. Однако осколки не обеспечивают отказоустойчивости. Это означает, что если какой-либо узел, содержащий осколок, не работает, состояние кластера становится желтым. Это означает, что некоторые данные недоступны.
Для повышения отказоустойчивости реплики входят в рисунок. По умолчанию упругий поиск создает одну реплику каждого осколка. Эти реплики всегда создаются на другом узле, где основной сегмент не находится. Поэтому для обеспечения отказоустойчивости системы может потребоваться увеличить количество узлов в кластере, и это также зависит от количества сегментов вашего индекса. Общая формула для расчета количества узлов, требуемого на основе реплик и сегментов, представляет собой «количество узлов = количество сегментов * (количество реплик + 1)». Стандартная практика заключается в том, чтобы иметь как минимум одну реплику для отказоустойчивости.
Установка количества сегментов является статической операцией, то есть вы должны указать ее при создании индекса. Любое изменение после этого вульфа требует полной переиндексации данных и займет время. Но настройка количества реплик является динамической операцией и может быть выполнена в любое время после создания индекса.
Вы можете установить количество сегментов и реплик для вашего индекса с помощью приведенной ниже команды.
источник
Не ответ, а еще одно упоминание об основных понятиях в ElasticSearch, и я думаю, что они довольно понятны как дополнение к ответу @ javanna.
Осколки
Реплики
источник
В ElasticSearch на верхнем уровне мы индексируем документы в индексы. Каждый индекс имеет количество сегментов, которые распределяют данные внутри, и внутри сегментов существуют сегменты Lucene, которые являются основным хранилищем данных. Таким образом, если в индексе 5 сегментов, это означает, что данные были распределены по сегментам, и в них не существует одинаковых данных.
Следите за видео, которое объясняет ядро ES https://www.youtube.com/watch?v=PpX7J-G2PEo
Статья о нескольких индексах или нескольких сегментах Эластичный поиск, несколько индексов и один индекс и типы для разных наборов данных?
источник
Elasticsearch великолепно масштабируем, при этом вся заслуга его распределенной архитектуры. Это стало возможным благодаря шардингу. Теперь, прежде чем углубляться в это, давайте рассмотрим простой и очень распространенный вариант использования. Предположим, у вас есть индекс, который содержит огромное количество документов, и для простоты рассмотрим, что размер этого индекса равен 1 ТБ (т. Е. Сумма размеров каждого документа в этом индексе равна 1 ТБ). ). Кроме того, предположим, что у вас есть два узла каждый с 512 ГБ пространства, доступного для хранения данных. Как ясно видно, весь наш индекс не может быть сохранен ни в одном из двух доступных узлов, и, следовательно, нам необходимо распределить наш индекс по этим узлам.
В таких случаях, когда размер индекса превышает аппаратные ограничения одного узла, на помощь приходит Sharding . Sharding решает эту проблему, разделяя индексы на более мелкие части, и эти части называются Shards.
источник
Проще говоря,
shard
это не что иное, как часть индекса, который хранится на диске в отдельной папке:Этот снимок экрана показывает весь каталог Elasticsearch.
Как видите, все данные попадают в
data
каталог.При осмотре индекса
C-mAfLltQzuas72iMiIXNw
мы видим , что он имеет пять черепков (папки0
к4
).С другой стороны, у
JH_A8PgCRj-GK0GeQ0limw
индекса есть только один шард (0
папка).Количество
pri
просмотров общего количества осколков.источник