可组合协议
可组合协议允许更灵活地配置对 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
协议处理程序未为 Composable protocols
实现
端点(即监听端口)由 <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>
标签来定义其他端点
示例: 为 plain_http
模块定义了 another_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>