Перейти к основному содержанию
Профили настроек и конфигурационные файлы на основе XML не поддерживаются в ClickHouse Cloud. Поэтому в ClickHouse Cloud вы не найдете файл config.xml. Вместо этого для управления настройками через профили настроек следует использовать команды SQL.Подробнее см. в разделе “Настройка параметров”
Сервер ClickHouse можно настраивать с помощью конфигурационных файлов в формате XML или YAML. В большинстве вариантов установки сервер ClickHouse использует /etc/clickhouse-server/config.xml в качестве конфигурационного файла по умолчанию, но расположение конфигурационного файла также можно указать вручную при запуске сервера с помощью параметра командной строки --config-file или -C. Дополнительные конфигурационные файлы можно размещать в каталоге config.d/ относительно основного конфигурационного файла, например в каталоге /etc/clickhouse-server/config.d/. Файлы в этом каталоге и основная конфигурация объединяются на этапе предварительной обработки перед применением конфигурации в сервере ClickHouse. Конфигурационные файлы объединяются в алфавитном порядке. Чтобы упростить обновления и улучшить модульность, рекомендуется не изменять файл config.xml по умолчанию и размещать дополнительные пользовательские настройки в config.d/. Конфигурация ClickHouse Keeper находится в /etc/clickhouse-keeper/keeper_config.xml. Аналогично, дополнительные конфигурационные файлы для Keeper нужно размещать в /etc/clickhouse-keeper/keeper_config.d/. Можно комбинировать конфигурационные файлы XML и YAML: например, у вас может быть основной конфигурационный файл config.xml и дополнительные конфигурационные файлы config.d/network.xml, config.d/timezone.yaml и config.d/keeper.yaml. Смешивание XML и YAML в пределах одного конфигурационного файла не поддерживается. В конфигурационных файлах XML в качестве тега верхнего уровня следует использовать <clickhouse>...</clickhouse>. В конфигурационных файлах YAML clickhouse: указывать необязательно; если он отсутствует, парсер добавляет его автоматически.

Слияние конфигурации

Два файла конфигурации (обычно основной файл конфигурации и другой файл конфигурации из config.d/) объединяются следующим образом:
  • Если узел (то есть путь, ведущий к элементу) присутствует в обоих файлах и не имеет атрибутов replace или remove, он включается в итоговый файл конфигурации, а дочерние элементы из обоих узлов включаются и рекурсивно объединяются.
  • Если один из двух узлов содержит атрибут replace, он включается в итоговый файл конфигурации, но включаются только дочерние элементы из узла с атрибутом replace.
  • Если один из двух узлов содержит атрибут remove, узел не включается в итоговый файл конфигурации (если он уже существует, он удаляется).
Например, даны два файла конфигурации:
config.xml
и
config.d/other_config.xml
Итоговый объединённый конфигурационный файл будет:

Подстановка с использованием переменных окружения и узлов ZooKeeper

Чтобы указать, что значение элемента должно подставляться из переменной окружения, можно использовать атрибут from_env. Например, при переменной окружения $MAX_QUERY_SIZE = 150000:
В результате получится следующая конфигурация:
То же самое можно сделать с помощью from_zk (узла ZooKeeper):
В результате получаем следующую конфигурацию:

Значения по умолчанию

Элемент с атрибутами from_env или from_zk также может иметь атрибут replace="1" (последний должен располагаться перед from_env/from_zk). В этом случае для элемента можно задать значение по умолчанию. Элемент принимает значение переменной окружения или узла ZooKeeper, если оно задано; в противном случае используется значение по умолчанию. Ниже повторяется предыдущий пример, но при условии, что MAX_QUERY_SIZE не задан:
В результате получится конфигурация:

Подстановка содержимого файла

Также можно заменять части конфигурации содержимым файлов. Это можно сделать двумя способами:
  • Подстановка значений: Если у элемента есть атрибут incl, его значение будет заменено содержимым указанного файла. По умолчанию путь к файлу с подстановками — /etc/metrika.xml. Его можно изменить в элементе include_from в конфигурации сервера. Значения для подстановки задаются в элементах /clickhouse/substitution_name в этом файле. Если подстановка, указанная в incl, не существует, об этом будет сделана запись в журнале. Чтобы ClickHouse не писал в журнал об отсутствующих подстановках, укажите атрибут optional="true" (например, для настроек macros).
  • Подстановка элементов: Если вы хотите заменить подстановкой весь элемент целиком, используйте include в качестве имени элемента. Имя элемента include можно использовать вместе с атрибутом from_zk = "/path/to/node". В этом случае значение элемента заменяется содержимым узла ZooKeeper по пути /path/to/node. Это также работает, если вы храните в узле ZooKeeper всё XML-поддерево: оно будет полностью вставлено в исходный элемент.
