Как работает команда «Удалить индекс» внутри ES? - PullRequest
1 голос
/ 18 апреля 2020

Как работает команда «Удалить индекс» внутри ES?

Есть ли риски при использовании команды «Удалить индекс» в работающем кластере ES? Эта команда будет стоить слишком много ресурсов процессора или памяти?

1 Ответ

2 голосов
/ 18 апреля 2020

Удаление индексов обычно происходит довольно быстро, и Elasticsearch фактически не удаляет все документы, когда отправляет ответ об успешном выполнении запроса на удаление индексов.

Elasticsearch в основном обновляет состояние кластера (поддерживается на всех узлах кластера), чтобы пометить индексы как удаленные, и при его обновлении выполняется значительная тяжелая работа, а также некоторые другие вещи, такие как таблица маршрутизации, метаданные и т. д. c.

this является основным методом в исходном коде Elaticsearch, который поможет вам понять то, что я упомянул выше, и внутреннюю часть индекса удаления.

Некоторые важные фрагменты кода из приведенной выше ссылки

RoutingTable.Builder routingTableBuilder = RoutingTable.builder(currentState.routingTable());
        Metadata.Builder metadataBuilder = Metadata.builder(meta);
        ClusterBlocks.Builder clusterBlocksBuilder = ClusterBlocks.builder().blocks(currentState.blocks());

        final IndexGraveyard.Builder graveyardBuilder = IndexGraveyard.builder(metadataBuilder.indexGraveyard());
        final int previousGraveyardSize = graveyardBuilder.tombstones().size();
        for (final Index index : indices) {
            String indexName = index.getName();
            logger.info("{} deleting index", index);
            routingTableBuilder.remove(indexName);
            clusterBlocksBuilder.removeIndexBlocks(indexName);
            metadataBuilder.remove(indexName);
        }
        // add tombstones to the cluster state for each deleted index
        final IndexGraveyard currentGraveyard = graveyardBuilder.addTombstones(indices).build(settings);
        metadataBuilder.indexGraveyard(currentGraveyard); // the new graveyard set on the metadata
        logger.trace("{} tombstones purged from the cluster state. Previous tombstone size: {}. Current tombstone size: {}.",
            graveyardBuilder.getNumPurged(), previousGraveyardSize, currentGraveyard.getTombstones().size());

Возвращаясь к вашему вопросу: есть ли риски при использовании команды «удаление индекса» в работающем кластере ES? будет ли эта команда стоить слишком много ресурсов процессора или памяти?

Нет, нет риска использовать запрос delete index на работающем кластере Elasticsearch, если у вас нет огромного состояния кластера и, как уже упоминалось, на самом деле происходит удаление индексов. asyn c, и это просто обновляет различные состояния и флаги, он не слишком загружает процессор.

Вы также можете включить журнал трассировки в org.elasticsearch.cluster.metadata.MetadataDeleteIndexService и посмотреть, насколько велик размер вашего кластера по мере его регистрации. в приведенном выше фрагменте кода.

...