> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Разделение хранилища и вычислительных ресурсов

> В этом руководстве рассматривается, как использовать ClickHouse и S3 для реализации архитектуры с разделением хранилища и вычислительных ресурсов.

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<div id="overview">
  ## Обзор
</div>

В этом руководстве рассматривается, как использовать ClickHouse и S3 для реализации архитектуры с раздельными хранилищем и вычислительными ресурсами.

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

Использование ClickHouse с S3 в качестве хранилища особенно полезно в сценариях, где производительность запросов к «холодным» данным менее критична. ClickHouse поддерживает использование S3 в качестве хранилища для движка `MergeTree` с помощью `S3BackedMergeTree`. Этот движок таблицы позволяет воспользоваться преимуществами S3 в плане масштабируемости и снижения затрат, сохраняя при этом производительность вставки и запросов движка `MergeTree`.

Обратите внимание: реализация и сопровождение архитектуры с раздельными хранилищем и вычислительными ресурсами сложнее, чем стандартные развертывания ClickHouse. Хотя самоуправляемый ClickHouse позволяет разделять хранилище и вычисления, как описано в этом руководстве, мы рекомендуем использовать [ClickHouse Cloud](https://clickhouse.com/cloud), который позволяет использовать ClickHouse в такой архитектуре без дополнительной настройки с помощью [движка таблицы `SharedMergeTree`](/docs/ru/products/cloud/features/infrastructure/shared-merge-tree).

*Это руководство предполагает, что вы используете ClickHouse версии 22.8 или выше.*

<Warning>
  Не настраивайте никаких политик жизненного цикла AWS/GCS. Это не поддерживается и может привести к повреждению таблиц.
</Warning>

<Steps>
  <Step title="Использование S3 как диска ClickHouse" id="1-use-s3-as-a-clickhouse-disk">
    ### Создание диска

    Создайте новый файл в каталоге ClickHouse `config.d`, чтобы сохранить конфигурацию хранилища:

    ```bash theme={null}
    vim /etc/clickhouse-server/config.d/storage_config.xml
    ```

    Скопируйте следующий XML во вновь созданный файл, заменив `BUCKET`, `ACCESS_KEY_ID`, `SECRET_ACCESS_KEY` на параметры AWS-бакета, в котором вы хотите хранить данные:

    ```xml theme={null}
    <clickhouse>
      <storage_configuration>
        <disks>
          <s3_disk>
            <type>s3</type>
            <endpoint>$BUCKET</endpoint>
            <access_key_id>$ACCESS_KEY_ID</access_key_id>
            <secret_access_key>$SECRET_ACCESS_KEY</secret_access_key>
            <metadata_path>/var/lib/clickhouse/disks/s3_disk/</metadata_path>
          </s3_disk>
          <s3_cache>
            <type>cache</type>
            <disk>s3_disk</disk>
            <path>/var/lib/clickhouse/disks/s3_cache/</path>
            <max_size>10Gi</max_size>
          </s3_cache>
        </disks>
        <policies>
          <s3_main>
            <volumes>
              <main>
                <disk>s3_disk</disk>
              </main>
            </volumes>
          </s3_main>
        </policies>
      </storage_configuration>
    </clickhouse>
    ```

    Если вам нужно дополнительно настроить диск S3 — например, указать `region` или отправить пользовательский HTTP-`header`, — список соответствующих параметров можно найти [здесь](/docs/ru/reference/engines/table-engines/mergetree-family/mergetree#table_engine-mergetree-s3).

    Вы также можете заменить `access_key_id` и `secret_access_key` следующими значениями — в этом случае система попытается получить учетные данные из переменных окружения и метаданных Amazon EC2:

    ```bash theme={null}
    <use_environment_credentials>true</use_environment_credentials>
    ```

    После создания файла конфигурации необходимо изменить владельца и группу файла на пользователя и группу clickhouse:

    ```bash theme={null}
    chown clickhouse:clickhouse /etc/clickhouse-server/config.d/storage_config.xml
    ```

    Теперь можно перезапустить сервер ClickHouse, чтобы изменения применились:

    ```bash theme={null}
    service clickhouse-server restart
    ```
  </Step>

  <Step title="Создайте таблицу на базе S3" id="2-create-a-table-backed-by-s3">
    Чтобы проверить, что S3-диск настроен правильно, можно попробовать создать таблицу и выполнить запрос к ней.

    Создайте таблицу, указав новую storage policy:

    ```sql theme={null}
    CREATE TABLE my_s3_table
      (
        `id` UInt64,
        `column1` String
      )
    ENGINE = MergeTree
    ORDER BY id
    SETTINGS storage_policy = 's3_main';
    ```

    Обратите внимание, что нам не пришлось указывать движок как `S3BackedMergeTree`. ClickHouse автоматически преобразует тип движка внутри системы, если обнаруживает, что таблица использует S3 в качестве хранилища.

    Покажем, что таблица была создана с правильной политикой:

    ```sql theme={null}
    SHOW CREATE TABLE my_s3_table;
    ```

    Должен отобразиться следующий результат:

    ```response theme={null}
    ┌─statement────────────────────────────────────────────────────
    │ CREATE TABLE default.my_s3_table
    (
      `id` UInt64,
      `column1` String
    )
    ENGINE = MergeTree
    ORDER BY id
    SETTINGS storage_policy = 's3_main', index_granularity = 8192
    └──────────────────────────────────────────────────────────────
    ```

    Теперь вставим несколько строк в нашу новую таблицу:

    ```sql theme={null}
    INSERT INTO my_s3_table (id, column1)
      VALUES (1, 'abc'), (2, 'xyz');
    ```

    Давайте убедимся, что строки были вставлены:

    ```sql theme={null}
    SELECT * FROM my_s3_table;
    ```

    ```response theme={null}
    ┌─id─┬─column1─┐
    │  1 │ abc     │
    │  2 │ xyz     │
    └────┴─────────┘

    2 rows in set. Elapsed: 0.284 sec.
    ```

    В консоли AWS, если данные были успешно записаны в S3, вы должны увидеть, что ClickHouse создал новые файлы в указанном вами бакете.

    Если всё сработало успешно, теперь вы используете ClickHouse с разделением хранилища и вычислительных ресурсов!

    <Image img="https://mintcdn.com/private-7c7dfe99/k4wNHsd_gyvah7Fr/images/guides/s3_bucket_example.webp?fit=max&auto=format&n=k4wNHsd_gyvah7Fr&q=85&s=5125bc42e40bfb41790536f985463ff6" size="md" alt="Пример S3 бакета с использованием разделения вычислительных ресурсов и хранилища" border width="1208" height="736" data-path="images/guides/s3_bucket_example.webp" />
  </Step>

  <Step title="Настройка репликации для обеспечения отказоустойчивости (необязательно)" id="3-implementing-replication-for-fault-tolerance-optional">
    <Warning>
      Не настраивайте политику жизненного цикла AWS/GCS. Это не поддерживается и может привести к повреждению таблиц.
    </Warning>

    Для отказоустойчивости можно использовать несколько серверных узлов ClickHouse, размещённых в нескольких регионах AWS, с отдельным S3 бакетом для каждого узла.

    Репликацию с S3-дисками можно настроить с помощью движка таблицы `ReplicatedMergeTree`. Подробности см. в следующем руководстве:

    * [Репликация одного сегмента между двумя регионами AWS с использованием объектного хранилища S3](/docs/ru/integrations/connectors/data-ingestion/AWS/integrating-s3-with-clickhouse#s3-multi-region).
  </Step>
</Steps>

<div id="further-reading">
  ## Дополнительные материалы
</div>

* [SharedMergeTree — движок таблицы](/docs/ru/products/cloud/features/infrastructure/shared-merge-tree)
* [Анонс SharedMergeTree в блоге](https://clickhouse.com/blog/clickhouse-cloud-boosts-performance-with-sharedmergetree-and-lightweight-updates)
