Конфигурационные файлы
Профили настроек и конфигурационные файлы на основе XML не поддерживаются в ClickHouse Cloud. Поэтому в ClickHouse Cloud вы не найдете файл config.xml. Вместо этого следует использовать SQL-команды для управления настройками через профили настроек.
Для получения дополнительной информации см. "Configuring Settings"
Сервер 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"(например, для настроек macros). - Подстановка элементов: Если необходимо заменить целый элемент подстановкой, используйте
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.
Обратите внимание, что файлы конфигурации сначала объединяются с учётом настроек, а 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:
Упомянутый выше синтаксис не позволяет представить XML-текстовые узлы с XML-атрибутами в виде YAML. Этот особый случай можно реализовать, используя ключ атрибута
#text:
Соответствующий XML:
Детали реализации
Для каждого файла конфигурации сервер при запуске также генерирует файлы file-preprocessed.xml. Эти файлы содержат все выполненные подстановки и переопределения и предназначены только для ознакомления. Если в конфигурационных файлах использовались подстановки через ZooKeeper, но ZooKeeper недоступен при старте сервера, сервер загружает конфигурацию из предварительно обработанного файла.
Сервер отслеживает изменения в конфигурационных файлах, а также в файлах и узлах ZooKeeper, которые использовались при выполнении подстановок и переопределений, и «на лету» перезагружает настройки пользователей и кластеров. Это означает, что вы можете изменять кластер, пользователей и их настройки без перезапуска сервера.