ClickHouse/docs/ru/operations/configuration-files.md
Robert Schulze aa25ce9e3d
Follow-up to "Implement support of encrypted elements in configuration file"
Cf. PR #50986

- rename XML attribute "encryption_codec" to "encrypted_by"
2023-07-26 13:27:13 +00:00

13 KiB
Raw Blame History

slug sidebar_position sidebar_label
/ru/operations/configuration-files 50 Конфигурационные файлы

Конфигурационные файлы

ClickHouse поддерживает многофайловое управление конфигурацией. Основной конфигурационный файл сервера — /etc/clickhouse-server/config.xml или /etc/clickhouse-server/config.yaml. Остальные файлы должны находиться в директории /etc/clickhouse-server/config.d. Обратите внимание, что конфигурационные файлы могут быть записаны в форматах XML или YAML, но смешение этих форматов в одном файле не поддерживается. Например, можно хранить основные конфигурационные файлы как config.xml и users.xml, а дополнительные файлы записать в директории config.d и users.d в формате .yaml.

Все XML файлы должны иметь одинаковый корневой элемент, обычно <clickhouse>. Для YAML элемент clickhouse: должен отсутствовать, так как парсер вставляет его автоматически.

Переопределение

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

  • У элементов этих конфигурационных файлов могут быть указаны атрибуты replace или remove.
  • Если ни один атрибут не указан, сервер объединит содержимое элементов рекурсивно, заменяя совпадающие значения дочерних элементов.
  • Если указан атрибут replace, сервер заменит весь элемент на указанный.
  • Если указан атрибут remove, сервер удалит элемент.

Также возможно указать атрибуты как переменные среды с помощью from_env="VARIABLE_NAME":

<clickhouse>
    <macros>
        <replica from_env="REPLICA" />
        <layer from_env="LAYER" />
        <shard from_env="SHARD" />
    </macros>
</clickhouse>

Подстановки

В конфигурационном файле могут быть указаны «подстановки». Если у элемента присутствует атрибут incl, то в качестве значения будет использована соответствующая подстановка из файла. По умолчанию путь к файлу с подстановками - /etc/metrika.xml. Он может быть изменён в конфигурации сервера в элементе include_from. Значения подстановок указываются в элементах /clickhouse/имя_подстановки этого файла. Если подстановка, заданная в incl, отсутствует, то делается соответствующая запись в лог. Чтобы ClickHouse фиксировал в логе отсутствие подстановки, необходимо указать атрибут optional="true" (например, настройки для macros).

Если нужно заменить весь элемент подстановкой, можно использовать include как имя элемента.

Пример подстановки XML:

<clickhouse>
    <!-- Appends XML subtree found at `/profiles-in-zookeeper` ZK path to `<profiles>` element. -->
    <profiles from_zk="/profiles-in-zookeeper" />

    <users>
        <!-- Replaces `include` element with the subtree found at `/users-in-zookeeper` ZK path. -->
        <include from_zk="/users-in-zookeeper" />
        <include from_zk="/other-users-in-zookeeper" />
    </users>
</clickhouse>

Подстановки могут также выполняться из ZooKeeper. Для этого укажите у элемента атрибут from_zk = "/path/to/node". Значение элемента заменится на содержимое узла /path/to/node в ZooKeeper. В ZooKeeper-узел также можно положить целое XML-поддерево, оно будет целиком вставлено в исходный элемент.

В элементе users_config файла config.xml можно указать относительный путь к конфигурационному файлу с настройками пользователей, профилей и квот. Значение users_config по умолчанию — users.xml. Если users_config не указан, то настройки пользователей, профилей и квот можно задать непосредственно в config.xml.

Настройки пользователя могут быть разделены в несколько отдельных файлов аналогичных config.xml и config.d\. Имя директории задаётся также как users_config. Имя директории задаётся так же, как имя файла в users_config, с подстановкой .d вместо .xml/.yaml. Директория users.d используется по умолчанию, также как users.xml используется для users_config. Например, можно иметь по отдельному конфигурационному файлу для каждого пользователя:

