Вступление

Рекомендуется поддерживать размер сегментов от 10 до 50 ГиБ, чтобы найти баланс между наличием слишком большого количества сегментов, вызывающих перегруженный кластер, и наличием больших сегментов, затрудняющих восстановление кластера. В дополнение к этому, поддержание равного размера осколков и количества осколков, кратных узлам, помогло бы с равномерным распределением осколков, уменьшив дисковое пространство и производительность.

разрешение

Количество первичных сегментов индекса можно настроить только во время создания индекса и не может быть изменено впоследствии. Чтобы изменить сегментирование, вам нужно будет создать новый индекс с обновленным сегментированием и использовать API _reindex для копирования всех индексов из существующих индексов в новый индекс.

Для целей этой статьи давайте рассмотрим следующие индексы кластера Elasticsearch.

$ curl -XGET 'http://localhost:9200/_cat/indices?s=index&v=true'
health status index        uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   index-000001 8Dmwh8s-T2Csy8atxzK_8Q   5   1          6            0     32.7kb          9.5kb
green  open   index-000002 SadtrQ8ZRZWMmjhWrRoaUA   5   1          4            0     19.7kb            5kb
green  open   index-000003 wUw8StUKTEKExeaoOKSUEg   5   1          5            0     46.2kb         15.6kb
green  open   index-000004 yPXHeD9nQomucMedA6_Hzg   5   1          6            0     28.3kb         14.1kb
green  open   index-000005 J8aPYx9eRxCPseYvihz-Pg   5   1          8            0     27.7kb         18.5kb

Агрегирование индексов с использованием шаблона индекса

Часто индексы обновляются / создаются ежедневно, чтобы облегчить поиск. Это может привести к тому, что многие осколки также будут небольшого размера. Эти индексы часто имеют шаблон, который можно использовать для агрегирования этих индексов в меньшее количество индексов и, таким образом, уменьшения сегментов. Например, указанные выше индексы имеют шаблон «индекс- *». В таких случаях вы можете создать новый индекс в качестве места назначения агрегирования. Если вы хотите изменить сегментирование (количество первичных сегментов), вам придется сделать то же самое при создании нового индекса, как показано ниже.

$ curl -XPUT 'http://localhost:9200/agg-index-1-10?pretty' -H 'Content-Type: application/json' -d '
> {
>   "settings": {
>     "index": {
>       "number_of_shards": 3,  
>       "number_of_replicas": 1 
>     }
>   }
> }'
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "agg-index-1-10"
}

Затем вы можете использовать _reindex API для копирования всех документов из существующих индексов во вновь созданный индекс.

$ curl -XPOST 'http://localhost:9200/_reindex?wait_for_completion=false&pretty' -H 'Content-Type: application/json' -d '
> {
>   "source": {
>     "index": "index-*"
>   },
>   "dest": {
>     "index": "agg-index-1-10"
>   }
> }'
{
  "task" : "y2N1gjCZTcCUkYXaNTqqzQ:19969987"
}

Вы можете отслеживать вышеуказанную задачу с помощью _tasks API, пока не заметите «завершено»: true.

$ curl -XGET 'http://localhost:9200/_tasks/sFCzlAnzSnya1X07eN3V6w:14282529?pretty'

Затем проверьте, совпадает ли количество документов. В этом случае сумма документов в индексах «index- *» должна быть равна индексу документов «agg-index-1–10».

$ curl -XGET 'http://localhost:9200/_cat/indices?s=index&v=true'
health status index          uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   agg-index-1-10 YhwfRgMbQ8e_AfX9sy2UqQ   3   1         50            0       35kb         17.5kb
green  open   index-000001   8Dmwh8s-T2Csy8atxzK_8Q   5   1         10            0     46.4kb         23.2kb
green  open   index-000002   SadtrQ8ZRZWMmjhWrRoaUA   5   1         10            0     29.7kb         14.8kb
green  open   index-000003   wUw8StUKTEKExeaoOKSUEg   5   1         10            0     55.8kb           25kb
green  open   index-000004   yPXHeD9nQomucMedA6_Hzg   5   1         10            0       38kb           19kb
green  open   index-000005   J8aPYx9eRxCPseYvihz-Pg   5   1         10            0     46.4kb         23.2kb