Пример показан ниже:
Если вы хотите объединить подставляемое содержимое с существующей конфигурацией вместо добавления, можно использовать атрибут merge="true". Например: <include from_zk="/some_path" merge="true">. В этом случае существующая конфигурация будет объединена с содержимым подстановки, а существующие параметры конфигурации будут заменены значениями из подстановки.

Шифрование и скрытие конфигурации

Вы можете использовать симметричное шифрование, чтобы зашифровать элемент конфигурации, например пароль в открытом виде или приватный ключ. Для этого сначала настройте кодек шифрования, а затем добавьте к элементу, который нужно зашифровать, атрибут encrypted_by со значением — именем кодека шифрования. В отличие от атрибутов from_zk, from_env и incl, а также элемента include, в предварительно обработанном файле подстановка (то есть расшифровка зашифрованного значения) не выполняется. Расшифровка происходит только во время выполнения в процессе сервера. Например:
Атрибуты from_env и from_zk также можно использовать для encryption_codecs:
Ключи шифрования и зашифрованные значения можно определить в любом из файлов конфигурации. Пример config.xml приведён ниже:
Ниже приведён пример users.xml:
Чтобы зашифровать значение, можно использовать программу (пример) encrypt_decrypt:
Даже при использовании зашифрованных элементов конфигурации они всё равно отображаются в предварительно обработанном конфигурационном файле. Если для вашего развертывания ClickHouse это проблема, есть два варианта: либо установить права доступа к предварительно обработанному файлу на 600, либо использовать атрибут hide_in_preprocessed. Например:

Пользовательские настройки

В файле config.xml можно указать отдельную конфигурацию с пользовательскими настройками, профилями и квотами. Относительный путь к этой конфигурации задается в элементе users_config. По умолчанию используется users.xml. Если users_config не указан, пользовательские настройки, профили и квоты задаются прямо в config.xml. Пользовательскую конфигурацию можно разделить на отдельные файлы, аналогично config.xml и config.d/. Имя каталога определяется как значение параметра users_config без суффикса .xml с добавлением .d. По умолчанию используется каталог users.d, так как значение users_config по умолчанию — users.xml. Обратите внимание, что файлы конфигурации сначала сливаются с учетом настроек, и только после этого обрабатываются директивы include.

Пример XML

Например, можно создать отдельный файл конфигурации для каждого пользователя:

Примеры YAML

Здесь приведена конфигурация по умолчанию в формате YAML: config.yaml.example. Форматы YAML и XML имеют некоторые различия в контексте конфигураций ClickHouse. Ниже приведены рекомендации по написанию конфигурации в формате YAML. XML-тег с текстовым значением в YAML представляется как пара ключ-значение
Соответствующий XML:
Вложенный XML-узел задаётся в виде YAML-словаря:
Соответствующий XML:
Чтобы создать один и тот же тег XML несколько раз, используйте последовательность YAML:
Соответствующий XML:
Чтобы задать XML-атрибут, можно использовать ключ атрибута с префиксом @. Обратите внимание: символ @ зарезервирован стандартом YAML, поэтому его нужно заключать в двойные кавычки:
Соответствующий XML:
Атрибуты также можно использовать в YAML-последовательности:
Соответствующий XML:
Описанный выше синтаксис не позволяет представить в YAML текстовые узлы XML с атрибутами XML. Этот особый случай можно описать с помощью ключа атрибута #text:
Соответствующий XML:

Подробности реализации

Для каждого конфигурационного файла сервер также при запуске генерирует файлы file-preprocessed.xml. Эти файлы содержат все выполненные подстановки и переопределения и предназначены только для ознакомления. Если в конфигурационных файлах использовались подстановки из ZooKeeper, но при запуске сервера ZooKeeper недоступен, сервер загружает конфигурацию из предварительно обработанного файла. Сервер отслеживает изменения в конфигурационных файлах, а также в файлах и узлах ZooKeeper, которые использовались при выполнении подстановок и переопределений, и на лету перезагружает настройки для пользователей и кластеров. Это означает, что вы можете изменять кластер, пользователей и их настройки без перезапуска сервера.
Последнее изменение 29 июня 2026 г.