合成可能なプロトコル
概要
Composable プロトコルを使用すると、ClickHouse サーバーへの TCP アクセスをより柔軟に設定できます。この設定は、従来の設定と併用することも、置き換えることもできます。
コンポーザブルプロトコルの設定
コンポーザブルプロトコルは XML 設定ファイルで設定できます。protocols セクションは、XML 設定ファイル内で protocols タグで表されます。
プロトコルレイヤーの設定
プロトコルレイヤーは基本モジュールを使用して定義できます。たとえば、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> タグで指定します。
例えば、先ほど追加した 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)を
次のように指定できます。