前提条件
- ご利用のサービスには 2 つ以上のレプリカ が必要です。単一レプリカのサービスでは、固定先となるレプリカがありません。
- この機能が GA になると、Enterprise ではデフォルトで利用可能になります。
- 標準の ClickHouse Cloud サービスでサポートされています。BYOC は現時点ではサポートされていません。
レプリカ対応ルーティングの設定
session_id を引き続き使用してください。ロールアウトがサービスに適用されるまで、X-ClickHouse-Replica-Tag ではスティッキーなルーティングは提供されません。再起動は不要です。
HTTP ベースのルーティング
- X-ClickHouse-Replica-Tag(推奨)
- session_id(legacy)
ワークロードを特定のレプリカに固定するには、HTTPS インターフェイス経由のリクエストに clickhouse-go (v2) では、
X-ClickHouse-Replica-Tag ヘッダーを付加します。プロキシはヘッダー値に対して一貫性ハッシュを使用するため、レプリカ数が変わらない限り、同じ値を持つリクエストは同じレプリカに送られます。異なる値はそれぞれ独立してハッシュ化され、同じレプリカまたは別のレプリカに送られる可能性がありますが、値をどのレプリカにマッピングするかを指定することはできません。既存のサービスホスト名を使用してください。特別な sticky ホスト名や DNS の変更は必要ありません。ヘッダー値には、アプリケーション名、ユーザー ID、ワークロードラベルなど、任意の文字列を指定できます。ヘッダーのないリクエストには、通常の負荷分散が適用されます。各リクエストに X-ClickHouse-Replica-Tag ヘッダーを設定します。Protocol: clickhouse.HTTP を設定し、HttpHeaders 接続オプションを使用してヘッダーを渡します。X-ClickHouse-Replica-Tag を使用すると、ClickHouse HTTP セッションを作成せずにレプリカアフィニティを実現できます。同時実行リクエストでも、SESSION_IS_LOCKED を発生させることなく同じタグを再利用できます。書き込み後の読み取り整合性
複数のレプリカがあるサービスでは、あるレプリカへの書き込みは、レプリケーションが追いつくまで他のレプリカには反映されない場合があります。書き込み時にX-ClickHouse-Replica-Tag ヘッダーを送信し、後続の読み取りでも同じヘッダー値を使用します。プロキシにより両方のリクエストが同じレプリカにルーティングされるため、他のレプリカの反映が遅れている場合でも、自分で書き込んだデータを読み取れます。このパターンは、対話型アプリケーションや、挿入を検証してから次の処理に進む ETL ジョブなど、書き込み後に同じデータを直ちに読み戻すワークロードに適しています。すべてのレプリカにわたる、より広範な保証が必要な場合は、ClickHouse Cloud で select_sequential_consistency を 1 に設定することもできます。接続先のレプリカを確認する
同じX-ClickHouse-Replica-Tag 値を使用して、SELECT hostName() の例を再度実行します。レプリカ数が変わらない限り、同じホスト名が返されるはずです。異なるヘッダー値は、別のレプリカにマッピングされる場合があります。従来のサブドメインベースのルーティング
従来のサブドメインベースのルーティングの仕組み
従来のサブドメインベースのルーティングの仕組み
以前は、レプリカ対応ルーティングを有効にすると、サービスのホスト名に対してワイルドカードサブドメインを利用できました。ホスト名が
abcxyz123.us-west-2.aws.clickhouse.cloud のサービスでは、*.sticky.abcxyz123.us-west-2.aws.clickhouse.cloud に一致する任意のホスト名 (例: aaa.sticky.abcxyz123.us-west-2.aws.clickhouse.cloud) は、Envoy によって特定のレプリカに一貫してハッシュされました。元のホスト名では引き続き、デフォルトのルーティングアルゴリズムである LEAST_CONNECTION による負荷分散が使用されました。レプリカ対応ルーティングの制約事項
レプリカ数の変更によりスティッキー性が変化します
レプリカ対応ルーティングはワークロードの分離ではありません
プライベートリンクと従来のサブドメイン方式
*.sticky.* ホスト名パターン用の DNS を追加する必要があり、設定を誤るとレプリカ間で負荷が偏る可能性があります。
レプリカ対応ルーティングには HTTP プロトコルが必要です
トラブルシューティング
- 使用しているサービスで利用可能なルーティング方式 (
X-ClickHouse-Replica-Tagヘッダーまたは 従来session_idURL クエリパラメータ) を使用していることを確認してください。 - すべてのリクエストで、完全に同じルーティング値を使用していることを確認してください。
- 有効化後、しばらく待ってください。反映までに 1 分未満かかることがあります。
- 最近レプリカ数が変更されたかどうかを確認してください。スケーリング後の再マッピングは想定される動作です。新しいマッピングを確認するには、
SELECT hostName()を使用してください。