Ответ 1
Немного сначала прояснить терминологию:
- Node: запускается экземпляр Elasticsearch (java-процесс). Обычно каждый node работает на собственной машине.
- Кластер: один или несколько узлов с тем же именем кластера.
- Индекс: более или менее как база данных.
- Тип: более или менее похожий на таблицу базы данных.
- Осколок: эффективно индекс lucene. Каждый индекс состоит из одного или нескольких осколков. Осколок может быть основным осколком (или просто осколком) или репликой.
Когда вы создаете индекс, вы можете указать количество осколков и количество реплик на каждый осколок. По умолчанию используется 5 первичных осколков и 1 реплика на каждый осколок. Осколки автоматически распределяются по кластеру. Осколок с репликой никогда не будет выделен на том же компьютере, где находится связанный с ним первичный осколок.
То, что вы видите в статусе кластера, странно, я бы предложил проверить настройки индекса с помощью получить настройки API. Похоже, вы настроили только один осколок, но в любом случае вы должны увидеть больше осколков, если у вас есть несколько индексов. Если вам нужна дополнительная помощь, вы можете опубликовать вывод, полученный из поиска elastics.
Сколько используемых фрагментов и реплик зависит от ваших данных, способа доступа к ним и количества доступных узлов/серверов. Лучше всего обследовать черепашки, чтобы перераспределить их, если вы добавите больше узлов в ваш кластер, так как вы не можете (на данный момент) изменить количество осколков после создания индекса. В противном случае вы всегда можете изменить количество осколков, если хотите сделать полный пересмотр ваших данных.
Каждый дополнительный осколок приходит со стоимостью, поскольку каждый осколок является фактически экземпляром Lucene. Максимальное количество осколков, которое вы можете иметь на машину, зависит от имеющегося оборудования и ваших данных. Хорошо знать, что наличие 100 индексов с каждым осколком или одним индексом со 100 осколками действительно одинаково, поскольку в обоих случаях у вас будет 100 экземпляров lucene.
Конечно, во время запроса, если вы хотите запросить один индекс elasticsearch, состоящий из 100 фрагментов, elasticsearch должен будет запросить их все, чтобы получить правильные результаты (если вы не использовали определенную маршрутизацию для своих документов, чтобы затем запрашивать только конкретную осколок). Это будет иметь производительность.
Вы можете легко проверить состояние своего кластера и узлов с помощью API-интерфейсов узлов кластера, посредством которого вы можете проверить много полезной информации, все, что вам нужно, чтобы узнать, работают ли ваши узлы плавно или нет. Еще проще, есть пара плагинов для проверки этой информации через хороший пользовательский интерфейс (который в любом случае использует API-интерфейс elasticsearch): paramedic и bigdesk.