Вступление
Рекомендуется поддерживать размер сегментов от 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