跳到主要内容
跳到主要内容

配置文件

备注

请注意,基于 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。 因此,附加文件需要放置在 /etc/clickhouse-keeper/keeper_config.d/ 中。

可以混合使用 XML 和 YAML 配置文件,例如,您可以拥有主配置文件 config.xml 和附加配置文件 config.d/network.xmlconfig.d/timezone.yamlconfig.d/keeper.yaml。 在单个配置文件中混合 XML 和 YAML 是不支持的。 XML 配置文件应使用 <clickhouse>...</clickhouse> 作为顶级标签。 在 YAML 配置文件中,clickhouse: 是可选的,如果缺少,解析器会自动插入。

合并配置

两个配置文件(通常是主配置文件和来自 config.d/ 的另一个配置文件)合并的方式如下:

  • 如果节点(即通向元素的路径)在两个文件中都出现且没有属性 replaceremove,则它包含在合并的配置文件中,并包含并递归合并两个节点的子节点。
  • 如果两个节点中的一个包含属性 replace,则它包含在合并的配置文件中,但仅包含具有属性 replace 的节点的子节点。
  • 如果两个节点中的一个包含属性 remove,则该节点不包含在合并的配置文件中(如果已存在,则将其删除)。

示例:

生成合并的配置文件:

通过环境变量和 ZooKeeper 节点的替换

要指定元素的值应由环境变量的值替换,可以使用属性 from_env

示例,假设 $MAX_QUERY_SIZE = 150000

这等于

使用 from_zk(ZooKeeper 节点)也是可能的:

这等于

默认值

带有 from_envfrom_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" 结合使用。在这种情况下,该元素的值将由 /path/to/node 的 ZooKeeper 节点的内容替换。如果您将整个 XML 子树存储为 ZooKeeper 节点,它将完全插入到源元素中。

示例:

如果您希望合并替代内容与现有配置,而不是追加,可以使用属性 merge="true",例如:<include from_zk="/some_path" merge="true">。在这种情况下,现有配置将与替代内容合并,现有的配置设置将被替代值替换。

加密和隐藏配置

您可以使用对称加密来加密配置元素,例如,明文密码或私钥。 为此,首先配置 加密编码器,然后将属性 encrypted_by 及其值设置为要加密的元素的加密编码器的名称。

与属性 from_zkfrom_envincl,或元素 include 不同,预处理文件中不执行替换(即对加密值的解密)。 解密仅在服务器进程运行时发生。

示例:

属性 from_envfrom_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.xmlconfig.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 节点,并实时重新加载用户和集群的设置。这意味着您可以修改集群、用户及其设置,而无需重新启动服务器。