Файлы конфигурации
Профили настроек и файлы конфигурации на основе 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
, узел не включается в объединенный файл конфигурации (если он уже существует, он удаляется).
Например, если есть два файла конфигурации:
и
Результирующий объединенный файл конфигурации будет следующим:
Замена значений с помощью переменных окружения и узлов 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"
(например, настройки для макросов). - Замена элементов: Если вы хотите заменить весь элемент заменой, используйте
include
в качестве имени элемента. Имя элементаinclude
можно комбинировать с атрибутомfrom_zk = "/path/to/node"
. В этом случае значение элемента заменяется содержимым узла ZooKeeper по адресу/path/to/node
. Это также работает, если вы храните целое поддерево XML как узел ZooKeeper, оно будет полностью вставлено в исходный элемент.
Пример этого показан ниже:
Если вы хотите объединить заменяющее содержимое с существующей конфигурацией вместо добавления, вы можете использовать атрибут 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
.
Обратите внимание, что файлы конфигурации сначала объединяются, учитывая настройки, а затем включения обрабатываются после этого.
Пример XML
Например, у вас может быть отдельный файл конфигурации для каждого пользователя, например:
Примеры YAML
Здесь вы можете увидеть конфигурацию по умолчанию, написанную в YAML: config.yaml.example
.
Существует несколько различий между форматами YAML и XML в конфигурациях ClickHouse.
Советы по написанию конфигурации в формате YAML представлены ниже.
XML-тег с текстовым значением представлен парой ключ-значение в YAML:
Соответствующий XML:
Вложенный узел XML представлен картой в YAML:
Соответствующий XML:
Чтобы создать один и тот же XML-тег несколько раз, используйте последовательность YAML:
Соответствующий XML:
Чтобы указать атрибут XML, вы можете использовать ключ атрибута с префиксом @
. Обратите внимание, что @
зарезервирован стандартом YAML, поэтому должен быть заключен в двойные кавычки:
Соответствующий XML:
Также возможно использовать атрибуты в последовательности YAML:
Соответствующий XML:
Указанный синтаксис не позволяет выразить текстовые узлы XML с атрибутами XML как YAML. Этот особый случай можно достичь, используя ключ атрибута #text
:
Соответствующий XML:
Подробности реализации
Для каждого файла конфигурации сервер также генерирует файлы file-preprocessed.xml
при запуске. Эти файлы содержат все завершенные замены и переопределения и предназначены для информационного использования. Если в файлах конфигурации использовались замены ZooKeeper, но ZooKeeper недоступен при старте сервера, сервер загружает конфигурацию из предварительно обработанного файла.
Сервер отслеживает изменения в файлах конфигурации, а также файлах и узлах ZooKeeper, которые использовались при выполнении замен и переопределений, и на лету перезагружает настройки для пользователей и кластеров. Это означает, что вы можете изменять кластер, пользователей и их настройки без перезапуска сервера.