Как только количество документов совпадает и ваши приложения / конвейеры / службы указывают на новые индексы, вы можете удалить старые индексы следующим образом.

$ curl -XDELETE 'http://localhost:9200/indices-*?pretty'

Агрегирование определенных индексов

Иногда вам может потребоваться агрегировать или уменьшить сегменты определенного набора индексов. В таких случаях вы можете использовать API _reindex следующим образом.

$ curl -XPOST 'http://localhost:9200/_reindex?wait_for_completion=false&pretty' -H 'Content-Type: application/json' -d '
> {
>   "source": {
>     "index": ["index-000001", "index-000002"]
>   },
>   "dest": {
>     "index": "agg-index-1-2"
>   }
> }'
{
  "task" : "y2N1gjCZTcCUkYXaNTqqzQ:19974516"
}

Вы можете отслеживать задачу, как описано выше. Как только вы заметите «завершено»: true в _tasks API. Убедитесь, что количество документов совпадает, и удалите ненужные индексы.

$ curl -XGET 'http://localhost:9200/_cat/indices?s=index&v=true'
health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   agg-index-1-2 DofJgv0FRMiLi5XimLMgnw   5   1         20            0     10.8kb           624b
green  open   index-000001  8Dmwh8s-T2Csy8atxzK_8Q   5   1         10            0     46.4kb         23.2kb
green  open   index-000002  SadtrQ8ZRZWMmjhWrRoaUA   5   1         10            0     29.7kb         14.8kb
green  open   index-000003  wUw8StUKTEKExeaoOKSUEg   5   1         10            0     55.8kb           25kb
green  open   index-000004  yPXHeD9nQomucMedA6_Hzg   5   1         10            0       38kb           19kb
green  open   index-000005  J8aPYx9eRxCPseYvihz-Pg   5   1         10            0     46.4kb         23.2kb

Уменьшение размера сегмента

Иногда размер вашего осколка может быть слишком большим. Это может повлиять на восстановление кластера, поскольку большие осколки затрудняют его. Это также может замедлить сине-зеленые развертывания, которые инициируются при изменении конфигурации в вашем домене Amazon Elasticsearch Service. В этом случае вы можете увеличить количество сегментов для каждого индекса при создании нового индекса, как показано ниже.

$ curl -XPUT 'http://localhost:9200/inc-index-1-2?pretty' -H 'Content-Type: application/json' -d '
> {
>   "settings": {
>     "index": {
>       "number_of_shards": 10,  
>       "number_of_replicas": 1 
>     }
>   }
> }'
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "inc-index-1-2"
}

Затем, как описано выше, используйте _reindex API, чтобы скопировать все документы из существующих в новый индекс.

$ curl -XPOST 'http://localhost:9200/_reindex?wait_for_completion=false&pretty' -H 'Content-Type: application/json' -d '
{
  "source": {
    "index": "agg-index-1-2"
  },
  "dest": {
    "index": "inc-index-1-2"
  }
}'
{
  "task" : "sFCzlAnzSnya1X07eN3V6w:14282529"
}

После завершения задачи вы должны увидеть совпадение количества документов, прежде чем продолжить удаление старого индекса.

$ curl -XGET 'http://localhost:9200/_cat/indices?s=index&v=true'
health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   agg-index-1-2 DofJgv0FRMiLi5XimLMgnw   5   1         20            0     48.8kb         24.4kb
green  open   inc-index-1-2 7d_26FMXSTqPtvfxXVSBcg  10   1         20            0     74.4kb         37.2kb
green  open   index-000001  8Dmwh8s-T2Csy8atxzK_8Q   5   1         10            0     46.4kb         23.2kb
green  open   index-000002  SadtrQ8ZRZWMmjhWrRoaUA   5   1         10            0     29.7kb         14.8kb
green  open   index-000003  wUw8StUKTEKExeaoOKSUEg   5   1         10            0     55.8kb           25kb
green  open   index-000004  yPXHeD9nQomucMedA6_Hzg   5   1         10            0       38kb           19kb
green  open   index-000005  J8aPYx9eRxCPseYvihz-Pg   5   1         10            0     46.4kb         23.2kb

Больше контента на plainenglish.io