当前位置: 首页 > news >正文

ClickHouse 配置文件使用说明

本文主要介绍 ClickHouse 的配置文件。在 ClickHouse 中配置主要分为两类,一类是负责 server 端配置的,另一类是负责用户端配置的。负责 server 端配置的一般会放在 config.xml 文件中,负责用户端配置的一般会放在 users.xml 文件中。当然如果都放在 config.xml 文件中也是可以的,但按照习惯还是会将二者分为两个文件进行配置。所后续不在将 config.xmlusers.xml 分开来介绍下面的功能,都是可以通用的。

多配置文件功能

ClickHouse 为了配置文件具有更大的灵活性,还支持了多配置文件功能,就是可以将负责不同功能的配置分为多个配置文件,ClickHouse 在启动时会去读区所有文件,并将所有配置文件内容进行合并来作为最终的配置。这样的好处是可以对配置进行分类管理。比如 ClickHouse 集群拓扑结构相关的配置就可以独立为一个配置文件(通常可以命名为 clusters.xml),宏相关的配置也可以独立为一个配置文件(通常可以命名为 macros.xml)。

想使用多配置文件功能就需要了解下 ClickHouse 是如何加载配置文件的。ClickHouse 默认的主配置的路径为 /etc/clickhouse-server/config.xml(当然也可以在 ClickHouse Server 启动时用 --config-file=/etc/config/config.xml 指定配置文件的路径),如果在 config.xml 所在的文件夹内存在 config.d 目录,ClickHouse 就会遍历这个目录里的所有文件,并将内容进行合并,生成最终的配置内容。每次重启 ClickHouse 都会执行上述步骤。

如果将相同配置设置了不同值,ClickHouse 是怎么处理的呢?下面以 macro 为例看 ClickHouse 是怎么处理的。实验分为两种情况,一种是在 config.xml 重复配置 marco,另一种是使用不同的配置文件重复配置 marco

单文件重复配置

我们在 config.xml 增加如下配置,然后启动 ClickHouse Server ,查看 a 的值。

<clickhouse>......<macros><a>1</a></macros><macros><a>2</a></macros>
</clickhouse>

通过下面语句查询 a 的值为1。

SELECT * FROM system.macros┌─macro─┬─substitution─┐
│ a     │ 1            │
└───────┴──────────────┘

这说明在同一个配置文件中,如果相同配置参数配置不同值,那 ClickHouse 会使用先出现的值。

多文件重复配置

分别在 config.d 目录中配置两个文件 a.xmlb.xml,同样都配置 macro

a.xml:
<clickhouse><macros><a>1</a></macros>
</clickhouse>b.xml:
<clickhouse><macros><a>2</a></macros>
</clickhouse>

同样通过上述语句查询 a 的值为2。

SELECT * FROM system.macros┌─macro─┬─substitution─┐
│ a     │ 2            │
└───────┴──────────────┘

为什么这次会取值为2而不是1呢?我们可以观察到 ClickHouse Server 的日志:

2023.01.07 11:26:51.092322 [ 25669095 ] {} <Debug> ConfigReloader: Loading config 'config.xml'
Processing configuration file 'config.xml'.
Merging configuration file 'config.d/a.xml'.
Merging configuration file 'config.d/b.xml'.

ClickHouse 首先会加载 config.xml,然后遍历 config.d 目录来加载所有配置文件,顺序是文件名的字母序,如果不同文件包含同样的配置参数时,后加载的会覆盖之前的参数值。如果把 a.xml 改为 c.xml,那最终执行 SELECT * FROM system.macros 的结果就会为1,可以自行尝试一下。

小结

虽然我们了解了 ClickHouse 加载配置文件的行为,但是还是尽可能不要出现重复配置的问题。

配置替换功能

ClickHouse 支持使用环境变量、 xml 节及 zookeeper 节点值替换配置值。

使用环境变量替换

ClickHouse 支持在 xml 节中使用 from_env="xxx" 的方式来使用环境变量替换当前配置值。用法如下:

<clickhouse><macros><replica from_env="REPLICA" /></macros>
</clickhouse>

可以通过 export REPLICA=0 来指定环境变量,再通过 SELECT * FROM system.macros WHERE macro = 'replica' 查询结果为0。等价于配置 <replica>0</replica>

