mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
209 lines
14 KiB
Markdown
209 lines
14 KiB
Markdown
---
|
||
slug: /ru/operations/configuration-files
|
||
sidebar_position: 50
|
||
sidebar_label: "Конфигурационные файлы"
|
||
---
|
||
|
||
|
||
# Конфигурационные файлы {#configuration_files}
|
||
|
||
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:` должен отсутствовать, так как парсер вставляет его автоматически.
|
||
|
||
## Переопределение {#override}
|
||
|
||
Некоторые настройки, определенные в основном конфигурационном файле, могут быть переопределены в других файлах:
|
||
|
||
- У элементов этих конфигурационных файлов могут быть указаны атрибуты `replace` или `remove`.
|
||
- Если ни один атрибут не указан, сервер объединит содержимое элементов рекурсивно, заменяя совпадающие значения дочерних элементов.
|
||
- Если указан атрибут `replace`, сервер заменит весь элемент на указанный.
|
||
- Если указан атрибут `remove`, сервер удалит элемент.
|
||
|
||
Также возможно указать атрибуты как переменные среды с помощью `from_env="VARIABLE_NAME"`:
|
||
|
||
```xml
|
||
<clickhouse>
|
||
<macros>
|
||
<replica from_env="REPLICA" />
|
||
<layer from_env="LAYER" />
|
||
<shard from_env="SHARD" />
|
||
</macros>
|
||
</clickhouse>
|
||
```
|
||
|
||
## Подстановки {#substitution}
|
||
|
||
В конфигурационном файле могут быть указаны «подстановки». Если у элемента присутствует атрибут `incl`, то в качестве значения будет использована соответствующая подстановка из файла. По умолчанию путь к файлу с подстановками - `/etc/metrika.xml`. Он может быть изменён в конфигурации сервера в элементе [include_from](server-configuration-parameters/settings.md#server_configuration_parameters-include_from). Значения подстановок указываются в элементах `/clickhouse/имя_подстановки` этого файла. Если подстановка, заданная в `incl`, отсутствует, то делается соответствующая запись в лог. Чтобы ClickHouse фиксировал в логе отсутствие подстановки, необходимо указать атрибут `optional="true"` (например, настройки для [macros](server-configuration-parameters/settings.md#macros)).
|
||
|
||
Если нужно заменить весь элемент подстановкой, можно использовать `include` как имя элемента.
|
||
|
||
Пример подстановки XML:
|
||
|
||
```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`.
|
||
Например, можно иметь по отдельному конфигурационному файлу для каждого пользователя:
|
||
|
||
``` bash
|
||
$ cat /etc/clickhouse-server/users.d/alice.xml
|
||
```
|
||
|
||
``` 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-узлов, которые были использованы при выполнении подстановок и переопределений, и перезагружает настройки пользователей и кластеров на лету. То есть, можно изменять кластера, пользователей и их настройки без перезапуска сервера.
|
||
|
||
## Шифрование и Скрытие {#encryption}
|
||
|
||
Вы можете использовать симметричное шифрование для зашифровки элемента конфигурации, например, поля password. Чтобы это сделать, сначала настройте [кодек шифрования](../sql-reference/statements/create/table.md#encryption-codecs), затем добавьте аттибут`encrypted_by` с именем кодека шифрования как значение к элементу, который надо зашифровать.
|
||
|
||
В отличие от аттрибутов `from_zk`, `from_env` и `incl` (или элемента `include`), подстановка, т.е. расшифровка зашифрованного значения, не выподняется в файле предобработки. Расшифровка происходит только во время исполнения в серверном процессе.
|
||
|
||
Пример:
|
||
|
||
```xml
|
||
<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` .
|
||
|
||
Пример:
|
||
|
||
``` bash
|
||
./encrypt_decrypt /etc/clickhouse-server/config.xml -e AES_128_GCM_SIV abcd
|
||
```
|
||
|
||
``` text
|
||
961F000000040000000000EEDDEF4F453CFE6457C4234BD7C09258BD651D85
|
||
```
|
||
|
||
Даже с применённым шифрованием в файле предобработки элементы все равно сохраняются в незашифрованном виде. В случае если это является проблемой, мы предлагаем две альтернативы: или установить разрешения на файл предобработки 600 или использовать аттрибут `hide_in_preprocessed`.
|
||
|
||
Пример:
|
||
|
||
```xml
|
||
<clickhouse>
|
||
|
||
<interserver_http_credentials hide_in_preprocessed="true">
|
||
<user>admin</user>
|
||
<password>secret</password>
|
||
</interserver_http_credentials>
|
||
|
||
</clickhouse>
|
||
```
|
||
|
||
## Примеры записи конфигурации на YAML {#example}
|
||
|
||
Здесь можно рассмотреть пример реальной конфигурации записанной на YAML: [config.yaml.example](https://github.com/ClickHouse/ClickHouse/blob/master/programs/server/config.yaml.example).
|
||
|
||
Между стандартами XML и YAML имеются различия, поэтому в этом разделе будут перечислены некоторые подсказки для написания конфигурации на YMAL.
|
||
|
||
Для записи обычной пары ключ-значение следует использовать Scalar:
|
||
``` yaml
|
||
key: value
|
||
```
|
||
|
||
Для создания тега, содержащего подтеги следует использовать Map:
|
||
``` yaml
|
||
map_key:
|
||
key1: val1
|
||
key2: val2
|
||
key3: val3
|
||
```
|
||
|
||
Для создания списка значений или подтегов, расположенных по определенному ключу, следует использовать Sequence:
|
||
``` yaml
|
||
seq_key:
|
||
- val1
|
||
- val2
|
||
- key1: val3
|
||
- map:
|
||
key2: val4
|
||
key3: val5
|
||
```
|
||
|
||
В случае, усли необходимо объявить тег, аналогичный XML-атрибуту, необходимо задать скаляр, имеющий ключ с префиксом @ и заключенный в кавычки:
|
||
|
||
``` yaml
|
||
map:
|
||
"@attr1": value1
|
||
"@attr2": value2
|
||
key: 123
|
||
```
|
||
|
||
Из такой Map мы получим после конвертации:
|
||
|
||
``` xml
|
||
<map attr1="value1" attr2="value2">
|
||
<key>123</key>
|
||
</map>
|
||
```
|
||
|
||
Помимо Map, можно задавать атрибуты для Sequence:
|
||
|
||
``` yaml
|
||
seq:
|
||
- "@attr1": value1
|
||
- "@attr2": value2
|
||
- 123
|
||
- abc
|
||
```
|
||
|
||
Таким образом получая аналог следующей записи на XML:
|
||
|
||
``` xml
|
||
<seq attr1="value1" attr2="value2">123</seq>
|
||
<seq attr1="value1" attr2="value2">abc</seq>
|
||
```
|
||
|
||
## Детали реализации {#implementation-details}
|
||
|
||
При старте сервера для каждого конфигурационного файла создаются файлы предобработки `file-preprocessed.xml`. Они содержат все выполненные подстановки и переопределения (эти сведения записываются просто для информации). Если в конфигурационном файле настроены подстановки ZooKeeper, но при старте сервера ZooKeeper не доступен, то сервер загружает конфигурацию из соответствующего файла предобработки.
|
||
|
||
Сервер отслеживает как изменения в конфигурационных файлах, так и файлы и узы ZooKeeper, которые были использованы при выполнении подстановок и переопределений, и на ходу перезагружает настройки для пользователей и кластеров. Это означает, что можно изменять кластеры, пользователей и их настройки без перезапуска сервера.
|