跳至主要内容

可组合协议

可组合协议允许更灵活地配置对 ClickHouse 服务器的 TCP 访问。此配置可以与传统配置共存或取代传统配置。

可组合协议部分在配置 xml 中被标记为 protocols

示例

<protocols>

</protocols>

基本模块定义协议层

示例

<protocols>

<!-- plain_http module -->
<plain_http>
<type>http</type>
</plain_http>

</protocols>

其中

  • plain_http - 可以被其他层引用的名称
  • type - 表示将被实例化以处理数据的协议处理程序,协议处理程序集是预定义的
    • tcp - 本机 clickhouse 协议处理程序
    • http - http clickhouse 协议处理程序
    • tls - TLS 加密层
    • proxy1 - PROXYv1 层
    • mysql - MySQL 兼容协议处理程序
    • postgres - PostgreSQL 兼容协议处理程序
    • prometheus - Prometheus 协议处理程序
    • interserver - clickhouse 服务器间处理程序
注意

gRPC 协议处理程序未在 可组合协议 中实现

端点(即监听端口)由 <port> 和(可选)<host> 标签表示

示例

<protocols>

<plain_http>

<type>http</type>
<!-- endpoint -->
<host>127.0.0.1</host>
<port>8123</port>

</plain_http>

</protocols>

如果 <host> 被省略,则使用根配置中的 <listen_host>

层序列由 <impl> 标签定义,引用另一个模块

示例: HTTPS 协议的定义

<protocols>

<!-- http module -->
<plain_http>
<type>http</type>
</plain_http>

<!-- https module configured as a tls layer on top of plain_http module -->
<https>
<type>tls</type>
<impl>plain_http</impl>
<host>127.0.0.1</host>
<port>8443</port>
</https>

</protocols>

端点可以附加到任何层

示例: HTTP(端口 8123)和 HTTPS(端口 8443)端点的定义

<protocols>

<plain_http>
<type>http</type>
<host>127.0.0.1</host>
<port>8123</port>
</plain_http>

<https>
<type>tls</type>
<impl>plain_http</impl>
<host>127.0.0.1</host>
<port>8443</port>
</https>

</protocols>

可以通过引用任何模块并省略 <type> 标签来定义其他端点

示例: another_http 端点是为 plain_http 模块定义的

<protocols>

<plain_http>
<type>http</type>
<host>127.0.0.1</host>
<port>8123</port>
</plain_http>

<https>
<type>tls</type>
<impl>plain_http</impl>
<host>127.0.0.1</host>
<port>8443</port>
</https>

<another_http>
<impl>plain_http</impl>
<host>127.0.0.1</host>
<port>8223</port>
</another_http>

</protocols>

一些模块可以包含其层参数的特定内容

示例: 对于 TLS 层,可以指定私钥(privateKeyFile)和证书文件(certificateFile

<protocols>

<plain_http>
<type>http</type>
<host>127.0.0.1</host>
<port>8123</port>
</plain_http>

<https>
<type>tls</type>
<impl>plain_http</impl>
<host>127.0.0.1</host>
<port>8443</port>
<privateKeyFile>another_server.key</privateKeyFile>
<certificateFile>another_server.crt</certificateFile>
</https>

</protocols>