Les settings profiles et les fichiers de configuration basés sur XML ne sont pas pris en charge dans ClickHouse Cloud. Par conséquent, dans ClickHouse Cloud, vous ne trouverez pas de fichier
config.xml. À la place, vous devez utiliser des commandes SQL pour gérer les paramètres via les settings profiles.Pour plus de détails, consultez “Configuration des paramètres”/etc/clickhouse-server/config.xml comme fichier de configuration par défaut, mais il est également possible d’indiquer manuellement l’emplacement du fichier de configuration au démarrage du serveur à l’aide de l’option de ligne de commande --config-file ou -C.
Si aucune de ces options n’est fournie, le serveur recherche config.xml, config.yaml et config.yml, dans cet ordre, dans le répertoire de travail courant, et utilise le premier fichier trouvé.
Si aucun de ces fichiers n’existe, le serveur démarre avec la configuration intégrée au binaire.
Un fichier indiqué avec --config-file est utilisé tel quel : s’il n’existe pas, le serveur signale une erreur au lieu de rechercher un fichier portant une autre extension.
clickhouse-keeper suit les mêmes règles avec keeper_config.xml, keeper_config.yaml et keeper_config.yml.
Des fichiers de configuration supplémentaires peuvent être placés dans le répertoire config.d/, relatif au fichier de configuration principal, par exemple dans le répertoire /etc/clickhouse-server/config.d/.
Les fichiers de ce répertoire et la configuration principale sont fusionnés lors d’une étape de prétraitement avant que la configuration ne soit appliquée au serveur ClickHouse.
Les fragments de configuration sont fusionnés selon l’ordre lexicographique de leurs chemins complets. Pour les fichiers du répertoire standard config.d/, cela équivaut à les ordonner par nom de fichier. Le répertoire legacy conf.d/ est également fusionné ; comme conf.d est trié avant config.d, tous ses fragments sont traités en premier lorsque les deux répertoires existent.
Pour simplifier les mises à jour et améliorer la modularité, il est recommandé de ne pas modifier le fichier config.xml par défaut et de placer toute personnalisation supplémentaire dans config.d/.
La configuration de ClickHouse Keeper se trouve dans /etc/clickhouse-keeper/keeper_config.xml.
De même, les fichiers de configuration supplémentaires pour Keeper doivent être placés dans /etc/clickhouse-keeper/keeper_config.d/.
Il est possible de mélanger des fichiers de configuration XML et YAML ; par exemple, vous pouvez avoir un fichier de configuration principal config.xml et des fichiers de configuration supplémentaires config.d/network.xml, config.d/timezone.yaml et config.d/keeper.yaml.
Il n’est pas possible de mélanger XML et YAML au sein d’un même fichier de configuration.
Les fichiers de configuration XML doivent utiliser <clickhouse>...</clickhouse> comme balise racine.
Dans les fichiers de configuration YAML, clickhouse: est facultatif ; s’il est absent, le parseur l’insère automatiquement.
Fusion des fichiers de configuration
config.d/) sont fusionnés comme suit :
- Si un nœud (c’est-à-dire un chemin menant à un élément) apparaît dans les deux fichiers et ne possède pas les attributs
replaceouremove, il est inclus dans le fichier de configuration fusionné, et les éléments enfants des deux nœuds sont inclus puis fusionnés récursivement. - Si l’un des deux nœuds contient l’attribut
replace, il est inclus dans le fichier de configuration fusionné, mais seuls les éléments enfants du nœud portant l’attributreplacesont inclus. - Si l’un des deux nœuds contient l’attribut
remove, le nœud n’est pas inclus dans le fichier de configuration fusionné (s’il existe déjà, il est supprimé).
config.xml
config.d/other_config.xml
Substitution à l’aide de variables d’environnement et de nœuds ZooKeeper
from_env.
Par exemple, avec la variable d’environnement $MAX_QUERY_SIZE = 150000 :
from_zk (nœud ZooKeeper) :
Interprétation des valeurs
from_env et from_zk n’interprètent pas la valeur substituée de la même manière :
- Une valeur directe substituée via
from_envest considérée comme du texte littéral. Les caractères spéciaux XML tels que&,<et>sont échappés automatiquement ; une variable d’environnement peut donc contenir n’importe quelle valeur représentable en XML, par exemplea&b<c>d, sans casser la configuration (voir la note ci-dessous sur les caractères de contrôle interdits en XML). Une valeur directe n’est jamais interprétée comme du XML, même si elle ressemble à un fragment XML :<a>1</a>est substitué par le texte littéral<a>1</a>. Cela s’applique également lorsque l’attribut direct est placé sur un conteneur ordinaire tel que<profiles from_env="…"/>: une substitution de sous-arbre XML existante doit être migrée vers<profiles><include from_env="…"/></profiles>. Pour des raisons de rétrocompatibilité,<include from_env="…"/>se comporte différemment : il analyse la variable d’environnement comme un fragment XML et insère ses enfants dans l’élément parent. - Le traitement d’une valeur substituée via
from_zkdépend de ce qu’elle commence ou non par<. Une valeur commençant par<est toujours analysée comme un fragment XML : c’est ainsi qu’un sous-arbre est inséré dans n’importe quel élément, qu’il s’agisse d’un<include from_zk="…"/>structurel ou d’un conteneur ordinaire tel que<profiles from_zk="…"/>; ce comportement est conservé pour des raisons de rétrocompatibilité, car les versions antérieures interprétaient toujours une valeurfrom_zkcomme du XML. Une valeur ne commençant pas par<n’est analysée comme un sous-arbre YAML qu’avec la forme explicite<include from_zk="…" yaml="true"/>; un YAML mal formé entraîne alors le rejet de la configuration. L’attributyaml="true"active l’analyse YAML partout où la forme générique<include>est utilisée, y compris à l’intérieur d’un élément de certificat terminal ; ne l’utilisez donc pas pour un paramètre littéral ou un secret. Sansyaml="true", une valeur ne commençant pas par<est traitée comme du texte littéral, y compris lorsqu’elle est utilisée via la forme générique de remplacement de certificat terminal<password><include from_zk="/secret"/></password>. Les valeurs qui contiennent de la syntaxe YAML ou qui sont du YAML mal formé, commeabc # rotatedou[1, sont ainsi préservées. Avec cette forme, les octets exacts ne sont préservés que si l’<include>est intégré sans nœud de texte d’espacement autour ; pour les secrets et les paramètres de certificat terminal dont les octets exacts importent, privilégiez la forme directe<password from_zk="…"/>. Sur tout autre élément — qu’il s’agisse d’une substitution de certificat terminal telle que<some_setting from_zk="…"/>ou<password from_zk="…"/>, ou d’un conteneur ordinaire tel que<profiles from_zk="…"/>— une valeur ne commençant pas par<est également conservée comme texte littéral avec ses octets d’origine exacts (les caractères spéciaux XML sont échappés automatiquement, comme pourfrom_env) ; ainsi, une valeur telle queabc: defreste le texte littéralabc: defau lieu de devenir un sous-élément<abc>def</abc>. Pour insérer un sous-arbre dans un élément ordinaire (plutôt que dans un<include>structurel), fournissez-le sous forme de fragment XML (une valeur commençant par<).
Les valeurs littérales doivent être du texte XML 1.0 valideUne substitution littérale (
from_env, ou une valeur from_zk de certificat terminal ne commençant pas par <) préserve les octets exacts de la valeur pour tout caractère que XML 1.0 peut représenter sous forme de texte. Les caractères de contrôle interdits en XML 1.0 — 0x00–0x08, 0x0B, 0x0C et 0x0E–0x1F — ne peuvent en aucun cas transiter par une configuration XML (la spécification XML les interdit même sous forme de références de caractères numériques telles que ), et toute valeur qui en contient est rejetée lors du traitement de la substitution. La tabulation (\t), le saut de ligne (\n) et le retour chariot (\r) sont autorisés et restitués à l’octet près.Comportement lors de la mise à niveau pour les valeurs de certificat terminal encodées en entitésLes versions précédentes réanalysaient chaque valeur
from_env directe comme du XML : un caractère &, < ou > brut était donc rejeté comme mal formé, et la seule façon d’en inclure un était de l’encoder sous forme d’entité XML. Ainsi, une variable d’environnement définie à a&b était décodée en a&b, <a>1</a> était décodé en <a>1</a>, et était décodé en retour chariot. Une valeur from_env directe est désormais traitée comme du texte littéral : ces mêmes valeurs d’environnement sont donc résolues littéralement en a&b, <a>1</a> et . Autrement dit, seules les valeurs en texte brut conservent leur signification antérieure : une valeur d’environnement encodée en entités pour l’ancien chemin XML doit désormais être définie sous forme brute (par exemple, définissez a&b, que l’ancien chemin rejetait mais que le nouveau accepte comme le texte littéral a&b).Les versions précédentes réanalysaient chaque valeur de certificat terminal from_zk comme du XML : un caractère &, < ou > brut était donc rejeté comme mal formé, et la seule façon d’en inclure un était de l’encoder sous forme d’entité XML. Ainsi, une valeur stockée sous la forme a&b était décodée en a&b, <a>1</a> était décodé en <a>1</a>, et était décodé en retour chariot. Une valeur de certificat terminal ne commençant pas par < est désormais conservée telle quelle, octet pour octet : ces mêmes nœuds sont donc résolus littéralement en a&b, <a>1</a> et . Autrement dit, seuls les scalaires en texte brut conservent leur signification antérieure : une valeur de certificat terminal encodée en entités pour l’ancien chemin XML doit désormais être stockée sous forme brute (par exemple, stockez a&b, que l’ancien chemin rejetait mais que le nouveau accepte comme le texte littéral a&b).Le même changement s’applique à un scalaire simple substitué via un <include from_zk="…"/> intégré sous un paramètre de certificat terminal ou un secret, par exemple <password><include from_zk="/secret"/></password> : là aussi, un scalaire est désormais conservé tel quel, octet pour octet. Ainsi, /secret = a&b (auparavant décodé en a&b) est désormais résolu littéralement en a&b et doit être stocké sous forme brute, soit a&b. N’entourez pas cette forme d’espaces, car ceux-ci font partie de la valeur du paramètre obtenue ; privilégiez la forme directe <password from_zk="…"/> lorsque la valeur exacte à l’octet près est importante. (Une valeur from_zk commençant par <, ou un sous-arbre YAML référencé avec <include from_zk="…" yaml="true"/>, n’est pas concerné — seules les valeurs non marquées ne commençant pas par < sont conservées littéralement.)Valeurs par défaut
from_env ou from_zk peut également avoir l’attribut replace="1" (ce dernier doit apparaître avant from_env/from_zk).
Dans ce cas, l’élément peut définir une valeur par défaut.
L’élément prend la valeur de la variable d’environnement ou du nœud ZooKeeper si celle-ci est définie ; sinon, il prend la valeur par défaut.
L’exemple précédent est repris, en supposant que MAX_QUERY_SIZE n’est pas défini :
Substitution avec le contenu d’un fichier
- Substitution de valeurs : si un élément possède l’attribut
incl, sa valeur sera remplacée par le contenu du fichier référencé. Le chemin vers le fichier contenant les substitutions est défini par l’élémentinclude_fromde la configuration du serveur ; aucun chemin n’est défini par défaut, les substitutions ne sont donc lues que lorsqu’il est spécifié. Les valeurs de substitution sont spécifiées dans les éléments/clickhouse/substitution_namede ce fichier. Si une substitution spécifiée dansincln’existe pas, cela est consigné dans le journal. Pour empêcher ClickHouse de consigner les substitutions manquantes dans le journal, spécifiez l’attributoptional="true"(par exemple, pour les paramètres de macros). - Substitution d’éléments : si vous souhaitez remplacer l’élément entier par une substitution, utilisez
includecomme nom d’élément. Le nom d’élémentincludepeut être combiné avec l’attributfrom_zk = "/path/to/node". Dans ce cas, la valeur de l’élément est remplacée par le contenu du nœud ZooKeeper situé à/path/to/node. Cela fonctionne également si vous stockez un sous-arbre XML entier dans un nœud ZooKeeper : il sera alors entièrement inséré dans l’élément source.
Modifié dans la version 26.8 : avant cette version, le fichier
/etc/metrika.xml était utilisé implicitement dès lors qu’il existait, même lorsque include_from n’était pas spécifié. Si vous dépendez de ce fichier, spécifiez explicitement son chemin dans include_from. Notez que include_from est lu séparément dans chaque fichier de configuration : les fichiers chargés séparément de la configuration principale du serveur — la configuration des utilisateurs (par exemple, users.xml lorsqu’il n’est pas inclus dans le fichier principal) et les configurations XML des dictionnaires — nécessitent chacun leur propre élément include_from ; le spécifier uniquement dans la configuration principale du serveur ne s’applique pas à eux.merge="true". Par exemple : <include from_zk="/some_path" merge="true">. Dans ce cas, la configuration existante sera fusionnée avec le contenu de la substitution, et les paramètres de la configuration existante seront remplacés par les valeurs issues de la substitution.
Chiffrement et masquage de la configuration
encrypted_by, avec pour valeur le nom du codec de chiffrement.
Contrairement aux attributs from_zk, from_env et incl, ou à l’élément include, aucune substitution (c.-à-d. aucun déchiffrement de la valeur chiffrée) n’est effectuée dans le fichier prétraité.
Le déchiffrement n’a lieu qu’à l’exécution, dans le processus serveur.
Par exemple :
from_env et from_zk peuvent aussi s’appliquer à encryption_codecs :
config.xml :
users.xml :
encrypt_decrypt :
hide_in_preprocessed.
Par exemple :
Paramètres utilisateur
config.xml peut spécifier une configuration distincte avec des paramètres utilisateur, des profils et des quotas. Le chemin relatif vers cette configuration est défini dans l’élément users_config. Par défaut, il s’agit de users.xml. Si users_config est omis, les paramètres utilisateur, les profils et les quotas sont spécifiés directement dans config.xml.
La configuration utilisateur peut être répartie dans des fichiers distincts, comme config.xml et config.d/.
Le nom du répertoire est défini comme le paramètre users_config sans le suffixe .xml, auquel est concaténé .d.
Le répertoire users.d est utilisé par défaut, car users_config vaut par défaut users.xml.
Les fragments de configuration utilisateur sont fusionnés selon l’ordre lexicographique de leurs chemins complets. Pour les fichiers du répertoire standard users.d/, cela équivaut à un classement par nom de fichier. Le répertoire legacy conf.d/ est également fusionné ; comme conf.d est classé avant users.d, tous ses fragments sont traités en premier lorsque les deux répertoires existent.
Notez que les fichiers de configuration sont d’abord fusionnés en tenant compte des paramètres, puis les inclusions sont traitées.
Exemple XML
Exemples YAML
Vous trouverez ici la configuration par défaut écrite en YAML :config.yaml.example.
Il existe quelques différences entre les formats YAML et XML pour les configurations ClickHouse.
Des conseils pour écrire une configuration au format YAML sont présentés ci-dessous.
Une balise XML contenant une valeur textuelle est représentée par une paire clé-valeur en YAML
@. Notez que @ est réservé par la norme YAML et doit donc être placé entre guillemets doubles :
#text :
Détails d’implémentation
file-preprocessed.xml. Ces fichiers contiennent toutes les substitutions et surcharges effectuées, et sont fournis à titre informatif. Si des substitutions ZooKeeper ont été utilisées dans les fichiers de configuration mais que ZooKeeper n’est pas disponible au démarrage du serveur, le serveur charge la configuration à partir du fichier prétraité.
Le serveur surveille les modifications des fichiers de configuration, ainsi que celles des fichiers et des nœuds ZooKeeper utilisés pour effectuer les substitutions et les surcharges, et recharge à la volée les paramètres des utilisateurs et des clusters. Cela signifie que vous pouvez modifier le cluster, les utilisateurs et leurs paramètres sans redémarrer le serveur.