可组合协议允许对ClickHouse服务器的TCP访问进行更灵活的配置。该配置可以与传统配置共存或替代它。
配置可组合协议
可组合协议可以在XML配置文件中进行配置。协议部分由protocols
标签在XML配置文件中表示:
配置协议层
您可以使用基本模块定义协议层。例如,要定义HTTP层,您可以向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跨服务器处理程序
端点(监听端口)由<port>
和可选的<host>
标签表示。
例如,要配置前面添加的HTTP层上的端点,我们可以如下修改我们的配置:
<protocols>
<plain_http>
<type>http</type>
<!-- endpoint -->
<host>127.0.0.1</host>
<port>8123</port>
</plain_http>
</protocols>
如果省略<host>
标签,则使用根配置中的<listen_host>
。
配置层序列
层序列通过<impl>
标签定义,并引用另一个模块。例如,要在我们的plain_http模块之上配置一个TLS层,我们可以进一步修改我们的配置如下:
<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>