ストレージとコンピュートの分離
概要
このガイドでは、ClickHouse と S3 を使用して、ストレージとコンピュートが分離されたアーキテクチャを実装する方法を探ります。
ストレージとコンピュートの分離とは、計算リソースとストレージリソースが独立して管理されることを意味します。ClickHouse では、これによりスケーラビリティ、コスト効率、および柔軟性が向上します。必要に応じてストレージとコンピュートリソースを個別にスケールし、パフォーマンスとコストの最適化が可能です。
ClickHouse を S3 バックに使用することは、特に「コールド」データに対するクエリパフォーマンスがそれほど重要でないユースケースにおいて有用です。ClickHouse は、MergeTree エンジン用のストレージとして S3 を使用する S3BackedMergeTree をサポートしています。このテーブルエンジンにより、ユーザーは S3 のスケーラビリティとコストの利点を活用しながら、MergeTree エンジンの挿入およびクエリパフォーマンスを維持できます。
ストレージとコンピュートの分離アーキテクチャの実装と管理は、標準的な ClickHouse のデプロイメントと比べて複雑であることに注意してください。セルフマネージドの ClickHouse は、このガイドで説明するようにストレージとコンピュートの分離を可能にしますが、設定なしでこのアーキテクチャを使用するために ClickHouse Cloud の利用をお勧めします。このサービスでは、SharedMergeTree テーブルエンジン を使用できます。
このガイドは、ClickHouse バージョン 22.8 以上を使用していることを前提としています。
AWS/GCS ライフサイクルポリシーを設定しないでください。これはサポートされておらず、テーブルが壊れる原因となる可能性があります。
1. ClickHouse ディスクとして S3 を使用する
ディスクの作成
ClickHouse の config.d ディレクトリに新しいファイルを作成して、ストレージ構成を保存します:
新しく作成したファイルに以下の XML をコピーし、BUCKET、ACCESS_KEY_ID、SECRET_ACCESS_KEY を、データを保存したい AWS バケットの詳細に置き換えます:
S3 ディスクの設定をさらに指定する必要がある場合(たとえば、region を指定するか、カスタム HTTP header を送信する場合など)、該当する設定のリストは こちら で見つけることができます。
また、access_key_id および secret_access_key を以下のように置き換えることができ、環境変数および Amazon EC2 メタデータから資格情報を取得しようとします:
構成ファイルを作成したら、そのファイルの所有者を clickhouse ユーザーおよびグループに更新する必要があります:
ClickHouse サーバーを再起動して、変更を反映させることができます:
2. S3 バックのテーブルを作成する
S3 ディスクを正しく構成したかどうかをテストするために、テーブルを作成し、クエリを実行してみましょう。
新しい S3 ストレージポリシーを指定してテーブルを作成します:
エンジンを S3BackedMergeTree と指定する必要はありませんでした。ClickHouse は、ストレージで S3 を使用している場合、自動的にエンジンタイプを内部で変換します。
正しいポリシーでテーブルが作成されたことを示します:
以下の結果が表示されるはずです:
新しいテーブルにいくつかの行を挿入しましょう:
行が挿入されたかどうかを確認しましょう:
AWS コンソールで、データが S3 に正常に挿入された場合、指定されたバケットに ClickHouse が新しいファイルを作成したことがわかります。
すべてが正常に動作した場合、これで ClickHouse を使用してストレージとコンピュートが分離された状態になっています!

3. フォールトトレランスのためのレプリケーションの実装(オプション)
AWS/GCS ライフサイクルポリシーを設定しないでください。これはサポートされておらず、テーブルが壊れる原因となる可能性があります。
フォールトトレランスのために、複数の AWS リージョンに分散された複数の ClickHouse サーバーノードを使用し、各ノードに S3 バケットを用意することができます。
S3 ディスクを使用したレプリケーションは、ReplicatedMergeTree テーブルエンジンを使用することで実現可能です。詳細については、以下のガイドを参照してください: