Перейти к основному содержимому
Перейти к основному содержимому

Компонуемые протоколы

Обзор

Компонуемые протоколы позволяют более гибко настраивать доступ по TCP к серверу ClickHouse. Эта конфигурация может сосуществовать с традиционной конфигурацией или заменять ее.

Настройка компонуемых протоколов

Компонуемые протоколы могут быть настроены в XML-файле конфигурации. Раздел протоколов обозначен тегами protocols в XML-файле конфигурации:

<protocols>

</protocols>

Настройка уровней протоколов

Вы можете определить уровни протоколов, используя базовые модули. Например, чтобы определить 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 для межсерверного взаимодействия
примечание

Обработчик протокола gRPC не реализован для Компонуемых протоколов

Настройка конечных точек

Конечные точки (слушающие порты) обозначаются тегами <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> и указанием на другой модуль. Например, чтобы настроить уровень TLS поверх нашего модуля plain_http, мы могли бы далее изменить нашу конфигурацию следующим образом:

<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>