ストレージとコンピュートの分離
概要
このガイドでは、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
テーブルエンジンを使用することで実現可能です。詳細については、以下のガイドを参照してください: