ClickHouse architecture#

ClickHouseのEDB Postgres AIは、スタンドアロンインスタンスまたは分散クラスターとして実行され、シャーディング、レプリケーション、またはその両方をサポートしています。

ClickHouseサーバーは、データを保存および処理するデータベースエンジンです。 ClickHouseクライアントは、サーバーに接続し、クエリを実行するためのコマンドラインインターフェイスです。

デプロイメントトポロジ#

トポロジは、データがどのように保存、複製、および提供される方法と、どの程度の操作の複雑性を引き受けるかを決定します。

  • シングルノード ClickHouseは、単一のホストでスタンドアロンインスタンスとして実行されます。クラスター調整は必要ありません。開発、テスト、およびシングルテナントの分析ワークロードに適しています。

  • マルチノードクラスター データは水平スケールのためにシャード全体に分散され、高可用性のために複製されます。マルチノードクラスターは、シャーディングのみ、レプリケーションのみ、または両方を一緒に使用できます。レプリケーションにはClickHouse Keeperが必要です。

テーブルエンジン#

ClickHouseでは、すべてのテーブルに、データを保存、インデックス付け、およびレプリケートする方法を決定するエンジンがあります。プライマリファミリーはMergeTree で、高スループット分析ワークロード用に設計されています。 ReplicatedMergeTree は、ノード間のビルトインレプリケーションでそれを拡張します。分散クエリの場合、Distributed エンジンは、クエリを基になるシャードにルーティングし、結果をマージする仮想テーブルとして機能します。完全なリファレンスについては、ClickHouseドキュメントの Table engines を参照してください。

シャーディング#

ClickHouseは、シェアードナッシングアーキテクチャを使用します。各ノードは独自のストレージを持ち、独立して動作します。シャーディングは、各ノードが異なる行のサブセットを保持する複数のノードにデータを水平に分割することにより、これを利用します。クエリーはシャード間で並列実行され、その結果はクライアントに返される前にマージされます。このアプローチでは、書き込みスループットとストレージを単一のノードで処理できる量を超えてスケールしますが、高可用性は提供されません。シャードがダウンすると、そのデータは利用できなくなります。

シャーディングには、クラスターコーディネーションは必要ありません。クエリルーティングは、 Distributed テーブルエンジンによって処理され、すべてのシャードにクエリーを並列送信し、結果を透過的にマージします。詳細は、 ClickHouseがクエリをルーティングする方法 を参照してください。

レプリケーション#

レプリケーションは、マルチプルのノードで同じデータの同一のコピーを保持します。 1つのノードがダウンすると、別のレプリカがクエリーを提供できます。レプリケーションは高可用性を提供しますが、自分自身でストレージ容量や書き込みスループットを向上させることはありません。

ClickHouseでレプリケーションを有効にするには、テーブルエンジンとしてReplicatedMergeTree を選択し、ClickHouse Keeperを展開します。 Keeperは、どのデータ部分が存在するかを追跡し、コピーの同期を保つことにより、レプリカを調整します。

ClickHouse Keeper#

ClickHouse Keeperは、ClickHouseのビルトイン調整サービスであり、Apache ZooKeeperと同等の役割を持ち、プロトコルレベルでそれと互換性があります。以下を処理します。

  • レプリカ全体に存在するデータ部分の追跡

  • レプリカの同期を維持するためのインサートの調整

  • 分散DDLの実行 すべてのノードに適用されるスキーマの変更

  • レプリケート操作のリーダーの選出

KeeperはRaftコンセンサスアルゴリズムを使用し、機能するにはノードのクォーラムが必要です。最小は3つのキーパーノードであり、これにより、クラスターは1つのノードの障害を許容できます。 5つのKeeperノードを使用すると、2つの障害を許容できます。

Keeperは2つの方法で実行できます。コロケーション展開では、Keeperは同じノードでClickHouseサーバーと並行して実行されます。コロケーションは管理が簡単で、小規模なクラスターに適しています。専用展開では、Keeperはサーバーワークロードのない別のノードで実行されます。これにより、分離が向上し、大規模なクラスタまたは実稼働クラスタに推奨されます。

シャーディングとレプリケーションの組み合わせ#

シャーディングとレプリケーションを組み合わせて、ホリゾンタル スケールと高可用性の両方を実現します。一般的な運用トポロジは、それぞれ2つのレプリカを持つ2つのシャードであり、合計4つのサーバーノードになります。

  • 2つのシャードは、2つの独立したデータセットにわたる水平スケールを提供します。

  • シャードごとに2つのレプリカが高可用性を提供します。各シャードにはスタンバイコピーがあります。

Keeperは、少なくとも3つのノードで実行され、サーバーノード上のコロケーションまたは別の専用ノードで実行されます。 2つのKeeper展開アプローチに関するガイダンスについては、 展開オプション を参照してください。

</ div>

ClickHouseがクエリをルーティングする方法

データが複数のノードにまたがってシャード化されている場合、クエリーはすべてのシャードに到達し、その結果を組み合わせる必要があります。 ClickHouseは、Distributed テーブルエンジンでこのルーティングを処理します。

Distributed テーブルは、各シャードの基になるMergeTree またはReplicatedMergeTree テーブルの上部にある仮想テーブルです。任意のノードでDistributed テーブルを照会すると、そのノードはクエリをすべてのシャードにパラレルにファンアウトし、結果を収集し、マージされた結果を返します。

アプリケーションは、シャーディングトポロジを知る必要がなく、サーバーノードに接続し、Distributed テーブルを照会します。書き込みの場合、 Distributed テーブルに挿入すると、定義したシャーディングキー通常は列のハッシュを使用して、各行が正しいシャードにルーティングされます。

シャーディング、レプリケーション、およびKeeperトポロジはすべてClickHouseサーバー構成ファイルで定義されます。詳細については、 ClickHouseドキュメントの Configuration files を参照してください。