コンポーザブルプロトコル を使用すると、ClickHouseサーバー への TCP アクセスをより柔軟に構成できます。この構成は、従来の構成と併用することも、置き換えることもできます。
コンポーザブルプロトコルは、XML設定ファイルで設定できます。プロトコル
セクションは、XML設定ファイル内のprotocolsタグで示されます。
基本モジュールを使ってプロトコルレイヤーを定義できます。たとえば、HTTP レイヤーを定義するには、
protocols セクションに新しい基本モジュールを追加します。
モジュールは、以下の項目に従って設定できます。
plain_http - 別のレイヤーから参照できる名前
type - データ処理のために生成されるプロトコルハンドラーを示します。
事前定義されたプロトコルハンドラーとして、以下を使用できます。
tcp - ClickHouseネイティブプロトコルハンドラー
http - HTTP ClickHouseプロトコルハンドラー
tls - TLS暗号化レイヤー
proxy1 - PROXYv1レイヤー
mysql - MySQL互換プロトコルハンドラー
postgres - PostgreSQL互換プロトコルハンドラー
prometheus - Prometheusプロトコルハンドラー
interserver - ClickHouseのinterserverハンドラー
gRPC プロトコルハンドラーは コンポーザブルプロトコル では実装されていません
エンドポイント (待ち受けポート) は、<port> と省略可能な <host> タグで表されます。
たとえば、先ほど追加した HTTP レイヤーにエンドポイントを設定するには、
次のように設定を変更します。
<host> タグが省略されている場合は、ルート設定の <listen_host> が
使用されます。
レイヤーシーケンスは、<impl> タグを使って定義し、別の
モジュールを参照することで構成します。たとえば、plain_http モジュールの上に TLS レイヤーを設定するには、
設定をさらに次のように変更できます。
エンドポイントはどのレイヤーにも割り当てることができます。たとえば、HTTP (ポート8123) とHTTPS (ポート8443) のエンドポイントを定義できます。
任意のモジュールを参照し、<type> タグを省略することで、追加のエンドポイントを定義できます。たとえば、plain_http モジュールに対する another_http エンドポイントは次のように定義できます。
エンドポイントごとのカスタム HTTP ハンドラー
デフォルトでは、すべての type=http プロトコルエントリは同じ <http_handlers>
設定を共有します。これを変更するには、別の設定セクションを参照する <handlers> タグを追加します。これにより、各 HTTP ポートで
異なる HTTP ルーティングルールのセットを提供できます。
たとえば、ポート 8124 で独自のハンドラーを持つ別の HTTP API を実行するには:
この例では、ポート 8123 へのリクエストには標準の <http_handlers> ルールが使用され、
ポート 8124 へのリクエストには <http_handlers_alt> ルールが使用されます。<handlers>
を省略した場合、エンドポイント はデフォルトの <http_handlers> にフォールバックします。
カスタムハンドラーのセクションは、
<http_handlers> と同じ形式です。
カスタムハンドラーのセクションへの変更は設定のリロード時に検出され、対応する
エンドポイント は自動的に自動的に再起動されます。
一部のモジュールでは、追加のレイヤーパラメータを指定できます。たとえば、TLS レイヤーでは、秘密鍵 (privateKeyFile) と証明書ファイル (certificateFile) を次のように指定できます。