$ cat /etc/clickhouse-server/users.d/alice.xml
<clickhouse>
    <users>
      <alice>
          <profile>analytics</profile>
            <networks>
                  <ip>::/0</ip>
            </networks>
          <password_sha256_hex>...</password_sha256_hex>
          <quota>analytics</quota>
      </alice>
    </users>
</clickhouse>

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

Сервер следит за изменениями конфигурационных файлов, а также файлов и ZooKeeper-узлов, которые были использованы при выполнении подстановок и переопределений, и перезагружает настройки пользователей и кластеров на лету. То есть, можно изменять кластера, пользователей и их настройки без перезапуска сервера.

Шифрование

Вы можете использовать симметричное шифрование для зашифровки элемента конфигурации, например, поля password. Чтобы это сделать, сначала настройте кодек шифрования, затем добавьте аттибутencrypted_by с именем кодека шифрования как значение к элементу, который надо зашифровать.

В отличии от аттрибутов from_zk, from_env и incl (или элемента include), подстановка, т.е. расшифровка зашифрованного значения, не выподняется в файле предобработки. Расшифровка происходит только во время исполнения в серверном процессе.

Пример:

<clickhouse>

    <encryption_codecs>
        <aes_128_gcm_siv>
            <key_hex>00112233445566778899aabbccddeeff</key_hex>
        </aes_128_gcm_siv>
    </encryption_codecs>

    <interserver_http_credentials>
        <user>admin</user>
        <password encrypted_by="AES_128_GCM_SIV">961F000000040000000000EEDDEF4F453CFE6457C4234BD7C09258BD651D85</password>
    </interserver_http_credentials>

</clickhouse>

Чтобы получить зашифрованное значение может быть использовано приложение-пример encrypt_decrypt .

Пример:

./encrypt_decrypt /etc/clickhouse-server/config.xml -e AES_128_GCM_SIV abcd
961F000000040000000000EEDDEF4F453CFE6457C4234BD7C09258BD651D85

Примеры записи конфигурации на YAML

Здесь можно рассмотреть пример реальной конфигурации записанной на YAML: config.yaml.example.

Между стандартами XML и YAML имеются различия, поэтому в этом разделе будут перечислены некоторые подсказки для написания конфигурации на YMAL.

Для записи обычной пары ключ-значение следует использовать Scalar:

key: value

Для создания тега, содержащего подтеги следует использовать Map:

map_key:
  key1: val1
  key2: val2
  key3: val3

Для создания списка значений или подтегов, расположенных по определенному ключу, следует использовать Sequence:

seq_key:
  - val1
  - val2
  - key1: val3
  - map:
      key2: val4
      key3: val5

В случае, усли необходимо объявить тег, аналогичный XML-атрибуту, необходимо задать скаляр, имеющий ключ с префиксом @ и заключенный в кавычки:

map:
  "@attr1": value1
  "@attr2": value2
  key: 123

Из такой Map мы получим после конвертации:

<map attr1="value1" attr2="value2">
    <key>123</key>
</map>

Помимо Map, можно задавать атрибуты для Sequence:

seq:
  - "@attr1": value1
  - "@attr2": value2
  - 123
  - abc

Таким образом получая аналог следующей записи на XML:

<seq attr1="value1" attr2="value2">123</seq>
<seq attr1="value1" attr2="value2">abc</seq>

Детали реализации

При старте сервера для каждого конфигурационного файла создаются файлы предобработки file-preprocessed.xml. Они содержат все выполненные подстановки и переопределения (эти сведения записываются просто для информации). Если в конфигурационном файле настроены подстановки ZooKeeper, но при старте сервера ZooKeeper не доступен, то сервер загружает конфигурацию из соответствующего файла предобработки.

Сервер отслеживает как изменения в конфигурационных файлах, так и файлы и узы ZooKeeper, которые были использованы при выполнении подстановок и переопределений, и на ходу перезагружает настройки для пользователей и кластеров. Это означает, что можно изменять кластеры, пользователей и их настройки без перезапуска сервера.