使用 xml 节替换

ClickHouse 支持在 xml 节中使用 incl="xxx" 的方式来指定某个 xml 节来替换当前 xml 节。用法如下:

<clickhouse><zookeeper incl="zookeeper-servers" optional="true"><node><host>host1</host><port>2181</port></node></zookeeper>  
</clickhouse><clickhouse><zookeeper-servers><node><host>host2</host><port>2182</port></node></zookeeper-servers>
</clickhouse>

这样 <zookeeper> 就会被 <zookeeper-servers> 所包含的内容替换。等价于如下配置方式:

<clickhouse><zookeeper><node><host>host2</host><port>2182</port></node></zookeeper>
</clickhouse>

optional="true" 这个属性是为了避免指定的 xml 节不存在会报错的问题。如果为 true,且 <zookeeper-servers> 不存在,则 <zookeeper> 会使用 host 为 host1 和 port 为 2181 的配置。一般情况不建议配置 optional="true",涉及到关键配置信息,有错误要提前报错发现,避免使用错误的配置。

使用 zookeeper 节点值替换

ClickHouse 支持在 xml 节中使用 from_zk="xxx" 的方式来指定某个 zookeeper 的节点值(需要 xml 节形式)来替换当前 xml 节。用法如下:

<clickhouse><remote_servers from_zk="/clickhouse/remote_servers"><default><shard><internal_replication>true</internal_replication><replica><host>host1</host><port>9000</port></replica><replica><host>host2</host><port>9000</port></replica></shard></default></remote_servers>
</clickhouse><!-- zookeeper 节点/clickhouse/remote_servers内容如下 --><default><shard><internal_replication>true</internal_replication><replica><host>host3</host><port>9000</port></replica><replica><host>host4</host><port>9000</port></replica></shard></default>

这样名为 default 的 cluster 配置就会被 zookeeper 上 /clickhouse/remote_servers 节点的值替换,请注意 zookeeper 节点中的缩紧,这会被带入配置中,如果为了对其考虑,在 zookeeper 节点中可以保留缩紧。

配置支持 yaml 格式

ClickHouse 也支持 yaml 的格式的配置文件。具体例子可以参考 config.yaml.example。而且 ClickHouse 还支持 yaml 和 xml 混合使用,但是不能在一个文件中同时使用 yaml 和 xml。本节不过多介绍这部分内容。因为 yaml 在表达 xml 节的属性(如 from_env="xxx")时的写法不是很直观易懂,并且一般生产环境中还是默认使用 xml 格式来做配置文件,所以这部了解即可,不推荐使用。


欢迎添加微信:xiedeyantu,讨论技术问题。

http://www.lryc.cn/news/19143.html

相关文章:

  • 如果不是互联网人,谁会找到这些神器?
  • Neo4j优化
  • CF1692G 2^Sort 题解
  • 关于物理像素,逻辑像素,像素比
  • JavaSE基础部分总结
  • C++基础知识
  • 2023/2/24 图数据库Neo4j的理解与应用
  • 适合视力障碍者的Linux
  • Tina Linux 存储开发指南
  • 【洛谷 P2670】[NOIP2015 普及组] 扫雷游戏 题解(模拟)
  • 【nohup引发磁盘读写高】nohup命令导致服务器磁盘读写占满该如何修复?
  • MySQL(二)索引和SQL优化
  • Java常用日期类(包含三代)_Date类及Calendar类等
  • 计算机网络你都懂了吗
  • 3.4 Spring Boot 日志配置
  • 3款百里挑一的国产软件,逆天好用,装了就舍不得卸载
  • Java实现在线沟通功能
  • 识别密文加密类型
  • node报错
  • 如何使用开源 BI 工具 DataEase 实现系列数据分析呢?
  • 金仓数据库安装
  • 深入浅出Webpack2-快速掌握webpack基本配置
  • 如何使评论具有可操作性?取悦客户的指南
  • 一文带你彻底搞懂Nginx反向代理
  • 手写SpringBoot的starter
  • pytorch1.2.0+python3.6
  • WindowsPowerShell 停止、启动、暂停和重启服务、卸载服务
  • 数据库专题
  • 浅谈MySQL索引
  • 安装包UI美化之路-通过nsNiuniuSkin来做Electron程序的打包、发布与升级